미국시장 5분단위 주가정보 가져오기

필요성 백테스트를 위해 과거 주가정보를 확보하는 것은 무척 중요합니다. 과거 주가정보를 충분히 가지고 있어야 실제 주식시장과 유사하게 상황을 재현해 자신의 투자전략이 충분한 성과를 내는지, 백테스트 엔진은 오작동 없이 작동하는지를 확인할 수 있기 때문입니다. 국내시장의 경우, 매 거래 체결시 생성되는 가장 자세한 틱 데이터를 무료로 확보하는게 그리 어렵지는 않습니다. 틱 데이터는 가장 자세한 데이터라서 코스닥/코스피 2,500여 종목에서 매일 약 천만건 이상의 데이터가 생성되며, 이를 활용하면 보다 정밀하게 시장을 재현할 수 있습니다....

December 2, 2021 · 2 min

슬리피지를 고려한 시장가 시뮬레이션

슬리피지란? 슬리피지(Slippage)란 우리가 주식시장에 시장가 주문시 원하는 가격 대비 높거나 낮은 금액으로 체결되는 현상을 말합니다. 주된 원인은 거래량이 충분치 않거나, 주문량이 너무 많거나, 시장의 가격이 급변하거나, 또는 주문이 지연되어 처리될때 발생될 수 있습니다. 예를들어, 20,000원짜리 주식의 호가는 코스피/코스닥 공히 50원 단위입니다. 20,000원에 체결되길 희망하며 시장가로 매수 주문을 낸다면, 20,000원에 그대로 주문이 체결되는 경우도 많겠지만, 여러가지 원인에 의해 20,050원이나 20,100원에 체결되기도 합니다. 자동주식거래 시스템 개발시 이러한 슬리피지를 전혀 고려하지 않는다면, 백테스터(Backtester)에서 높은 수익을 가져오는 훌륭한 전략도 시장에서는 수익을 전혀 내지 못할 가능성도 있습니다....

March 14, 2020 · 4 min

Redis를 Configuration Store로 활용하기

Redis는 키-값 형태의 데이터를 메모리에 저장하는 데이터베이스입니다. 메모리에 데이터를 저장하기 때문에 속도가 무척 빠른 것이 장점입니다. 물론 메모리 가격이 SSD나 HDD 보다는 훨씬 비싸기 때문에 대용량의 데이터를 저장하기에는 적합하지 않습니다. Configuration Store 최근 Redis를 설정값 저장공간으로 사용하는 아이디어가 떠올라 구현을 시작했습니다. 예를들어 ZeroMQ의 Publisher 노드의 접속정보와 같은 설정을 Redis에 저장해 놓으면, 여러대의 컴퓨터에 설정파일을 배포하는 번거로운 절차가 사라질겁니다. 각각의 컴퓨터는 Redis에 등록된 설정을 그때그때 가져오기만 하면 되는거죠. ZooKeeper 책을 읽으면서 든 생각입니다....

July 25, 2018 · 2 min

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