월 옵션은 매월 둘째 주 목요일 만기입니다.

만기일을 찾을 수 있도록 time 함수를 이용하여 어찌 어찌할 수 있겠지만 이 정도는 그냥 손으로 만드는 것이 더  효율적입니다.

 

제가 사용하는 일자를 공유합니다. 한땀 한땀 달력보고 입력한 것이니 맞을 것으로 예상되나, 혹시 틀린 날이 있다면 댓글 부탁드립니다.

 

option_end_days = {
        2010 : {1:14, 2:11,  3:11,  4:8, 5:13, 6:10,  7:8, 8:12, 9:9, 10:14, 11:11,  12:9},
        2011 : {1:13, 2:10,  3:10,  4:14, 5:12, 6:9,  7:14, 8:11, 9:8, 10:13, 11:10,  12:8},
        2012 : {1:12, 2:9,  3:8,  4:12, 5:10, 6:14,  7:12, 8:9, 9:13, 10:11, 11:8,  12:13},
        2013 : {1:10, 2:14,  3:14,  4:11, 5:9, 6:13,  7:11, 8:8, 9:12, 10:10, 11:14,  12:12},
        2014 : {1:9, 2:13,  3:13,  4:10, 5:8, 6:12,  7:10, 8:14, 9:11, 10:8, 11:13,  12:11},
        2015 : {1:8, 2:12,  3:12,  4:9, 5:14, 6:11,  7:9, 8:13, 9:10, 10:8, 11:12,  12:10},
        2016 : {1:14, 2:11,  3:10,  4:14, 5:12, 6:9,  7:14, 8:11, 9:8, 10:13, 11:10,  12:8},

        2017 : {1:12, 2:9,  3:9,  4:13, 5:11, 6:8,  7:13, 8:10, 9:14, 10:12, 11:9,  12:14},
        2018 : {1:11, 2:8,  3:8,  4:12, 5:10, 6:14, 7:12, 8:9,  9:13, 10:11, 11:8,  12:13},
        2019 : {1:10, 2:14, 3:14, 4:11, 5:9,  6:13, 7:11, 8:8,  9:11, 10:10, 11:14, 12:12},
        2020 : {1:9,  2:13, 3:12, 4:9,  5:14, 6:11, 7:9,  8:13, 9:10, 10:8,  11:12, 12:10},
        2021 : {1:14, 2:10, 3:11, 4:8,  5:13, 6:10, 7:8,  8:12, 9:9,  10:14, 11:11, 12:9},
        2022 : {1:13, 2:10, 3:10, 4:14, 5:12, 6:9,  7:14, 8:11, 9:8,  10:13, 11:10, 12:8},
        2023 : {1:12, 2:8, 3:10, 4:14, 5:12, 6:9,  7:14, 8:11, 9:8,  10:13, 11:10, 12:8},
        2024 : {1:11, 2:8, 3:14, 4:11, 5:9, 6:13,  7:11, 8:8, 9:12,  10:10, 11:14, 12:12},
     }

 

 

반응형

설정

트랙백

댓글

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

반응형

설정

트랙백

댓글