검색결과 리스트
ebestopenapi에 해당되는 글 1건
- 2024.03.04 [XingAPI] 파이썬과 OpenAPI로 실시간 TR 받기(2)
글
[XingAPI] 파이썬과 OpenAPI로 실시간 TR 받기(2)
지난 1편에 소개 글에 이어 실시간 TR을 추가하는 방법에 대하여 기술합니다.
어떻게 하면 초보자가 쉽게 코딩할 수 있을지 고민을 해 보았는데요.
초보자의 경우에는 가급적 어려운 부분이 가려져 있는 것이 좋을 듯합니다. websocket, send, recv 등등
내가 필요한 실시간 TR Code 값과 메세지를 받는 부분, 그리고 관심있는 ticker 정도만 전달할 수 있다면 보다 쉽게 개발을 할 수 있을 것 같습니다.
단언컨데 더 이상 쉬울 수 없는 방법을 소개하고자합니다.
------------------------
본 셈플은 크게 두개의 .py로 이루어져 있습니다.
open_api_real_lib.py # 실시간 real tr을 요청하는 부분. 일반 개발자는 신경안써도 되는 부분
my_open_api_real.py # 개발하고자하는 real tr에 대한 코드, 일반 개발자가 짤 코드
open_api_real_lib.py 에 있는 내용은 관심있으신 분들만 코드를 보세요.
이 글에서는 my_open_api_real.py를 만드는 방법에 대해서만 기술합니다.
이전 글에 있던 sample 코드는 아래와 같은 방식으로 개발이 가능합니다. 이전 셈플에 비하여 관련없는 부분은 모두 삭제가 되어서 코드가 간단하고 보기도 좋습니다.
from open_api_real_lib import main_loop
# 메세지 처리하는 함수
def on_future_sise(data):
price = float(data['price'])
vol = int(data['cvolume'])
offerho1 = float(data['offerho1'])
bidho1 = float(data['bidho1'])
print(format(price, '5.2f'), format(vol, '4d'), ' ', format(offerho1, '5.2f'), ' ', format(bidho1, '5.2f'))
if __name__ == '__main__':
# 실시간 TR 메세지 정의
FUTURE_SISE = 'FC0'
# 관심있는 ticker 정보
ticker = '101V3000' # 2024년 3월 만기 선물
main_loop(FUTURE_SISE, on_future_sise, ticker)
기본적인 구조는 실시간 TR을 정의하고 해당하는 TR에서 오는 메세지를 처리하는 함수를 만들면 됩니다.
여기에 선물 호가창을 추가하는 방법에 대하여 정리합니다.
GUI가 아닌 command 창에 실시간 정보를 출력하기 때문에 창 하나에 한 TR을 출력하는 방식을 적용해야합니다. 실행할 때 마다 소스를 변경해서 실시간 호가창/실시간 체결 정보를 보는 것은 비효율적이니 간단하게 메뉴 방식으로 실행시 선택하는 방식을 사용해보겠습니다.
우선 선물 호가창 정보가 왔을 때 어떻게 출력할 것인지를 코딩합니다. 본 예제에서는 호가창 아래 위 2개만 출력합니다. 최대 5개까지 출력할 수 있으니 관심있으시분 들은 수정하여 사용하세요.
참고로 선물 호가창 TR을 통해서 받는 정보의 형태는 api 문서를 참고하세요.
def on_future_order_book(data):
print(data['hotime'])
print('--------------------------------')
print(' 건수 수량 가격 수량 건수')
print('--------------------------------')
print(format(int(data['offercnt2']), '4,d'),
format(int(data['offerrem2']), '4,d'), ' ',
format(data['offerho2']))
print(format(int(data['offercnt1']), '4,d'),
format(int(data['offerrem1']), '4,d'), ' ',
format(data['offerho1']))
print(format(' ', '11s'),
format(data['bidho1']),
format(int(data['bidcnt1']), '5,d'),
format(int(data['bidrem1']), '5,d'))
print(format(' ', '11s'),
format(data['bidho2']),
format(int(data['bidcnt2']), '5,d'),
format(int(data['bidrem2']), '5,d'))
다음으로 추가하고 하는 실시간 TR 코드를 작성합니다.
if __name__ == '__main__':
# TR codes
FUTURE_SISE = 'FC0'
FUTURE_ORDER_BOOK = 'FH0' # <- 새로 추가
간단한 선택 메뉴를 만듭니다.
print('선택')
# 새로운 REAL TR 추가시 print문에도 추가
print('1: 선물시세 2:선물호가창')
sel = input()
입력 값에 따라 실행할 TR code와 메세지를 받을 함수명을 정의합니다.
if sel == '1' :
tr_code = FUTURE_SISE
func = on_future_sise
elif sel == '2' : # <- 추가
tr_code = FUTURE_ORDER_BOOK
func = on_future_order_book
입력받은 Real tr code값, 불려질 함수명, ticker 정보를 open api를 담당하는 곳으로 전달합니다.
main_loop(tr_code, func, ticker)
실행방법입니다.
1번 선물 시세를 선택하면 잠시 후 선택한 real tr 값을 처리한 결과가 화면에 출력됩니다.
동시에 여러 개의 실시간 TR 정보를 보고 싶으면 command 창을 여러 개 띄워서 메뉴 창에서 원하는 번호를 선택하면 됩니다.
------------------------------
본 lib를 사용하면 websocket에 대한 내용은 모두 몰라도 되기 때문에 보다 쉽게 open api를 이용할 수 있을 것으로 예상됩니다.
다음에는 화면을 좀 더 잘 볼 수 있게 하는 방법과 실시간 시세 정보를 가공해서 보여주는 방법에 대하여 기술하도록 하겠습니다.
이런식으로 말이죠. 상승/하락시 색 변경, 체결 수량 10개 이상만 출력
-----------
소스코드는 아래 위치에 있습니다. 두 파일을 모두 다운받으세요.
https://github.com/multizone-quant/api_ex/blob/main/my_open_api_real.py
https://github.com/multizone-quant/api_ex/blob/main/open_api_real_lib.py
'이베스트 API xingAPI' 카테고리의 다른 글
[XingAPI] 파이썬과 OpenAPI로 실시간 TR 받기(1) (1) | 2024.02.29 |
---|---|
[XingAPI] 파이썬과 OpenAPI로 TR 만들어보기 (0) | 2024.02.02 |
[XingApi] OpenAPI로 선물 tick 데이터 down 받는 파이썬 소스코드 (0) | 2024.01.31 |
[Xing API] 연속 TR API 오류 (0) | 2024.01.31 |
[API] 일봉 데이터에서 수정주가 해석하기 (0) | 2023.08.11 |