주식선물 마스터코드를 조회하는 T8401 구현하였습니다.

함수명은 아래와 같고, 인자는 필요가 없습니다.

def stock_future_master_code()

 

조회결과는 아래와 같이 4 값을 인자로 갖는 리스트의 리스트가 돌아옵니다.

[종목명, 단축코드, 확장코드, 기초자산코드]

 

사용법은 아래와 같습니다.

간단하게 test용으로 사용하기 위하여 gui에 포함하지 않았기 때문에 이 함수를 사용하려면 USING_GUI를 0으로 변경한 후 실행하여야 합니다.

 

USING_GUI = 0

 

조회 결과는 rets[0]에 리스트로 저장되어 있습니다. 

 

rets = stock_future_master_code()

cnt = 0

for ret in rets[0] :

  print(ret)

 

 

최초 10개만 출력한 예

 

반응형

설정

트랙백

댓글

오늘은 주식 과거 시세 조회하는 방법에 대하여 정리합니다. 과거 시세 데이터는 분 정보와 일 정보를 조회할 수 있습니다.

 

분 정보는 T8412를 이용하면 됩니다.

T8412조회를 위하여 chart_min() 함수를 만들었습니다. 입력변수는 아래와 같습니다.

 

# code : 조회할 code

# min_type : 주기구분 : 0:30초 1: 1분 2: 2분 ..... n: n분

# sdate : 시작 date

# edate : 끝 date

# qrycnt : 조회할 최대 수(500 정도면 하루치 분 정도 조회 가능)

def chart_min(code, min_type, qrycnt, sdate, edate, cts_date='', cts_time=' ') :

 

------------------------------

 

일 정보는 T8413을 이용하면 됩니다.

T8412조회를 위하여 chart_min() 함수를 만들었습니다. 입력변수는 아래와 같습니다.

 

# gubun : 주기구분(2:일 3:주 4:월)

# sdate : 시작 date

# edate : 끝 date

# qrycnt : 조회일자

def chart_day(code, gubun, qrycnt, sdate, edate, cts_date='') :

 

--------------------

 

이 함수를 이용하여 특정 종목들에 대하여 원하는 일자의 분, 일 시세 정보를 download할 수 있는 함수는 다음과 같습니다.

 

def download_min_data(codes, min_type, from_date, to_date) :

def download_chart_day(codes, dt, days) :

 

 

분 시세 조회 함수 사용법은 아래와 같습니다.

 

codes = ['069500', '114800']  # 복수 코드 입력 가능

from_date = 20200701 # 시작 일자 yyyymmdd

to_date = 20200708 # 끝 일자 yymmdd

# 종류 : 0:30초 1: 1분 2: 2분 ..... n: n분

min_num = 1 # 1분 데이터

download_min_data(codes, min_num, from_date, to_date)

 

 

일 시세 조회 함수 사용법은 아래와 같습니다.

 

codes = ['069500', '114800']  # 복수 코드 입력 가능

to_date = 20200707 # 다운받을 최종일자 (숫자 8자리)

num_days = 1 # 최종일 이전 며칠 , (당일만 원하는 경우에는 1, 7/7일 이전 10일치가 필요하면 10)

download_day_data(codes, to_date, num_days)

 

 

조회결과는 같은 폴더에 아래 형식으로 저장이 됩니다.

-- 분 데이터 --

069500_20200707_min_bong.txt

069500_20200707_min_bong.csv 

 

-- 분 데이터 --

069500_20200707_day_bong.txt

069500_20200707_day_bong.csv 

 

 

GUI로 원하는 code와 일자를 입력한 후 버튼을 누르면 간단하겠지만, 현재는 code와 일자는 소스에서 수정하는 방식입니다.

 

8412, 8413 버튼을 누르면 아래 함수가 호출됩니다.

 

8412 -> def Min_Chart_8412(self) :

8413 -> Day_Chart_8413(self):

 

이 함수에 원하는 코드와 일자를 입력하시면 됩니다.

 

만약 전 종목에 대하여 일/분 시세 데이터를 받고 싶으면 종목 코드를 다운 받은 후 for loop을 돌리시면 됩니다.

 

전체 소스는 아래 github에 있습니다.

 

 

https://github.com/multizone-quant/xing-api/blob/master/xing_sample.py

 

 

반응형

설정

트랙백

댓글

