ZeroMQ 테스팅툴 zmqc 소스코드 컴파일 (Windows 10)

개요 2년전, ZeroMQ를 처음 접했던 시절 Publish와 Subscribe 테스트를 위해 직접 Python으로 테스팅툴을 직접 만들어 썼던 기억이 있습니다. 네트워크를 이용한 분산처리를 하다보면 테스트가 다소 불편하기 때문에 커맨드라인에서 각종 소켓을 생성해 표준 입력(stdin)으로 메시지를 보내거나, 받은 메시지를 표준출력(stdout)으로 확인하는 정도의 기능을 하는 툴이 꼭 필요하거든요. 최근 nanomsg를 기웃거리다 보니, nanocat라는 유틸리티가 기본적으로 제공되고 있었습니다. ZeroMQ에서도 유사한 툴이 있겠다 싶어 GitHub을 찾아보니, Publish/Subscribe 외에도 Push/Pull 등 여러가지 프로토콜을 지원하는 Python 프로젝트가 있었고, 이를 Go로 포팅한 프로젝트가 눈길을 끌었습니다....

July 23, 2018 · 3 min

ZeroMQ 4.2.5 소스코드 컴파일 (Windows 10)

ZeroMQ는 Publish/Subscribe, Request/Respond 등의 프로토콜을 구현하는 경량 메시징큐 라이브러리입니다. 리눅스에서는 apm이나 yum과 같은 패키지 인스톨러를 통해서 간단히 설치할 수 있지만, 윈도우에서는 최신 버전이 바이너리로 제공되지 않기 때문에 직접 소스코드를 컴파일해야 합니다. 준비 ZeroMQ 다운로드 GitHub에서 최신 버전의 zip 파일을 받아 임의 폴더에 임시로 압축을 해지합니다. 여기서는 C:\zeromq-4.2.5 폴더로 가정한다. CMake 설치 CMake 최신 버전의 x64 인스톨러를 받아 설치합니다. CMake는 과거 Makefile이 갖는 복잡하고 번거로운 절차를 줄여주는 것이 주된 기능인데, 여기서는 단일한 소스코드를 여러가지 플랫폼에서 컴파일하게 도와주는 역할을 합니다....

July 22, 2018 · 2 min

파이썬 3.7의 asyncio.run()

파이썬 3.7이 출시되었습니다. 다양한 개선사항 중에서도 눈에 띄는 것은, 드디어 코루틴을 간편하게 쓸 수 있는 asyncio.run() 함수. 그동안 이벤트 루프 만든다고 코드가 지저분했는데, 이제 무척 깔끔해졌습니다. import asyncio async def hello_world(): print("Hello World!") asyncio.run(hello_world())

July 22, 2018 · 1 min

자동 주식거래 시스템의 메시지 처리

자동 주식거래 시스템의 메시지 국내 2천여 종목의 거래체결 데이터는 하루 천만건이 넘습니다. 그야말로 빅데이터의 전형이죠. 자동 주식거래 시스템은 천만건의 빅데이터를 실시간으로 분석해 주가의 방향을 예측해 배팅해야 합니다. 시스템의 성패는 최종적으로 돈을 벌 수 있는 매매전략의 보유여부로 귀결되지만, 당장 밑바닥부터 시스템을 설계하고 구현하는 개발자의 입장에선 과연 천만건의 데이터를 적시에 처리할 수 있느냐가 1차 관문입니다. 메시징 시스템의 종류 시장의 거래체결 데이터, 증권사에 요청할 매매주문 데이터는 사실 단위 시스템간에 주고받는 메시지입니다. 메시지는 자동 주식거래 시스템의 시작과 끝이며, 이를 처리하는 메시징 시스템은 전체 시스템 관점에서 봤을때 척추와 같은 가장 중요한 역할을 담당합니다....

July 15, 2018 · 3 min

CoreOS, Docker, Kafka 설치하기

Overview yQuant의 여러가지 기능들 중에서 증권사 API 연계를 위해 윈도우의 DLL/OCX를 사용해야 하는 일부 기능(주가수신/주문요청)을 제외한 모든 기능들은 리눅스에서 동작합니다. 특히나 다수 종목의 주가를 분석하기 위해선 높은 연산능력이 요구되므로, 여러대의 컴퓨터를 클러스터로 구성해야 합니다. 다소 복잡한 클러스터 구성을 편리하고 탄력적으로 하기 위해 제법 오랜기간 동안 고민하고 공부했습니다. CoreOS 설치 CoreOS는 말그대로 리눅스의 Core만으로 구성한 배포본으로, 기본 리소스 사용량이 적기 때문에 Docker Container를 Hosting하기에 가장 합리적인 선택입니다. 개발단계에서는 VirtualBox위에 가상머신으로 설치하기 위해 설치방법 참고했으며, 실제 서버에 설치하는 경우에도 설치방법은 동일합니다....

