fix(정합성): 틱 lag wall-clock 정합 + 3벤더 DB 저장 스위치 통일
- feed_fallback.bar_is_garbage: 봉끝 기준 → 각 틱의 recv_ts wall-clock 기준으로 정정 실매 RAM 3초컷과 동일 논리 → 유동성 낮은 종목 부당 스킵 해소 - candle_garbage_fallback_enabled: 기본 True 복원 (wall-clock 정정 후 안전) - param_search_optuna·run_tail_backtest_cli: CANDLE_GARBAGE_FALLBACK·BACKTEST_USE_RUST 강제 os.environ 세팅 제거 → DB env·CLI 플래그로만 관리 (UI 존중) - WS_TICK_DB_SAVE_LAG_CUT_ENABLED 신설 (bool, 기본 false, 3벤더 공통) OFF=키움/KIS/LS 모든 틱 lag 무관 전부 저장 (벤더 통계·재현·백테 정합) ON=lag > LIVE_FEED_FALLBACK_MAX_AGE_SEC 이면 미저장 (미래 A안) - KIWOOM_TICK_LIVE_MAX_LAG_SEC 완전 폐기 → 위 스위치로 통일 - kiwoom_ws: _skip_persist 로직 새 스위치로 교체 - kis_ws·ls_ws: _skip_persist_kis/_ls 신규 (벤더별 상이했던 정책 통일) - docs/정합성.md §9 신설 (문제·결정·시나리오·향후 A안 전환법) - docs/rust_engine_parity_port_plan.md (신규 설계) 실매 스모크: logs/test_live_execution_validation_20260906_191845.log → 최종: 통과 · 👑 완결 브라우저 검증: http://192.168.0.149:5050/#liveconfig → 새 스위치 노출, JS 오류 없음 영향: 실매(DB 저장 정책 통일, RAM 컷 변경 없음) + 백테/Optuna(실매 정합) Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -863,10 +863,12 @@ class KiwoomWebSocketPriceCache:
|
||||
_lag_sec = 0.0
|
||||
if _pkt_dt is not None:
|
||||
_lag_sec = float((_now_dt - _pkt_dt).total_seconds())
|
||||
# 2026-09-06: KIWOOM_TICK_LIVE_MAX_LAG_SEC 삭제 → WS_TICK_DB_SAVE_LAG_CUT_ENABLED 통일 (3벤더 공통).
|
||||
# 스위치 OFF(기본)=전부 저장(벤더 통계 유지). ON=lag > LIVE_FEED_FALLBACK 이면 미저장.
|
||||
try:
|
||||
_live_max = int(get_env_int("KIWOOM_TICK_LIVE_MAX_LAG_SEC", 0) or 0)
|
||||
except (TypeError, ValueError):
|
||||
_live_max = 0
|
||||
_db_cut_on = bool(get_env_bool("WS_TICK_DB_SAVE_LAG_CUT_ENABLED", False))
|
||||
except Exception:
|
||||
_db_cut_on = False
|
||||
try:
|
||||
from kis_trader.engine.feed_fallback import live_feed_fallback_max_age_sec
|
||||
_read_max = float(live_feed_fallback_max_age_sec())
|
||||
@@ -885,17 +887,17 @@ class KiwoomWebSocketPriceCache:
|
||||
and (_now_wall - _first_w) >= float(_time_max)
|
||||
)
|
||||
# 재연결 버퍼: FID20가 지금보다 읽기나이(2초) 이상 과거면 매매 RAM 미반영.
|
||||
# 적재는 기본 전부(LIVE_MAX=0). 양수일 때만 그 초 초과 미저장.
|
||||
_skip_ram = bool(
|
||||
_read_max > 0
|
||||
and _pkt_dt is not None
|
||||
and _lag_sec > float(_read_max)
|
||||
and not _frozen
|
||||
)
|
||||
# DB 저장: 스위치 OFF(기본)면 전부 저장. ON 이면 RAM 컷과 동일 기준(_read_max) 사용.
|
||||
_skip_persist = bool(
|
||||
_live_max > 0
|
||||
_db_cut_on
|
||||
and _pkt_dt is not None
|
||||
and _lag_sec > float(_live_max)
|
||||
and _lag_sec > float(_read_max)
|
||||
and not _frozen
|
||||
)
|
||||
if _pkt_dt is not None:
|
||||
|
||||
Reference in New Issue
Block a user