Skip to content

[버그]: 해외주식 실시간 체결통보 #44

@krean2

Description

@krean2

빠른 문제 해결을 위해 다음을 확인했나요?

  • PyKis Issues에서 검색했지만 유사한 버그를 찾지 못했습니다.

버그 설명

안녕하세요. 해외주식 실시간 조회 내용들을 테스트 하던 중
체결통보는 콜백 응답이 오지 않는 문제를 발견하였습니다.

아래 재현 코드 실행 시 실시간 체결가 조회에 대한 콜백은 정상적으로 출력되나
체결통보에 대해서는 콜백이 전혀 오지 않아 문의드립니다.

파이썬 버전의 영향일수 있을까요?

# 구독 완료 후 등록된 구독 목록
{KisWebsocketTR(id='HDFSCNT0', key='DNASGOOGL'), KisWebsocketTR(id='H0GSCNI9', key='my_HTS_ID'), KisWebsocketTR(id='HDFSCNT0', key='DNYST'), KisWebsocketTR(id='H0STCNI9', key='my_HTS_ID')}

# 실시간 체결가 조회에 대한 콜백 response
KisForeignRealtimePrice(market='NYSE', symbol='T', time='2024-09-13T15:20:01-04:00', price=21.595, change=0.005, volume=11647275, amount=251538634)
KisForeignRealtimePrice(market='NASDAQ', symbol='GOOGL', time='2024-09-13T15:20:02-04:00', price=157.615, change=2.925, volume=12402644, amount=1946818878)
KisForeignRealtimePrice(market='NYSE', symbol='T', time='2024-09-13T15:20:02-04:00', price=21.595, change=0.005, volume=11647375, amount=251540793)
KisForeignRealtimePrice(market='NASDAQ', symbol='GOOGL', time='2024-09-13T15:20:02-04:00', price=157.6101, change=2.9201, volume=12403644, amount=1946976489)

종속성 버전 문제 진단

Version: PyKis/2.0.3
Python: CPython 3.10.14
System: Windows 10.0.22631 [AMD64]

cryptography 43.0.1
requests 2.32.3
websocket-client 1.8.0
colorlog 6.8.2

재현 방법

import time, yaml
from pykis import PyKis
from pykis import KisRealtimePrice, KisSubscriptionEventArgs, KisWebsocketClient, KisRealtimeExecution

with open('config.yaml', encoding='UTF-8') as f:
    _cfg = yaml.load(f, Loader=yaml.FullLoader)

KIS = PyKis(
            id=_cfg["PYKIS_HTS_ID"],
            account=_cfg["PYKIS_VIRTUAL_ACCOUNT_NUMBER"],
            appkey=_cfg["PYKIS_APPKEY"],
            secretkey=_cfg["PYKIS_SECRETKEY"],
            virtual_id=_cfg["PYKIS_VIRTUAL_HTS_ID"],
            virtual_appkey=_cfg["PYKIS_VIRTUAL_APPKEY"],
            virtual_secretkey=_cfg["PYKIS_VIRTUAL_SECRETKEY"],
            use_websocket=True,
            keep_token=True
        )

def add_realtime_event():
    account = KIS.account()
    balance = account.balance()
    
    # 실시간 체결 통보
    account = KIS.account()
    account.on("execution", on_execution).suppress()
    time.sleep(1)

    # 실시간 체결가 조회
    stock_list = balance.stocks
    for s in stock_list:
        if s.market != 'KRX':
            KIS.stock(s.symbol).on("price", on_price).suppress()
            time.sleep(1)

    print(KIS.websocket.subscriptions)  # 현재 구독중인 이벤트 목록(정상으로 확인)

def on_price( sender: KisWebsocketClient, e: KisSubscriptionEventArgs[KisRealtimePrice]):
    ''' 실시간 체결가 조회 callback 함수 '''
    print(e.response)

def on_execution( sender: KisWebsocketClient, e: KisSubscriptionEventArgs[KisRealtimeExecution]):
    ''' 실시간 체결결과 조회 callback 함수 '''
    print(e.response)

def main():
    _symbol = 'T'
    add_realtime_event()
    KIS.stock(_symbol).buy(qty=1)   # 1주 구매

    while True:
        pass

if __name__ =='__main__':
    main()

추가 정보

No response

PR를 통해 라이브러리에 기여하고 싶으신가요?

  • 네, PR을 제출하여 도움을 주고 싶습니다!

Metadata

Metadata

Assignees

Labels

버그뭔가 작동하지 않습니다.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions