CoreOS, Docker, Kafka 설치하기

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

July 14, 2018

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

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

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

April 22, 2018

종목코드 가져오기

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

텔레그램 봇

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

March 27, 2018

매수할 종목수량 결정하기

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

October 6, 2017

SLRCLUB 중고장터 모니터링

SLRCLUB의 중고장터에 원하는 제품의 판매글이 등록되면 텔레그램 메시지를 보내줍니다. 소스코드

February 19, 2017

멀티프로세싱 프로토타입 데모

실시간 주가를 8개의 프로세스가 분산처리하는 프로토타입

January 22, 2017

프로세스 역할분담 및 프로세스간 통신 구현결과

주가정보 취득부터 분석, 리스크 관리, 주문실행 및 결과보고에 이르는 일련의 과정을 동시성 향상 측면에서 프로세스별로 나누어 설계중인데, ZeroMQ를 활용하여 각 모듈의 통신과정을 구현하고 있습니다. Fetcher : 실시간 주가정보를 비동기 방식으로 가져와 50001 포트에 Publish하며, 이와 동시에 실시간 주가정보는 메모리에 위치한 데이터베이스에 저장해 향후 backtest시 활용 Monitor : 50001 포트를 Subscribe 하여 새로 입수된 주가정보는 메모리의 배열에 추가하고 거래할 타이밍인지 분석 만약 매수/매도할 조건에 부합될 경우, 다음 단계인 Risk Manager 포트인 50002로 Publish한다....

September 25, 2016

동시성 향상 방안

주가정보를 가져와서 분석하고, 주문을 실행하는 일련의 과정을 어떻게 나누어 분산시켜야 컴퓨터의 능력을 최대한 활용할 수 있을까? 이 문제에 대해 고민중입니다. 흔히 쓰는 듀얼코어 CPU가 장착된 노트북과 같은 단일 머신의 경우 통상적으로 프로세서 개수는 듀얼코어와 하이퍼스레딩을 통해 4개의 논리적인 프로세서를 활용할 수 있으므로, 단계별로 작업을 수행할 프로세스들은 아래와 같이 구성할 수 있을겁니다. 물론 향후에는 클러스터링을 통해 Scalability를 증가시킬 수 있겠죠. 프로세스 구성 실거래 또는 백테스터 메인 프로세스 1개 주가정보 취득 2개...

September 18, 2016