이베스트 xing api를 이용하여 잔고조회와 주문결과를 확인하는 방법에 대하여 정리합니다.

 

xing api에서 잔고를 요청하는 TR 코드는 T0424입니다.

T0424를 처리하는 함수 get_balance(ticker)를 만들었습니다.

입력이 'all' 이면 전체 잔고를 특정 코드를 입력하면 해당 종목의 잔고만 돌려줍니다.

 

 

xing api에서 주문결과를 알려주는 TR 코드는 T0425입니다.

T0425를 처리하는 함수 order_status_tr(kind='2', code='all', cmd_cont='')를 만들었습니다.

여기에서 인자의 의미는 아래와 같습니다.

 

kind : 체결 종류

  '0' : 모든 주문을 돌려 줌 (취소 포함)

  '1' : 체결된 주문만 돌려 줌 

  '2' : 미체결된 주문만 돌려 줌

code : 원하는 종목 혹은 'all'

cmd_cont : 체결 내용이 100개 이상일 때 사용

 

관련 소스코드는 아래 github에 올려놓았습니다.

https://github.com/multizone-quant/xing-api/blob/master/xing_sample.py

 

multizone-quant/xing-api

ebest xing api. Contribute to multizone-quant/xing-api development by creating an account on GitHub.

github.com

실행하기에 앞서 앞부분에 있는 로그인 정보를 입력하셔야 합니다. 만약 이 로그인이 정상적으로 동작하지 않는다면 오류 메세지가 납니다.

 

 

기본적으로 PyQty에서 동작합니다. 이는 향후 실시간 시세 정보를 받기 위합입니다. 만약 PyQty가 설치되어 있지 않다면 설치하신 후 사용하시기 바랍니다.

 

앞으로 xing api에 나오는 TR 명령어들을 정리해서 올리도록 하겠습니다.

 

 

반응형

설정

트랙백

댓글

개발은 파이썬을 이용하도록 하겠습니다. 관련 예제가 블로그에 많이 있습니다. 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 성공할 것입니다.

 

 

반응형

설정

트랙백

댓글

주식 자동 매매를 위하여 여러 증권사 API를 알아보았습니다. 수수료와 개발 지원 사항을 검토해보고 이베스트의 xingAPI를 이용하기로 결정하였습니다. 다음은 xingAPI를 사용하기 위한 절차입니다.

 

1. xingAPI 다운받기

우선 이베스트 증권사에 계좌를 만들어야합니다. 비대면으로 계좌를 만들 수 있으니 계좌가 없으면 우선 계좌를 개설하세요.

 

이베스트 계좌가 있다면 우선 로그인을 하세요. 로그인 후 고객센터/API 항목을 클릭하세요.

 

xingAPI 패키지 중 PC를 선택하면 프로그램이 다운됩니다. 다운이 끝나면 해당 프로그램을 실행하세요.

 

2. 설치가 끝났으면 dev center를 실행합니다.

dev center 창이 뜨면 필요한 정보를 입력합니다. 접속서버는 demo/실서버 중 선택하세요.

3. api 매뉴얼 다운로드

api 사용하기 전에 관련 매뉴얼을 보면 많은 도움이 됩니다. dev center 매뉴 중 도움말에서 xingAPI 매뉴얼을 다운받을 수 있습니다.

 

4. Res 파일 다운로드

api를 사용하기 위해서는 Res 파일이 필요합니다. 아래 버튼을 이용하여 Res 파일을 모두 다운받으세요.

5. xingAPI를 사용하기 위해서는 32bit 시스템이 필요합니다. 요즘 PC는 대부분 64bit이므로 32bit 환경을 만들어주는 도구가 필요합니다. 이를 위하여 Anaconda 32비트를 설치합니다.

아래 위치에서 다운 받으시면 됩니다. 

https://www.anaconda.com/products/individual 

 

Individual Edition | Anaconda

🐍 Open Source Anaconda Individual Edition is the world’s most popular Python distribution platform with over 20 million users worldwide. You can trust in our long-term commitment to supporting the Anaconda open-source ecosystem, the platform of choice

www.anaconda.com

 

윈도우를 사용한다면 윈도우용 패키지를 다운받습니다. 이때 반드시 32비트를 선택합니다.

 

Anaconda 32비트를 설치하면 모든 준비가 완료됩니다.

 

반응형

설정

트랙백

댓글