금융권에서 주식시장이나 채권시장을 실시간으로 모니터링 할 필요가 있으신 분들이라면
증권사 HTS나 KOSCOM CHECK Expert에서 제공하는 DDE를 많이 이용하실 겁니다.
예를 들어 시스템 트레이딩을 위해 엑셀에서 DDE로 실시간 데이터를 받은후 VBA를 이용하여 트레이딩 시그널을
생성하는 식이지요.
하지만 최신 Machine Learning 기법이나 Deep Learning 엔진들을 엑셀로 돌리는 데에는 한계가 있습니다.
요즘 대다수의 ML/DL엔진들은 파이썬으로 직접 구현하거나 좋은 패키지들을 이용하여 간단히 만들수 있으므로
Python상에서 DDE 실시간 데이터를 받아서 ML엔진으로 처리하는 예제를 소개해드리고자 합니다.
1. DDE 정보 알아내기
CHECK Expert 기준으로 DDE 정보를 알아내는 법을 설명드리겠습니다.
KOSPI200의 현재가를 DDE로 받기 위해서 저는 CHECK 2001 시장지표1 화면을 이용하였습니다.
위와 같이 실시간 데이터 위에서 우측마우스를 클릭하면 메뉴가 나오는데 여기에 "엑셀실시간 붙여넣기"가 있습니다.
저 메뉴를 클릭하면 아래와 새로운 엑셀 워크북이 열리고 DDE가 셀에 삽입되서 실시간으로 데이터를 받아옵니다.
DDE로 데이터를 받아오기 위해서는 몇가지 정보(Serivce, Topic, Item)가 필요합니다.
위 엑셀 화면 입력란의 CheckExpert, 15313, 51*002가 바로 Service, Topic, Item에 해당됩니다.
참고로 CHECK Expert에서는 숫자 데이터 뿐만 아니라 문자 데이터도 DDE로 받아올 수 있어 유용합니다
예를 들어 아래 1342 시세창에서 당일 매수 매도 상위권 창구인 증권사명도 DDE로 받아올 수 있지요.
이를 이용해서 매매창구 변동에 따른 매매전략도 만들어 볼 수 있을 듯 합니다.
2. DDE 클라이언트 구현
"python DDE client"로 구글링을 해보면 아래의 코드를 얻을 수 있습니다.
http://code.activestate.com/recipes/577654-dde-client/
DDE Client « Python recipes « ActiveState Code
A DDE Client using ctypes for Windows. Unlike the pywin32 implementation this code supports advice requests. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
code.activestate.com
다만 위의 코드는 2011년에 작성된 것으로 python2용입니다.
다행히 어느 분께서 python3용으로 다시 리팩토링해두셨습니다.
https://booja.blogspot.com/2017/12/python2-python3-dde-client.html
Python2 & Python3 DDE client
pywin32 모듈없이 동작하는 순수 파이썬 코드로 제작된 DDE 클라이언트를 조금 수정했다. 파이썬2와 파이썬3에서 모두 동작한다. 다운로드는 https://sites.google.com/site/jsgetfile/ddeclient.py 아니면...
booja.blogspot.com
DDE 서버-클라이언트 구조를 깊이 이해하시고 싶으신 분께서는 위의 code들을 참조하셔서 공부하시면 좋을 듯 합니다.
저는 클라이언트를 쉽게 이용할수 있게 DDE Client Class의 callback 펑션을 입력받도록 수정하고 run method를 추가하였습니다.
3. 전체 코드 설명
첨부된 노트북을 처음부터 설명해드리겠습니다.
가장 먼저 할일은 자신만의 ML 엔진을 클래스로 만드는 것입니다.
클래스는 predict()라는 메쏘드를 갖고 있고 이를 이용하여 새로 DDE를 통해 들어온 데이터를 받아 예측치를
반환하게 되죠. 또한 이 엔진은 이미 학습을 완료한 후 피클로 저장되어 있어야 합니다.
위의 예제에서는 값을 입력 받으면 (임의로) UP 혹은 DOWN을 반환하는 클래스를 정의하고 이를 인스턴스로 만든후 피클로 저장하였습니다.
1번에서 설명드린 DDE Client 코드를 그대로 카피한 후 callback 부분을 수정하고 run method를 추가했습니다.
DDE Client에 연결해줄 callback 함수를 정의하는 부분입니다.
함수에는 item과 value 두가지 값이 들어오며 이를 이용하여 원하는 로직을 넣어주면 됩니다.
위의 예제에서는 value를 ML엔진의 predict() 메소드에 전달하여 시장이 상승할지 하락할지를 받아오고
이를 바탕으로 signal을 출력하도록 되어 있습니다.
마지막으로 DDEClient() 클래스를 이용하여 클라이언트 인스턴스를 만들어줍니다.
이때 Service, Topic, callback 함수명을 입력해줘야 합니다.
클라이언트의 advise() 메쏘드를 이용하여 KOSPI200 topic인 '51*002' 데이터를 받아오도록 등록한후
run()을 실행시키면 연속적으로 DDE 데이터가 들어오고 즉시 callback함수가 실행되면서 Long/Short을 출력하는 모습을
볼 수 있습니다.
위의 예제를 바탕으로 더욱 더 정교하고 멋지게 DDE+ML을 구현해보셨으면 좋겠습니다.
추가적인 문의사항 있으시면 bellus77@gmail.com 으로 메일주세요~ :)
'Programming' 카테고리의 다른 글
{Python} 단어로 구성된 긴 list를 손쉽게 만드는 방법 (0) | 2019.12.14 |
---|