지난 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

반응형

설정

트랙백

댓글