텔레그램 봇

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

Author image Yoonbae Cho

매수할 종목수량 결정하기

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

Author image Yoonbae Cho

SLRCLUB 중고장터 모니터링

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

Author image Yoonbae Cho

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

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

Author image Yoonbae Cho

동시성 향상 방안

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

Author image Yoonbae Cho

코스피/코스닥 종목코드, 업종 가져오기

Daum에서 제공하는 코스피/코스닥 전 종목의 정보를 가져오는 코드입니다. 실행결과 [INFO|fetch_symbol_daum.py:12] 2016-09-10 10:11:33,284 > Starting to fetch stocks from daum (pid:5528) [DEBUG|fetch_symbol_daum.py:27] 2016-09-10 10:11:33,285 > Preparing 4 tasks for event loop [DEBUG|fetch_symbol_daum.py:57] 2016-09-10 10:11:33,286 > Fetching task [DEBUG|fetch_symbol_daum.py:65] 2016-09-10 10:11:33,286 > Requesting http://finance.daum.net/xml/xmlallpanel.daum?stype=P&type=S [DEBUG|fetch_symbol_daum.py:57] 2016-09-10 10:11:33,294 > Fetching task [DEBUG|fetch_symbol_daum.py:65] 2016-09-10 10:11:33,294 > Requesting http://finance.daum.net/xml/xmlallpanel.daum?stype=Q&type=S [DEBUG|fetch_symbol_daum.py:57] 2016-09-10 10:11:33,296 > Fetching task [DEBUG|fetch_symbol_daum.py:65] 2016-09-10 10:11:33,296 > Requesting http://finance.daum.net/xml/xmlallpanel.daum?stype=P&type=U [DEBUG|fetch_symbol_daum.py:57] 2016-09-10 10:11:33,299 > Fetching task [DEBUG|fetch_symbol_daum. »

Author image Yoonbae Cho

네이버 주가정보 가져오기

네이버에서 제공하는 주가정보를 가져와 SQLite에 저장합니다. Python의 asyncio를 활용하여 단일 스레드에서 시분할로 작동하게끔 만들었는데, 아래의 작업들을 개별 coroutine으로 분리하여 network IO, disk IO에 따른 block이 발생하면 다른 coroutine으로 제어권이 넘어갑니다. 네이버 웹서버에 접속하여 데이터 가져오기 가져온 정보 파싱하기 데이터베이스에 저장하기 실행방법 (8월부터 삼성전자(005930) 주가와 거래량 가져오기) python3 fetch.py 2016-08-01 2016-09-04 005930 015760 실행결과 [INFO|fetcher.py:16] 2016-09-04 21:28:07,950 > Starting process (pid:1336) [INFO|fetcher.py:17] 2016-09-04 21:28:07,950 > This pricess will fetch interday prices from NAVER [INFO|fetcher. »

Author image Yoonbae Cho

알고리즘 트레이딩 프레임웍

‘16. 6월부터 개발하고 있는 알고리즘 트레이딩 시스템이 모양새를 갖춰가고 있습니다. 앞으로 이 시스템은 주식/채권/파생상품 종목선정부터 자산배분, 리스크관리를 거쳐 증권사 API를 이용해 실제 거래주문을 보내고, 거래결과를 정량적으로 분석/평가할 것입니다. 일단 파이썬으로 프로토타입을 개발해 보았습니다. 메시징큐 라이브러리인 ZeroMQ를 활용해 프로세스간 통신을 구현하였습니다. 첨부된 소스코드의 주요기능 - 1) 주가정보 취득, 2) Database에 저장, 3) 종목별 주가 모니터링 등 각각의 기능을 별도의 프로세스로 작동시켜 시스템의 속도를 최대한으로 이끌어 낼 수 있게끔 병렬처리 실행결과 [DEBUG|yQuant.py:23] 2016-08-07 13:41:43,920 > Process[feed_price] is started (pid:5312) [DEBUG|yQuant. »

Author image Yoonbae Cho