fix(정합성): Python 라디오인데 Rust 로 도는 원흉 제거 + web_jobs env 오타 정정

증상: Python 엔진 라디오를 눌러도 Rust 만큼 빠르고 매매 건수가 완전 다름 (380건 등).
잡 JSON 에는 use_rust=False 로 저장됐지만 실제 엔진은 Rust.

근본원인 (룰 19 딥다이브):
1. optuna_web_jobs.py:3759 [완전 반대 오타] (2026-09-06 4dbb138 안티그래비티 커밋에서 유입)
   `if use_rust: env['BACKTEST_USE_RUST'] = '0'`
   → Rust 라디오 = '0' (Python) / Python 라디오 = 세팅 안 함 (부모 env 상속)

2. optuna_scalping/breakout/momentum/param_search_optuna: BACKTEST_USE_RUST env 무관하게
   무조건 kis_rust_core.init_backtest_session_json() 초기화 + combo['_rust_session_id'] 세팅
   → scalping/breakout/momentum/tail_backtest_common 이 _rust_session_id 존재만으로 Rust 실행
   → env 오타가 아니어도 어차피 항상 Rust 로 돌던 진짜 원흉

수정 (B안):
- optuna_web_jobs.py:3759: `env['BACKTEST_USE_RUST'] = '1' if use_rust else '0'` (항상 명시)
- optuna_scalping/breakout/momentum/param_search_optuna: BACKTEST_USE_RUST=='1' 인 경우에만
  init_backtest_session_json 호출 + combo['_rust_session_id'] 세팅
- Python 경로에서는 rust_session_id=None, combo 에도 없음 → 순수 Python 엔진
- clear_rust_session 도 세션 있을 때만 호출 (param_search_optuna)

env 하나가 진리 소스 (룰 29):
- optuna_web_jobs 가 env 를 명시 세팅 → 서브프로세스 상속
- 각 optuna_* 는 env 만 보고 Rust/Python 분기
- 부모 env 오염 방지

실매 스모크: logs/test_live_execution_validation_20260906_195008.log → 최종: 통과
웹 재시작 200. 다음 옵투나 실행부터 Python 라디오는 실제로 Python 엔진.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Your Name
2026-09-06 19:50:27 +09:00
parent 94daf529f0
commit 56b254b249
5 changed files with 96 additions and 59 deletions

View File

@@ -3756,8 +3756,10 @@ def start_optuna_job(
# 사후 report 게이트 거래수 = 탐색과 동일(기간 자동)
env["PARAM_SEARCH_OPTUNA_REPORT_MIN_TRADES"] = str(min_trades)
env["SORT_BY"] = sort_by
if use_rust:
env["BACKTEST_USE_RUST"] = "0"
# 2026-09-06 정정: 이전 로직 `if use_rust: env["BACKTEST_USE_RUST"] = "0"` 은 완전히 반대.
# use_rust=True → "1" (Rust 활성) / False → "0" (Python 강제). 항상 명시 세팅해
# 부모 프로세스 env 상속 오염을 차단한다 (룰 29 · docs/rust_engine_parity_port_plan.md).
env["BACKTEST_USE_RUST"] = "1" if use_rust else "0"
_labels = {
"momentum": "모멘텀",