파이썬으로 크레온 플러스(Creon Plus) 자동 로그인하기
시스템 트레이딩에 관심 있는 분들이라면 주식투자 자동화에도 관심이 있을 것입니다. 주식투자 자동화의 첫걸음은 증권사 HTS API 자동 로그인 입니다. 증권사 HTS마다 그 방법이 다르며 이번 포스트에서는 대신증권의 크레온 플러스를 파이썬에서 자동으로 로그인하는 방법을 다루겠습니다.
크레온 다운로드센터에서 CREON HTS
를 다운받습니다. CREON HTS
에 CREON Plus
가 포함되어 있습니다. 설치 과정은 생략하겠습니다.
크레온 HTS를 실행하면 다음과 같은 로그인 창이 나타날 것입니다. 직접 크레온 HTS에 로그인하여 API를 사용할 때는 로그인 창 상단에 creon plus
버튼을 누르고 ID, 비밀번호, 공인인증 비밀번호(조회전용이 아닌 경우)를 입력하여 로그인 버튼을 누르면 됩니다.
이제 파이썬에서 크레온 HTS에 자동으로 로그인하기 위한 준비를 합니다.
- 파이썬 32bit 환경
- pywinauto
- pywin32
파이썬 32bit 환경은 아나콘다를 설치 후에 32bit 환경을 설치하는 것을 권장합니다. 그 방법은 이 포스트를 참고 바랍니다.
dependency 준비
커맨드 창에서 다음 pip
명령으로 pywinauto
와 pywin32
를 설치합니다.
pip install pywinauto
pip install pywin32
크레온 로그인
크레온 API를 감싸는(wrapping) 클래스를 만들겠습니다.
import win32com.client
from pywinauto import application
class Creon:
def __init__(self):
self.obj_CpUtil_CpCybos = win32com.client.Dispatch('CpUtil.CpCybos')
def kill_client(self):
os.system('taskkill /IM coStarter* /F /T')
os.system('taskkill /IM CpStart* /F /T')
os.system('taskkill /IM DibServer* /F /T')
os.system('wmic process where "name like \'%coStarter%\'" call terminate')
os.system('wmic process where "name like \'%CpStart%\'" call terminate')
os.system('wmic process where "name like \'%DibServer%\'" call terminate')
def connect(self, id_, pwd, pwdcert):
if not self.connected():
self.disconnect()
self.kill_client()
app = application.Application()
app.start(
'C:\CREON\STARTER\coStarter.exe /prj:cp /id:{id} /pwd:{pwd} /pwdcert:{pwdcert} /autostart'.format(
id=id_, pwd=pwd, pwdcert=pwdcert
)
)
while not self.connected():
time.sleep(1)
return True
def connected(self):
b_connected = self.obj_CpUtil_CpCybos.IsConnect
if b_connected == 0:
return False
return True
def disconnect(self):
if self.connected():
self.obj_CpUtil_CpCybos.PlusDisconnect()
Creon 클래스는 자동 로그인 기능을 위해 다음 함수들을 가집니다.
kill_client
: 실행중인 크레온 HTS 프로그램을 종료합니다.connect
: 크레온 ID, 비밀번호, 공인인증서 비밀번호를 입력받아서 크레온 HTS에 로그인 합니다.connected
: 크레온 HTS에 연결되었는지 확인합니다.disconnect
: 크레온 HTS와의 연결을 해제합니다.
여기서 connect
함수를 호출하면 기존 크레온을 종료하고 로그인을 시도하게 되어 있습니다.