대시보드 수정및 전략수정중
This commit is contained in:
@@ -225,9 +225,11 @@ def _parse_realtime_message(raw: str) -> Optional[dict]:
|
||||
"timestamp": fields[1] if len(fields) > 1 else "",
|
||||
}
|
||||
|
||||
if tr_id == TR_QUOTE and len(fields) >= 20:
|
||||
# H0STASP0: [0]=종목코드, [3~7]=매도호가1~5, [8~12]=매수호가1~5
|
||||
# [13~17]=매도잔량1~5, [18~22]=매수잔량1~5
|
||||
if tr_id == TR_QUOTE and len(fields) >= 38:
|
||||
# H0STASP0 실제 포맷 (KIS 개발가이드 기준):
|
||||
# [0]=종목코드, [1]=영업시간, [2]=시간구분코드
|
||||
# [3~12]=매도호가1~10, [13~22]=매수호가1~10
|
||||
# [23~32]=매도호가잔량1~10, [33~42]=매수호가잔량1~10
|
||||
def _f(i: int): return _safe_float(fields[i]) if len(fields) > i else None
|
||||
def _i(i: int): return _safe_int(fields[i]) if len(fields) > i else None
|
||||
return {
|
||||
@@ -235,11 +237,11 @@ def _parse_realtime_message(raw: str) -> Optional[dict]:
|
||||
"tr_id": tr_id,
|
||||
"stock_code": fields[0],
|
||||
"ask1": _f(3), "ask2": _f(4), "ask3": _f(5), "ask4": _f(6), "ask5": _f(7),
|
||||
"bid1": _f(8), "bid2": _f(9), "bid3": _f(10), "bid4": _f(11), "bid5": _f(12),
|
||||
"ask_qty1": _i(13), "ask_qty2": _i(14), "ask_qty3": _i(15),
|
||||
"ask_qty4": _i(16), "ask_qty5": _i(17),
|
||||
"bid_qty1": _i(18), "bid_qty2": _i(19), "bid_qty3": _i(20),
|
||||
"bid_qty4": _i(21), "bid_qty5": _i(22),
|
||||
"bid1": _f(13), "bid2": _f(14), "bid3": _f(15), "bid4": _f(16), "bid5": _f(17),
|
||||
"ask_qty1": _i(23), "ask_qty2": _i(24), "ask_qty3": _i(25),
|
||||
"ask_qty4": _i(26), "ask_qty5": _i(27),
|
||||
"bid_qty1": _i(33), "bid_qty2": _i(34), "bid_qty3": _i(35),
|
||||
"bid_qty4": _i(36), "bid_qty5": _i(37),
|
||||
}
|
||||
|
||||
return None
|
||||
@@ -294,6 +296,11 @@ class KisRealtimeStream:
|
||||
self._ws = None
|
||||
self._running = False
|
||||
self._approval_key: Optional[str] = None
|
||||
self._sync_event: asyncio.Event = asyncio.Event()
|
||||
|
||||
def notify_subscription_change(self):
|
||||
"""구독 목록 변경 시 즉시 KIS 동기화 트리거 (set_subscriptions 호출 직후 사용)"""
|
||||
self._sync_event.set()
|
||||
|
||||
async def _ensure_approval_key(self) -> bool:
|
||||
"""approval_key 확보. 없으면 REST API 호출."""
|
||||
@@ -429,8 +436,9 @@ class KisRealtimeStream:
|
||||
|
||||
# ── 4단계: 데이터 수신 루프 ──────────────────────────
|
||||
async for raw_msg in ws:
|
||||
# 주기적 구독 동기화
|
||||
if time.monotonic() - last_sync >= _SYNC_INTERVAL:
|
||||
# 주기적 구독 동기화 (10초 주기 OR 구독 변경 즉시)
|
||||
if self._sync_event.is_set() or time.monotonic() - last_sync >= _SYNC_INTERVAL:
|
||||
self._sync_event.clear()
|
||||
await self._sync_subscriptions(ws)
|
||||
last_sync = time.monotonic()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user