_meta: id: 36 name: "VWAP Reclaim V1" status: aborted aborted_date: "2026-04-21" aborted_reason: > Same gainers pool as V23 → 57.3% trade overlap (fails ≤20% gate). Orthogonal high-gap variant (id:37) reduced overlap to 16.5% but daily PnL corr=0.394 (fails ≤0.30 gate). Root cause: correlation is regime-driven (both long-momentum, both triggered by same QQQ-positive days) — not fixable by any stock-selection filter. VWAP stop mode broke position sizing (entry ≈ VWAP → stop_distance ≈ 0 → overleverage → WR 16%). Baseline +13.82%/WR 48% does not beat V23 (+95.67%/WR 58%). Not a valid diversifier. description: > Phase 2 / diagnostic pass: V23's gainers_leader candidate pool + minimal VWAP reclaim entry. Engine: vwap_reclaim_v1 — same pre-market candidates as V23, but instead of entering on the 9:30-9:35 ORB breakout, scans from 10:00 ET (30 min from open) for the first bar that closes above the running session VWAP. Hypothesis: catalyst stocks spend the first 20-30 min in price discovery. A VWAP close-above in the 10:00-11:30 window signals committed direction. Diagnostic purpose: determine if V23's candidate pool structurally supports a late-morning entry (vs. negative selection like orb_pullback_v1 showed). Gate: base WR ≥ 45% (vs. pullback's 25.6%). If fails → wrong pool. This config uses zero quality gates (no tightness, no base, no vol filter) — purely "first bar closing above VWAP in [10:00, 11:30]". strategy_mode: orb orb_strategy: engine_family: vwap_reclaim_v1 live_readiness: research_only orb_minutes: 5 sim_bar_minutes: 5 entry_direction: long_only order_timeout_minutes: 120 # not used for entry, but sets the timeout context allow_doji_breakout: true allow_red_to_green_breakout: true # === Candidate filters identical to V23 (gainers_leader pool) === 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: null # disabled — VWAP reclaim bar is late-morning, not ORB # === Scoring weights identical to V23 === 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 # === Stop / exit parameters (base ATR same as V23) === 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 # === VWAP reclaim window === vwap_reclaim_window_start_min: 30 # 10:00 ET vwap_reclaim_window_end_min: 120 # 11:30 ET 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