개발은 파이썬을 이용하도록 하겠습니다. 관련 예제가 블로그에 많이 있습니다. dev center에 있는 예제와 블로그들을 참고하였습니다.

개발 IDE로는 spyder나 Visual Studio Code 등 본인이 익숙한 것을 사용하면 됩니다.

전 기존에 visual studio를 사용하던 습관이 있어서 Visual Studio Code를 사용하기로 했습니다.

이베스트 xingApi와 통신을 위해서는 win32com을 사용합니다. 이를 위하여 win32com을 설치해야하는데요. 아나콘다32를 설치하면 일반적으로 함께 설치가 됩니다. 혹시라도 win32com을 찾을 수 없다고 나오면 아래와 같은 명령어로 설치하시면 됩니다.

pip install pywin32

우선 login 과정을 보도록 하겠습니다.

그 절차는 다음과 같습니다.

  1. 로그인에 관련된 정보를 입력한 후 xing api에게 login 명령어를 보냅니다.
  2. xingApi에서 답이 오기를 기다립니다.
  3. 등록한 callback 함수로 login 결과가 옵니다. login 성공 여부를 여기에서 확인합니다.

이베스트 주식 거래를 위한 class를 만들었습니다.

앞으로 선물거래 그리고 암호화폐 거래까지 포함하기 위하여 거래소 별로 class를 만들어 보도록 하겠습니다.

거래소별 base class인 Exchange를 기반으로 이베스트주식 거래 class입니다.

class XASessionEventHandler:  
    login_state = 0

def OnLogin(self, code, msg):  
    print('on login start')  
    if code == "0000":  
        print("login succ")  
        XASessionEventHandler.login\_state = 1  
    else:  
        print("login fail")  
def wait_for_event(code) :
    while XAQueryEventHandler.query_state == 0:
        pythoncom.PumpWaitingMessages()
    if XAQueryEventHandler.query_code != code :
        print('diff code : wish(',code,')', XAQueryEventHandler.query_code)
        return 0
    XAQueryEventHandler.query_state = 0
    XAQueryEventHandler.query_code = ''
    return 1
class EBestStock(Exchange):  
    def __init__(self):
        self.operation_begin = '085000'
        self.operation_end = '153000'

    def login(self, server, id, pwd, cer_pwd, acc, acc_pwd) :
        self.instXASession = win32com.client.DispatchWithEvents("XA_Session.XASession", XASessionEventHandler)
        self.id = id
        self.passwd = pwd
        self.cert_passwd = cer_pwd
        self.account_number = acc
        self.account_pwd = acc_pwd
        self.instXASession.ConnectServer(server, 20001)
        self.instXASession.Login(self.id, self.passwd, self.cert_passwd, 0, 0)
        while XASessionEventHandler.login_state == 0:
            pythoncom.PumpWaitingMessages()

        self.login = XASessionEventHandler.login_state
        return self.login        
if __name__ == "__main__":
    print('\\nebest testing')

server = "hts.ebestsec.co.kr"  # or "demo.ebestsec.co.kr" 모의투자
id = "user id"
passwd = "user password"
cert_passwd = "공인인증서암호"
account_number = "계좌번호"
account_pwd = "계좌비밀번호"

ebest_st = EBestStock()
ret = ebest_st.login(server, id, passwd, cert_passwd, account_number, account_pwd)
if ret == 0 :
    print('fail to login')
    quit(0)

print('login ok')  

실행 결과입니다. 계정 정보를 정확하게 입력하였다면 login 성공할 것입니다.

 

 

반응형

설정

트랙백

댓글