_meta:
  id: 100
  name: "ORB Gainers V24 Quality Overlay"
  status: superseded
  live_readiness: experimental
  promoted_date: "2026-04-21"
  superseded_by: orb_gainers_v46_prior_event
  superseded_date: "2026-04-22"
  parent: orb_gainers_v23
  description: >
    V23 → V24 via OBV-slope(20d) accumulation weight (weight_obv_slope: 0.05).

    Diagnostic finding (2026-04-21, 98 V23 trades n=96 valid):
      Phase 1: obv_slope_20 passed all gates:
        Pearson(obv_slope, r_multiple) = +0.2349
        Top-tercile WR 75.0%  vs  Bottom-tercile 59.4%  (+15.6pp)
        Top-tercile avg_R +0.431  vs  Bottom-tercile +0.036  (+0.394R)
      Hurst_60 and OU-θ_60 both failed gates.
      Weight sweep: 0.05 is Pareto-dominant (0.10 blows DD; 0.15 return+108% but DD -16%).

    Phase 2 validation (2026-04-21):
      200d: V24 +94.8%, DD -11.29%, Sharpe 2.83  vs  V23 +85.0%, DD -11.58%, Sharpe 2.66
        Δ Return +9.8pp, Δ DD +0.29pp (BETTER), Δ Sharpe +0.17 ← ALL PASS
      400d: V24 +162.1%, DD -13.70%, Sharpe 2.47  vs  V23 +149.4%, DD -13.66%, Sharpe 2.36
        Δ Return +12.7pp, Δ DD -0.04pp (negligible), Δ Sharpe +0.11 ← ALL PASS

    V24 is Pareto-dominant over V23 on both 200d and 400d windows.
    Hypothesis confirmed: OBV accumulation pre-breakout = smart-money positioning
    → cleaner follow-through → better candidate selection quality.

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.07
  max_simultaneous_entries: 3
  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

  # === NEW: OBV accumulation weight (Phase 1 gate: Pearson=0.23, WR gap +15.6pp) ===
  # Weight sweep result: 0.05 is Pareto-dominant (best return AND DD simultaneously)
  # 0.10 → DD blows up (-15.72%); 0.15 → return +108% but DD -16%
  weight_obv_slope: 0.05

  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: 99.0
  partial_exit_pct: 0.50

  risk_per_trade_pct: 0.05
  max_position_pct: 0.70
  daily_max_loss_pct: 0.05
  max_stops_per_day: 5
  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.025
  drawdown_governor_min_scale: 0.30

  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
