You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

167 lines
5.0 KiB
YAML

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

_meta:
id: 35
name: "ORB Pullback V1"
status: documented_failure
description: >
[DOCUMENTED FAILURE — NOT PROMOTED]
Phase 1 attempt: V23's gainers_leader candidate pool + pullback continuation entry.
Diagnostic result (200d):
- Base pullback (no quality gates): 133 trades, WR 25.6%, return -10.14%
- All quality filters (impulse_min, depth_max, vol_contraction, vwap_floor): negative selection
Adding each filter either left WR unchanged or DECREASED it (min 13.3%)
- V23 immediate-entry same pool: WR 61.5% (+36pp gap)
Root cause: V23's candidate pool selects stocks that immediately continue after breakout.
Waiting for a pullback negatively selects against V23's edge — catches the stocks
that stall (typically failing breakouts). All 5 quality filters showed negative selection;
this is NOT a tunable parameter problem but a structural incompatibility.
Conclusion: orb_pullback_v1 on V23 candidates = negative-EV. Pivoting to vwap_reclaim_v1.
Original Phase 1 multi-engine hypothesis:
Engine: orb_pullback_v1 (independent engine_family, not a V23 variant).
Same candidate universe and scoring as V23 (gainers_leader candidate pool).
Different entry: instead of immediate ORB breakout, waits for:
1. Post-breakout impulse peak within 9:40-9:55 ET window
2. Pullback of 25-50% of impulse move (with volume contraction)
3. VWAP floor check (pullback can't breach VWAP by >0.3%)
4. Continuation bar: green + above pullback extreme
Stop: pullback_low (structural) rather than pure ATR.
Gates (standalone 200d):
trades >= 50, WR >= 50%, total_return >= 0%, max_dd >= -20%
Portfolio gates (combined with V23, 600d):
trade_overlap <= 20%, daily_pnl_corr <= 0.30,
combined_600d_dd improvement >= 5pp vs V23 standalone (-51.25%)
Evaluation: not standalone — portfolio contribution to V23 is the target metric.
Run via apps/intraday_bt/portfolio_report.py for combined analysis.
Initial capital intentionally lower ($4000) for composite sleeve weighting (40%
of a hypothetical $10k combined portfolio). For standalone comparison use $10000.
strategy_mode: orb
orb_strategy:
engine_family: orb_pullback_v1
live_readiness: research_only
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
# === 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: 1.2
# === 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
# === Pullback entry — core engine feature ===
pullback_entry: true
pullback_max_bars: 8
pullback_min_retracement_pct: 0.25
pullback_stop_at_low: true
# === Extended pullback controls (orb_pullback_v1) ===
# Impulse peak must form by 9:55 ET (25 min from open)
pullback_impulse_window_end_min: 25
# Impulse must move at least 0.4× ATR above breakout level
pullback_impulse_min_move_atr: 0.4
# Pullback depth: 25% to 60% of impulse move
pullback_depth_max_pct: 0.60
# Pullback phase must have lower avg volume than impulse phase (70% threshold)
pullback_volume_contraction_ratio: 0.70
# Abort if pullback penetrates VWAP by more than 0.3%
pullback_vwap_floor: true
pullback_vwap_floor_tolerance_pct: 0.003
# Stop: structural pullback low (not VWAP — cleaner for initial testing)
pullback_stop_mode: pullback_low
pullback_stop_vwap_buffer_pct: 0.002
# Reclaim bar must have 1.2× average post-ORB bar volume
pullback_reclaim_confirm_rel_vol: 1.2
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