Unix/Arch Linux

docker + wine + MFC 조합으로 키움증권 OpenAPI 리눅스 실행 성공

ForceCore 2021. 12. 9. 20:28

인증샷부터 올리고 시작한다.

 

평상시에는 윈도우 없이 편안하게 클라우드에서 실행이 가능하다. ㄷㄷㄷㄷㄷ

 

https://github.com/forcecore/KiwoomRestfulCpp/blob/master/docker/README.md

 

GitHub - forcecore/KiwoomRestfulCpp

Contribute to forcecore/KiwoomRestfulCpp development by creating an account on GitHub.

github.com

좀 더 가다듬은 다음에 내놓으려고 했는데 일단 선공개 한다.

https://github.com/forcecore/KiwoomRestfulCpp/releases -> exe파일 자체는 여기 있다.

 

Wine version
wine-6.22

Winetricks version
20210206-next - sha256sum: 10d6518a92035512f9d5a20fcd8eab0b15dedb8a3c42eb7b6ad703ce909482a2

 

TODO:

키움증권 api는 event-driven하게 잘 만들어져있다. 그래서 restful api로 만드는 것 보다는 websocket같은게 더 적합해보임. 아니면 zmq?? 어느쪽이든 상관없다. 하지만 내가 그 작업을 하긴 귀찮다. 오픈소스로 작업했으니 누가 더 편한 거로 개량해줄지도... 지금은 개발 여력이 없고 당분간은 생각 없다.

 

websocket, zmq로 뭘 하려는고하니...

지금 restful api방식을 고수한다면 buy/sell, get price 등 하려는 action마다 함수를 만들어줘야 할 것이다. 그러면 너무 귀찮다. 이미 많은 분들이 python wrapper를 많이 만들어두었는데 그것을 C++로 또 해야 한다. -_- 그보다는,

 

CommConnect, CommRqData 이런 함수를 거의 직역에 아깝게 wrapping하고 websocket, zmq로

 

this->kiwoom.SetInputValue(L"계좌번호", (LPCTSTR)accno.c_str());
this->kiwoom.SetInputValue(L"비밀번호", L"");
this->kiwoom.SetInputValue(L"상장폐지조회구분", L"1");
this->kiwoom.SetInputValue(L"비밀번호입력매체구분", L"00");

 

이런 하드코딩된 부분을

for input_value in request["input_value"]:
  this->kiwoom.SetInputValue(input_value[name], input_value[value])

이런 pseudo code로 wrapping하는 것이다. 그러면 키움에서 response가 올텐데... 이게 restful api와 가장 큰 차이점인데, restful api는 반드시 응답을 해줘야하지만 socket을 쓰면 그렇지 않을 것이란 것이다.

 

void CKiwoomRestfulCppDlg::KiwoomOnReceiveMsg(LPCTSTR sScrNo, LPCTSTR sRQName, LPCTSTR sTrCode, LPCTSTR sMsg)

이런 함수에서 소켓 클라이언트한테 메시지가 왔다고 전달만 해주면 되는 부분...

 

그러면 어려운 C++부분은 코딩을 최소화 하고 나머지 input value 생성이나 received message parsing은 더 쉬운 언어로 할 수 있을 것이다. 그리고 많은 분들이 koapy나  이미 돼있고. 그리고 이렇게 하면 다른 액티브X와 인연이 없는 언어들까지 브릿지 해줄 수 있을 것이다.

 

https://pypi.org/project/koapy/

 

koapy

Kiwoom Open Api Plus Python

pypi.org

 

https://github.com/breadum/kiwoom

 

GitHub - breadum/kiwoom: 키움 증권 OpenAPI 파이썬 심플 라이브러리

키움 증권 OpenAPI 파이썬 심플 라이브러리. Contribute to breadum/kiwoom development by creating an account on GitHub.

github.com