xing api 관련하여 오랜만에 글 올립니다.

 

오늘은 xing에서 제공하는 선물/옵션 관련 tr에 대하여 정리합니다.

작업할 tr은 다음과 같습니다.

 

tr0441 : 선물/옵션 보유종목 조회
tr8432 : 코스피200 지수선물 마스터 조회
tr8435 : 파생 코드 조회
tr2301 : 선물옵션 상세 정보 조회
tr2101 : 선물/옵션 현재가 조회 

 

선물/옵션 자동 매매를 하기 위한 아주 기본적인 TR 들입니다.

 

코드는 최대한 있는 그대로 개발하였기 때문에 이해하기 아주 쉬울 것으로 보입니다. 코드와 관련하여 특별하게 언급할 사항은 없기 때문에 아래 github에 있는 소스코드를 참고하시면 될 것 같습니다.

 

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

반응형

설정

트랙백

댓글

주식선물 마스터코드를 조회하는 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개만 출력한 예

 

반응형

설정

트랙백

댓글

자동매매프로그램을 돌리는 와중에 외출할 경우에는 신경이 많이 쓰입니다. 봇은 잘 동작하고 있는지 다른 큰 문제는 없는지 지 등등 자동매매 프로그램의 상태를 알고 싶죠. 이런 경우에 원격데스크탑 sw를 이용하여 pc에 접속할 수 있습니다만, 간단하게 휴대폰에서 자동매매 프로그램의 상태를 확인할 수 있으면 좋을 것 같습니다.

 

이번에 알아볼 내용은 텔레그램봇을 이용하여 xing api와 연동하는 부분입니다. 우선 텔레봇을 만들고 메세지를 주고 받는 방벙에 대하여 알아보겠습니다.

 

우선 텔레그램봇을 만드는 과정입니다.

일단 텔레그램을 휴대폰에 설치하신 후 아래와 같이 botfather를 찾은 후 선택을 합니다.

 

그 후 /newbot 을 입력한 후 봇을 설명하는 문구를 입력합니다.

 

다음으로는 봇의 이름을 입력합니다. 원하는 이름을 입력하시면 되는데, 만약 이미 등록된 봇과 같은 이름은 사용할 수 없습니다. 그러면 해당 이름의 봇이 사용할 token을 알려줍니다. 아래 빨간색으로 줄쳐진 부분이 XingTrBot의 ID라고 보시면 됩니다. 이 값을 프로그램에 사용하여야 합니다.

 

 

이제 나만의 telegram bot이 만들어졌습니다. telegram에서 찾아보죠.

앞에서 입력한 봇 이름을 검색하면 됩니다.

 

해당 봇을 선택한 후 /start를 누르면 봇이 동작상태가 됩니다.

 

이제 telegram 쪽에서 작업할 내용은 모두 끝났습니다. 파이썬 프로그램으로 bot과 대화하는 방법에 대하여 알아봅시다.

 

 

우선 telegram bot 파이썬 패키를 설치합니다.

 

pip install python-telegram-bot --upgrade

 

코드 상에서는 아래 패키지와 함수를 import하면 됩니다.

 

import telegram

from telegram.ext import Updater, MessageHandler, CommandHandler

 

그 후 my_token에 botFather가 준 token값을 복사합니다.

 

my_token = 'gotFather가 준 토큰'

 

동작방법은 간단합니다. '/'로 시작하는 경우에는 명령어로 구분합니다. '/'가 없으면 일반 메세지이고요.

 

명령어와 일반 메세지가 들어왔을 때 불리어지는 함수(handler)를 등록하면 끝입니다. 

 

우선 updater를 생성하고요.

 

updater = Updater(my_token)

 

작업을 하다보니 telegram_bot 버전이 upgrade되면서 사용방법이 많이 바뀌었습니다. 자세한 사항은 아래 참고하십시요.

https://github.com/python-telegram-bot/python-telegram-bot/wiki/Extensions-%E2%80%93-Your-first-Bot

 

python-telegram-bot/python-telegram-bot

We have made you a wrapper you can't refuse. Contribute to python-telegram-bot/python-telegram-bot development by creating an account on GitHub.

