Your Name
2041790658
feat(옵투나): 로그 모달 + 사후합격 카드 확장 + 과적합 Y안
룰 19 사용자 요청 4건 (2026-09-06):
[UI 1] 옵투나 실시간 로그 모달
- backtest.html: 「크게 보기」 버튼 + bootstrap 모달 (max-xl · scrollable)
- backtest.js: optunaOpenLogModal/RefreshLogModal/FilterLogModal
- backend: /api/optuna/log/<job_id>?lines=N 신설 (50~5000줄 tail)
- 3초 auto-refresh · 스크롤 하단 유지 · 실시간 검색 필터
- 원인: 기존 pre#opt_log_tail 은 25줄만 tail → pruned 잔뜩이면 완료 로그 밀림
[UI 2] 사후합격 Top5 카드 파라미터 확장 + 한글 캡션
- optuna_web_jobs.py _ob_whip_ui_from_params: 11개 새 필드 flat 추출
- 핵심진입: entry_drop_rate/vol_mult/high_chase
- 핵심청산: exit_min_hold_sec/cooldown_min/max_loss_krw
- RSI: rsi_period/oversold/overbought
- 어깨: shoulder_min_high/cut_pct
- backtest.js optunaCalcStats/optunaFormatAvgHtml:
- keys 배열 확장 (기존 10 → 21)
- 모든 영문 옆 한글 캡션 (spr→(스프레드) 등)
- 그룹별 조건부 렌더 (해당 파라미터 있을 때만)
[백엔드 3] 과적합 계산기 Y안 (optuna_common.py)
- 팩터 1 표본 장일: max 40 → 25 (1일 백테도 견고성으로 상쇄 가능)
- 팩터 5 PnL 고원 재해석: 동일 PnL & 파라미터 다양성 계산
- 다양 (핵심 파라미터 unique_ratio >= 50%) → 감점 -8 (견고)
- 좁음 → 유지 +12 (TPE 몰빵)
- 팩터 6 신설 param_stability: gated pool 파라미터 mode_share
- 5개+ ≥60% → -15 (매우 견고)
- 3~4개 ≥60% → -8 (다소 견고)
[호환 4] 옛 잡 자동 재파싱 fallback (backtest_web.py)
- _inject_extended_params_fallback():
- result_summary.top5_gated 각 row 에 확장 파라미터 재파싱
- overfit_diagnostics Y안 재계산
- top5_gated/top5_stable/compare_rows 각 row 의 overfit_risk_pct 재계산
- /api/optuna/status, /api/optuna/topn 양쪽 적용
- 옛 result JSON 을 재파싱하여 trial_number 매칭
검증:
- 실측 재계산: 옛 잡 (1일·5거래·100%WR) 40% → 25%·상대적으로낮음
- 브라우저 CDP: 배지 27% · 팩터 6 param_stability 노출
- 로그 모달: 174줄·19.8KB·검색·auto-scroll 확인
- 사후합격 카드: 핵심진입/청산/RSI/어깨 그룹 + 한글 캡션 렌더
- 실매 코어 스모크 통과 (test_live_execution_validation 최종:통과 · 완결)
전략 범위: 4전략 공통 (스캘핑/돌파/모멘텀/꼬리) — 공통 optuna_common
- 파라미터 flat 추출은 스캘핑 위주지만 다른 전략에서 해당 파라미터 있으면 자동 표시
- 과적합 Y안은 전략 무관 (전 전략 동일 로직)
Co-authored-by: Cursor <cursoragent@cursor.com>