32/64비트 파이썬 프로세스 통신

필자는 대신증권 API(파이썬)으로 이용하고 있는 사용자 중 하나이다. 실제 파이썬 코드를 이용해 자동으로 매수/매도하는 프로그램을 운영하고 있다. 주식장이 열리는 날이면 매일 HTS 와 파이썬 모듈을 구동시키고 출근한다.

수익률이 크지는 않지만 (계속 보완/테스트 진행 중) 그래도 포기할만큼은 아니고 간간히 매수/매도로 수익이 나면 기분도 좋아지곤 한다.

이제는 2차 버전을 생각하고 있다. 수익률 때문은 꼭 아니지만 계속 새로운 것을 시도하면서 학습하고자 하는 목적도 있다. 바로 강화 학습 기반의 트레이딩 시스템이 다음 목표이다.

32/64비트 파이썬 통신이 필요한 이유

문제는 강화학습(DQN)을 하기 위해서는 텐서플로우(tensorflow)가 필요한데 대신증권 파이썬 모듈하고 돌리려니 문제가 발생했다. 텐서플로우는 64비트 환경에서 돌고 대신 증권은 32비트 환경에서만 구동해야 된다는 것이다. 텐서플로우를 32비트 환경에서 돌리는 것도 문제 해결은 될 수 있으나 32비트 환경에서 텐서플로우를 돌리기 위해서는 소스를 다운받아 컴파일해야 된다. 인터넷을 찾아보면 쉽지 않아 보인다. 한참을 좌절하고 있다가 우연히 IPC(Inter Process Communication)  관련 내용을 활용해보자라는 생각이 들었고 관련 자료를 찾아보기로 했다.

그러나 파이썬 기반 IPC 모듈이 딱히 마음에 드는 것이 없어 내 마음대로 필요한 내용을 구현해보고 사용해보고 있다. IPC도 아닌 fake IPC라고 스스로 명명해놓고 있다.

32/64비트 파이썬 기반 IPC 통신 방법

원리는 간단하다. 64비트 환경의 파이썬 모듈(예. 텐서플로우)에서 32비트 환경의 파이썬 모듈(대신증권 파이썬 모듈)을 호출한다. 그러면 대신증권의 파이썬 모듈에서 처리를 하고 나서 결과를 파일로 저장하고 이를 64비트 파이썬 모듈에서 읽어서 처리한다. 호출부 소스와 실행부 소스 일부는 아래와 같다.

호출부 (64비트 파이썬 환경)

# ...
from sytrap import fakeipc as fipc

sipc = fipc.SytrapFakeIpc()
p = sipc.call('get_item', itcode='A168330')  # get_item는 32비트 환경에서 구동
# ...

실행부 (32비트 파이썬 환경)

# ...
ret = syc.get_item(itcode)   
p.dump(ret, open(ippath, 'wb'))  # 처리 결과를 미리 약속된 경로에 저장
# ...

다만 호출할 때 64비트 환경에서 32비트 파이썬 실행기와 파이썬 모듈 경로를 정확히 제시해주어야 한다. 아래는 호출 방법의 예이다.

 <64비트 환경 python.exe> 64비트.py <32비트 환경 python.exe> 32비트.py

구현해야 할 양이 조금은 많아졌지만 (함수 옵션 처리, 파일 입출력 등) 드디어 64비트 텐서플로우를 이용해 32비트 대신증권 모듈을 호출할 수 있게 되어 마음껏 딥러닝 기반 트레이딩 시스템을 돌릴 수 있게 되었다. 수익률까지 좋아지길 기대하고 있다. ㅎ

저와 비슷한 고민을 하시는 분들에게 조금이나마 도움이 되길 바란다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중