github.com

전체적인 사용법은 변화가 없는데, handler 함수가 불리어질 때 함수 인자가 변경이 되었습니다. 새 버전을 기준으로 설명합니다.

 

 

message가 왔을 때 받을 함수인 get_message, 명령어별로 받을 함수를 별도로 등록하면 됩니다.

아래 예에서 '/help'는 help_command()가 'sise'는 sise_command() 함수가 받습니다. 등록되지 않은 명령어의 경우에는 unknown() 함수 받도록 설정했습니다.

특히 sise의 경우에는 명령어 형식이 '/sise 코드' 이므로 코드값을 받을 수 있어야 합니다. 따라서 pass_args가 True로 설정하면 이 값도 받을 수 있습니다.

 

 

sise_command()를 좀 더 자세하게 보겠습니다.

함수의 인자는 아래와 같이 정의되어 있습니다.  사용자가 보낸 인자는 context.args 변수에 배열로 들어가있습니다. '/sise code' 로 입력을 하기 때문에 context.args[0]에 code가 들어있습니다. 과거 버전과 다르게 args가 context 안으로 들어갔습니다.

 

xing api와 연결하지 않아서 일단 임의의 값을 돌려주는 코드입니다. telegram bot이 어떻게 동작하는지 확인하는 용도이니 참고하십시요.

 

어떻게 동작하는지 telegram 화면으로 보여드리겠습니다.

 

 

의외로 telegram bot 만들고 메세지 주고 받는 방법이 간단합니다. 카카오톡에서도 이런 기능이 지원된다면 사용용처가 무척 많을 것 같은데요. 다음에는 xing api와 연동하여 시세 정보를 볼 수 있는 방법을 기술하도록 하겠습니다.

 

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

 

https://github.com/multizone-quant/system-trading/blob/master/telegram-bot.py

 

multizone-quant/system-trading

logics for system trading. Contribute to multizone-quant/system-trading development by creating an account on GitHub.

github.com

 

반응형

설정

트랙백

댓글

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

 

분 정보는 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의 장점 중의 하나가 Q 검색을 api로 할 수 있다는 점입니다. Q 검색으로 추출되는 종목은 매수 관점에서 지켜볼 필요가 있죠.

 

이번 글에서는 Q 검색리스트를 구한 후 해당 검색 조건에 맞는 종목을 검색하는 과정을 설명합니다.

 

 

우선 Q 검색 리스트를 얻는 TR은 T1826입니다.

아래 화면은 Q 검색 리스트를 받아온 상태입니다.

 

q검색리스트를 받아오는 함수는 get_q_query_list() 입니다. 입력으로는 아래 세 값 중의 하나를 정하면 됩니다.

  

def get_q_query_list(gubun) :  # gubun : 구분 (0(전체), 1(코스피), 2(코스닥))

 

검색 결과는 지원하는 Q 검색 번호의 리스트를 돌려줍니다.

특별한 사항이 없기 때문에 코드에 대한 자세한 설명은 생략합니다.

 

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

검색 조건 중 왼쪽에 있는 번호를 이용하여 각 검색 조건에 해당하는 종목을 받아올 수 있는 TR은 T1825입니다.

함수명은 get_q_query()입니다. 입력으로 들어가는 q_code는 T1826에서 받은 검색번호입니다. 구분은 get_q_query_list()와 같은 값을 사용합니다.

 

def get_q_query(q_code, gubun='0') :  # q_code : 검색 코드, gubun : 구분 (0(전체), 1(코스피), 2(코스닥))

 

샘플 프로그램에서는 모든 조건에 대하여 검색한 결과를 최대 12개까지 보여줍니다.

 

아래 화면은 Q 검색을 한 결과입니다.

 

타 증권사에 없는 xing만의 좋은 기능이니 적극 활용하시기 바랍니다.

 

source 코드는 아래 github에서 다운받으세요.

 

https://github.com/multizone-quant/xing-api

반응형

설정

트랙백

댓글

이베스트 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비트를 설치하면 모든 준비가 완료됩니다.

 

반응형

설정

트랙백

댓글