July 14, 2018 · 2 min

putty로 ssh 접속시 비밀번호 생략하기

Overview 접속할 ssh 서버에 공개키를 사전에 등록해 놓으면, ssh 서버는 접속을 요청한 클라이언트가 제시한 비밀키로 인증하는 개념입니다. 한번 해두면 너무나 편리한데, 노트북에 윈도우를 새로 설치하는 경우에나 가끔 하다보니 할때마다 기억이 안나서 간략히 정리했습니다. 1. 공개키/비밀키 만들기 PuTTY Key Generator (PuTTYgen)을 이용해 비밀키를 만들어 id_rsa.ppk 파일로 저장 (참고로, id_rsa.ppk 파일에는 공개키도 함께 들어있음) 2. PuTTY 접속정보에 ppk 파일 지정 PuTTY 실행 후 Connection > SSH > Auth 화면에서 Private Key file for authentication: 항목에 전 단계에서 만든 id_rsa....

July 14, 2018 · 1 min

시계열 데이터베이스, InfluxDB 도입

도입 배경 시간에 따라서 달라지는 주가와 같은 데이터를 시계열 데이터(Time Series)라 하는데, 대표적인 시계열 데이터가 바로 주가입니다. 실제로 한국거래소(KRX)에서 하루에 거래되는 2천여 종목의 매매체결 데이터는 하루에만 보통 900만건에서 1,000만건에 달합니다. 이처럼 방대하고 다양한 금융 데이터를 한곳에 효율적으로 저장해 놓아야 향후 매매전략 수립을 위한 백테스트를 한결 편리하게 수행할 수 있을 겁니다. 따라서, MySQL 같은 전통적인 RDBMS나, MongoDB NoSQL가 아닌, 시계열 데이터를 위한 데이터베이스 찾아보았는데, 최근 가장 각광받는 InfluxDB를 도입하기로 했습니다. 구글의 Go 언어로 작성되어 속도가 빠르며, 라이브러리 의존성이 없어 설치가 간편하기 때문이죠....

April 22, 2018 · 3 min

종목코드 가져오기

https://github.com/yoonbae81/yQuant.StockData KRX에서 종목코드를 가져오는 Python 코드를 Clojure로 컨버전했습니다. KRX의 동작방식은 OTP를 먼저 발급받고, 이를 POST로 다시 보내면 JSON 형태의 자료를 보내줍니다. 유가증권과 ETF를 별도로 제공하고 있는데, Redis에 아래와 같은 형태로 저장합니다. a. Symbol hash > HGETALL symbol:275280 name KODEX MSCI모멘텀 market kospi fullcode KR7275280006 b. KOSPI/KOSDAQ set > SMEMBERS kospi: symbol:001440 symbol:005450 . . > SMEMBERS kosdaq: symbol:0134780 symbol:0217500 . . c. ETF set > SMEMBERS etf: symbol:0292110 symbol:0143850 . ....

April 2, 2018 · 1 min

텔레그램 봇

지난 2월부터 yQuant의 서브 프로젝트격으로 Telegram Bot을 Clojure로 개발중입니다. Bot을 통해 자동거래 실적을 모니터링하고, 동거래 외에도 특정 종목의 가격이 설정한 금액을 넘어설때 알람을 보냅니다. Bot과 대화를 주고받는 형태로 모든 기능을 구현하는게 의외로 까다로웠는데, Clojure의 Multimethod를 활용해서 구현하고 있습니다.. https://github.com/yoonbae81/yQuant.Bot

March 27, 2018 · 1 min

매수할 종목수량 결정하기

개요 매수할 주식의 수량을 결정하는 방법은 매우 다양합니다. yQuant는 사전에 결정한 [일간 최대 리스크(MR)] 내에서 매수할 종목의 [일평균 가격변동 폭(D)]을 감안해 수량을 결정합니다. [일간 최대 리스크(MR)]은 총 투자금액중 하루에 변동할 수 있는 금액의 상한값인데, 투자자 개인성향과 거래자산의 종류, 그리고 거래빈도에 따라 크게 달라질 수 있습니다. 계산절차 [일간 최대 리스크(MR)]을 100으로 나누어 [단위 리스크(UR)] 정의 (MR) 100만원 ÷ 100 = (UR) 1만원 [단위 리스크(UR)]에 [매수신호 강도(S)]를 곱하고, 해당 종목의 [일평균 가격변동 폭(D)]으로 나누어 매수수량 계산...

October 6, 2017 · 1 min