diff --git a/configs/intraday/strategies/orb_gainers_v23.yaml b/configs/intraday/strategies/orb_gainers_v23.yaml index 61187dd..fd9cace 100644 --- a/configs/intraday/strategies/orb_gainers_v23.yaml +++ b/configs/intraday/strategies/orb_gainers_v23.yaml @@ -1,6 +1,13 @@ _meta: id: 28 name: "ORB Gainers V23" + status: frozen + frozen_date: "2026-04-21" + frozen_commit: "e492695e" + frozen_reason: > + Production live baseline (session e492695e). Do not modify; derive new + engines as separate engine_family configs. V23 is the definitive champion + after all 200d/400d/600d validation. Multi-engine Phase 1 begins here. description: > V22 → V23 via 2 validated improvements: ATR% quality filter + position cap adjustment. @@ -28,11 +35,15 @@ _meta: Together they are synergistic: min_atr_pct selects high-quality candidates, max_pos_pct=0.70 manages their higher individual volatility. - 400d validation (daily_reset): - V23 400d: +120.87%, WR 57.7%, DD −23.97%, 286 trades, 112 days, Sharpe 1.94 + 400d validation (daily_reset) — OLD (buggy pipeline, pre data-fix): + V23 400d (OLD): +120.87%, WR 57.7%, DD −23.97%, 286 trades, Sharpe 1.94 + + 400d TRUE result (correct pipeline, 2026-04-21 retest 2024-09-16→2026-04-21): + V23 400d: +146.09%, WR 56.14%, DD −13.66%, 285 trades, 106 days, Sharpe 2.33 V22 400d: +89.62%, WR 52.2%, DD −20.93%, 312 trades, 119 days, Sharpe 1.67 - 400d gates: return≥88% ✓, WR≥52% ✓, DD≥−24% ✓ (−23.97% passes by 0.03pp) - 400d DD worsened 3pp but return/WR/Sharpe all improved significantly. + 400d gates: return≥88% ✓, WR≥52% ✓, DD≥−24% ✓ (−13.66% easily passes) + KEY FINDING: data fix improved 400d DD by 10.31pp (−23.97% → −13.66%). + V23 strictly dominates Safe v9 on 400d: +146.09% vs +101.01%, DD −13.66% vs −17.20%. Quarterly 400d attribution (known): 2024-Q3: −4.4%, 2024-Q4: +1.2%, 2025-Q1: −8.4% (volatile macro periods driving DD) diff --git a/configs/intraday/strategies/orb_gainers_v23_safe_v9.yaml b/configs/intraday/strategies/orb_gainers_v23_safe_v9.yaml new file mode 100644 index 0000000..94f037b --- /dev/null +++ b/configs/intraday/strategies/orb_gainers_v23_safe_v9.yaml @@ -0,0 +1,107 @@ +_meta: + id: 37 + name: "ORB Gainers V23 Safe v9" + status: validated_200d_only + parent: orb_gainers_v23_safe_v8 + description: > + V23 Safe v9 — v8 + streak_sizing_win_bonus: 0.70 (V23 level streak sizing). + VALIDATED champion of the Safe family on 200d window ONLY (2026-04-21). + 주의: 400d에서는 V23이 모든 지표에서 완전히 우월 — +146% vs +101%, DD -13.7% vs -17.2%. + v9는 200d 단기 보수적 대안으로만 유효. 실전 배포 기준은 V23. + + Safe v8 결과: +82.36%, DD -7.72%, Sharpe 3.14 — V23 Sharpe(3.01)보다 높고 DD는 5pp 낮음. + 단, 수익은 V23(+109.32%)보다 27pp 낮음. 차이 원인: V23의 streak sizing(win_bonus=0.70). + V23에서 streak_sizing은 핵심 수익 증폭기 (V19→V21 승진에 기여). + + v9 가설: v8 safe mechanisms(partial_exit + rolling_loss-2% + max_sim=2) + V23의 + streak_sizing(0.70) = +100%+ 수익 AND DD < V23 -12.91%? + + 200d 결과 (2025-07-03→2026-04-20): +101.25%, DD -7.62%, WR 58.06%, Sharpe 3.34 + worst_day -$324, trade_days 46/200, 124 trades. + 400d 결과 (2024-09-13→2026-04-20): +101.01%, DD -17.20%, WR 57.08%, Sharpe 1.99 + profit_factor 1.77, worst_day -6.11%, 226 trades, 93 trade days. + 400d gate: DD -17.20% ≤ -18% ✓ AND return +101% ≥ +90% ✓ → PROMOTED. + V23 대비 (200d): DD -5.29pp 개선 (-7.62% vs -12.91%); Sharpe +0.33 우위; + 수익은 -8pp 낮음 (-101.25% vs +109.32%). + + *** 2026-04-21 UPDATE: V23 TRUE 400d result confirmed with correct pipeline *** + V23 400d TRUE: +146.09%, DD -13.66%, Sharpe 2.33 (vs v9: +101.01%, DD -17.20%, Sharpe 1.99) + V23 STRICTLY DOMINATES Safe v9 on 400d in return (+45pp), DD (+3.5pp better), and Sharpe. + "Risk-adjusted superior" claim is ONLY valid on 200d window. On 400d, V23 is also safer. + V23 is the absolute champion. v9 remains valid as 200d conservative alternative only. + +strategy_mode: orb + +orb_strategy: + engine_family: gainers_leader + live_readiness: experimental + orb_minutes: 5 + sim_bar_minutes: 5 + entry_direction: long_only + order_timeout_minutes: 45 + allow_doji_breakout: true + allow_red_to_green_breakout: true + min_price: 10.0 + min_avg_dollar_volume: 25000000 + min_atr_14: 0.50 + min_atr_pct: 0.04 + min_rvol: 1.5 + min_abs_gap_pct: 0.02 + min_premarket_dollar_vol: 1500000 + max_candidates: 20 + max_candidates_per_sector: 3 + min_candidates_to_trade: 1 + ticker_cooldown_days: 0 + max_gap_pct: 0.04 + min_candidate_breadth: 0.60 + market_regime_spy_threshold: 0.0015 + market_regime_ticker: QQQ + rolling_loss_days: 7 + rolling_loss_threshold: -0.02 + max_simultaneous_entries: 2 + min_breakout_rel_vol: 1.2 + weight_rvol: 0.35 + weight_gap: 0.20 + weight_dollar_vol: 0.05 + weight_premarket_dollar_vol: 0.25 + weight_body_ratio: 0.0 + weight_momentum: 0.15 + atr_stop_multiplier: 0.75 + breakeven_at_r: 1.0 + trailing_at_r: 1.0 + trailing_stop_atr_multiplier: 0.8 + trailing_tighten_at_r: 2.0 + trailing_stop_atr_multiplier_tight: 0.3 + partial_exit_at_r: 1.0 + partial_exit_pct: 0.50 + risk_per_trade_pct: 0.05 + max_position_pct: 0.70 + daily_max_loss_pct: 0.02 + max_stops_per_day: 3 + exit_minutes_before_close: 5 + slippage_bps: 5.0 + initial_capital: 10000 + compound_returns: false + daily_budget_reset: true + settlement_days: 1 + drawdown_governor_threshold: 0.015 + drawdown_governor_min_scale: 0.50 + # === KEY CHANGE: enable streak sizing (V23 level) === + streak_sizing_win_bonus: 0.70 + streak_sizing_max: 2.5 + +universe: + source: midlarge + +backtest: + start_date: null + end_date: null + lookback_trading_days: 200 + +cache: + enabled: true + dir: data/cache/intraday + +output: + dir: runs/intraday_orb + verbose: false