Files
kis_trader/scratch/explain_025980_gap.py
Your Name 0ecac7cb95 이번에 들어간 내용
한투 호가 = 2번째 앱키 전용
키 없거나 start 실패 시 메인에 H0STASP0 안 붙임. 운영설정 WS_ORDERBOOK_SAVE_KIS 빨간 danger.

LS RAM 합집합
후보∪보유∪영구∪grace. sync_targets와 split reconcile 둘 다. 틱 DB 영구 게이트는 그대로.

분봉 쓰레기 → 다음 소스 봉 통째
그 분 틱 0건이거나 전부 봉끝 대비 LIVE_FEED_FALLBACK_MAX_AGE_SEC 초과면 구멍. 메인 WS → 2차 → LS → REST → rollup. CANDLE_GARBAGE_FALLBACK 기본 true.

파일: feed_fallback.py(신규), ws_manager.py, kis_ws.py, candle_series.py, bt_candle_source.py, live_config_schema.py, database.py, 스모크, MD 2개.

같은 ws_manager/database/kis_ws/live_config에는 직전 커밋 이후 쌓여 있던 시세 폴백·ENV 키 정리도 같이 들어갔습니다. 파일 단위로 나눌 수 없어서입니다.
2026-08-19 22:11:31 +09:00

53 lines
1.8 KiB
Python

#!/usr/bin/env python3
"""025980 id 전후 + kiwoom 공백 구간만 (짧게)."""
from __future__ import annotations
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT))
from database import TradeDB
db = TradeDB()
print("== id 63275500~63275520 ==")
rows = db.conn.execute(
"SELECT id, source, code, tick_time, tick_time_raw, recv_ts, price, volume "
"FROM ws_ticks WHERE id BETWEEN %s AND %s ORDER BY id",
(63275500, 63275520),
).fetchall()
for r in rows:
print(dict(r))
print("\n== kiwoom 09:05:06~09:05:40 recv 초별 ==")
rows = db.conn.execute(
"SELECT recv_ts, COUNT(*) n, COUNT(DISTINCT code) codes, "
"MIN(tick_time) min_tt, MAX(tick_time) max_tt "
"FROM ws_ticks WHERE source=%s AND recv_ts >= %s AND recv_ts <= %s "
"GROUP BY recv_ts ORDER BY recv_ts",
("kiwoom", "2026-08-19 09:05:06", "2026-08-19 09:05:40"),
).fetchall()
for r in rows:
print(dict(r))
print("\n== 025980 kiwoom tick_time distinct 09:05:06~09:05:34 ==")
rows = db.conn.execute(
"SELECT tick_time, tick_time_raw, COUNT(*) n, MIN(recv_ts) min_r, MAX(recv_ts) max_r "
"FROM ws_ticks WHERE source=%s AND code=%s AND recv_ts >= %s AND recv_ts <= %s "
"GROUP BY tick_time, tick_time_raw ORDER BY min_r",
("kiwoom", "025980", "2026-08-19 09:05:06", "2026-08-19 09:05:34"),
).fetchall()
for r in rows:
print(dict(r))
print("\n== kis 같은 초 025980 있는지 ==")
rows = db.conn.execute(
"SELECT COUNT(*) n, MIN(tick_time) min_tt, MAX(tick_time) max_tt, "
"MIN(recv_ts) min_r, MAX(recv_ts) max_r FROM ws_ticks "
"WHERE source=%s AND code=%s AND recv_ts >= %s AND recv_ts <= %s",
("kis", "025980", "2026-08-19 09:05:06", "2026-08-19 09:05:34"),
).fetchone()
print(dict(rows))