fix(정합성·뱃지): 틱 로더 recv_ts 전달 · _lag_sec 폴백 · use_rust 결과JSON 기록
Q1) 쓰레기 스킵 22.8% 여전한 이유 → 로더가 recv_ts 를 tick dict 에 안 넣음 - breakout_tick_loader._ingest_tick_rows: recv_ts 문자열 필드 추가 (bar_is_garbage 가 wall-clock 정합 판정에 사용) - feed_fallback.bar_is_garbage: _lag_sec 사전계산 필드 최우선 사용 Rust Parquet 로더는 recv_ts 없이 _lag_sec 만 실어옴 → 이 폴백으로 커버 - 우선순위: _lag_sec > recv_ts > 봉끝(레거시) Q2) 자동 등록 잡 (mode_refine phase1/phase2) 뱃지 ❔ 뜨는 이유 - register_result_json_as_job 이 원본 JSON 의 use_rust 를 읽는데 없어서 None - optuna_web_jobs: inherit_use_rust 인자 신설 → 부모 실행 잡 값 상속 - _spawn_job_reaper: register 호출 시 부모 use_rust 전달 - optuna_common.annotate_optuna_period_daily_avg: 결과 JSON 저장 훅에 use_rust=bool(BACKTEST_USE_RUST=='1') 자동 삽입 → 4전략(tail/momentum/breakout/scalp) 모두 커버 (근본) 우선순위: 원본 JSON use_rust > 부모 잡 상속 > None(❔) 실매 스모크: logs/test_live_execution_validation_20260906_194154.log → 최종: 통과 웹 재시작 200. 다음 옵투나 실행부터 반영. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -188,6 +188,15 @@ def _ingest_tick_rows(
|
||||
if len(tt) < 12:
|
||||
continue
|
||||
minute_key = tt[:12]
|
||||
# recv_ts: bar_is_garbage 가 wall-clock 정합 판정에 사용 (docs/정합성.md §9)
|
||||
# 문자열로 보존 (feed_fallback 이 파싱). None 이면 봉끝 폴백.
|
||||
_recv_raw = r.get("recv_ts")
|
||||
_recv_str = ""
|
||||
if _recv_raw is not None:
|
||||
try:
|
||||
_recv_str = _recv_raw.strftime("%Y-%m-%d %H:%M:%S") if hasattr(_recv_raw, "strftime") else str(_recv_raw)
|
||||
except Exception:
|
||||
_recv_str = str(_recv_raw)
|
||||
tick = {
|
||||
"code": code,
|
||||
"tick_time": tt,
|
||||
@@ -195,6 +204,7 @@ def _ingest_tick_rows(
|
||||
"volume": int(r.get("volume") or 0),
|
||||
"source": r.get("source") or "",
|
||||
"_lag_sec": kw_lag,
|
||||
"recv_ts": _recv_str, # 2026-09-06: wall-clock 정합용 (docs/정합성.md §9)
|
||||
}
|
||||
bucket = out[code].setdefault(minute_key, [])
|
||||
bucket.append(tick)
|
||||
|
||||
Reference in New Issue
Block a user