이번에 들어간 내용
한투 호가 = 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 키 정리도 같이 들어갔습니다. 파일 단위로 나눌 수 없어서입니다.
This commit is contained in:
64
scratch/kiwoom_tick_lag_evidence.py
Normal file
64
scratch/kiwoom_tick_lag_evidence.py
Normal file
@@ -0,0 +1,64 @@
|
||||
#!/usr/bin/env python3
|
||||
"""키움 tick_time vs recv_ts 증거 (DB, 즉시 실행)."""
|
||||
import sys
|
||||
from datetime import datetime
|
||||
|
||||
sys.path.insert(0, "/home/hoon/kis_bot")
|
||||
from database import TradeDB
|
||||
|
||||
WATCH = ("089970", "005930", "028670", "178320")
|
||||
|
||||
db = TradeDB()
|
||||
try:
|
||||
print("=== 키움: recv 최근 5분 vs tick_time lag ===")
|
||||
rows = db.conn.execute(
|
||||
"""
|
||||
SELECT code, tick_time, recv_ts, price, volume,
|
||||
TIMESTAMPDIFF(SECOND,
|
||||
STR_TO_DATE(tick_time, '%%Y%%m%%d%%H%%i%%s'),
|
||||
recv_ts) AS lag_sec
|
||||
FROM ws_ticks
|
||||
WHERE source='kiwoom'
|
||||
AND recv_ts >= DATE_SUB(NOW(), INTERVAL 5 MINUTE)
|
||||
ORDER BY recv_ts DESC
|
||||
LIMIT 30
|
||||
"""
|
||||
).fetchall()
|
||||
for r in rows:
|
||||
d = dict(r)
|
||||
print(
|
||||
f" {d['code']} tick={d['tick_time']} recv={d['recv_ts']} "
|
||||
f"lag={d['lag_sec']}s vol={d['volume']} px={d['price']}"
|
||||
)
|
||||
|
||||
print("\n=== vol=0 vs vol>0 (오늘 kiwoom, recv>=10:43) ===")
|
||||
r = db.conn.execute(
|
||||
"""
|
||||
SELECT
|
||||
SUM(CASE WHEN COALESCE(volume,0)=0 THEN 1 ELSE 0 END) vol0,
|
||||
SUM(CASE WHEN COALESCE(volume,0)>0 THEN 1 ELSE 0 END) vol_pos,
|
||||
COUNT(*) total
|
||||
FROM ws_ticks
|
||||
WHERE source='kiwoom' AND recv_ts >= '2026-08-18 10:43:00'
|
||||
"""
|
||||
).fetchone()
|
||||
print(dict(r))
|
||||
|
||||
print("\n=== 관심종목 오늘 kiwoom tick_time max vs recv max ===")
|
||||
for code in WATCH:
|
||||
row = db.conn.execute(
|
||||
"""
|
||||
SELECT COUNT(*) n,
|
||||
MAX(tick_time) tmax, MAX(recv_ts) rmax,
|
||||
MAX(TIMESTAMPDIFF(SECOND,
|
||||
STR_TO_DATE(tick_time, '%%Y%%m%%d%%H%%i%%s'),
|
||||
recv_ts)) max_lag
|
||||
FROM ws_ticks
|
||||
WHERE source='kiwoom' AND code=%s
|
||||
AND recv_ts >= '2026-08-18 09:00:00'
|
||||
""",
|
||||
(code,),
|
||||
).fetchone()
|
||||
print(f" {code}: {dict(row)}")
|
||||
finally:
|
||||
db.close()
|
||||
Reference in New Issue
Block a user