|
|
_meta:
|
|
|
id: 29
|
|
|
name: "ORB Gainers V24 LossCap"
|
|
|
description: >
|
|
|
[DOCUMENTED FAILURE — NOT PROMOTED]
|
|
|
V23 → V24 via single change: single_trade_loss_cap_pct=0.05
|
|
|
|
|
|
Result: +92.6% (200d), WR 58.0%, Sharpe 3.00, DD -9.0% — return -55.5pp vs V23.
|
|
|
Also tested cap=0.10 (-33pp) and streak_max=2.0 (-36pp). All failed.
|
|
|
Root cause: streak sizing amplifies wins AND losses symmetrically.
|
|
|
Capping losses also caps wins proportionally → unavoidable trade-off.
|
|
|
V23 HIMS -4.63% loss is a designed -1R at streak×2.4 — not a fixable bug.
|
|
|
|
|
|
Original hypothesis: streak_sizing_max=2.5 creates structural misalignment where a single -1R trade
|
|
|
can consume 2.5× daily_max_loss_pct worth of capital (e.g. 2.4× streak → $1,200 loss on
|
|
|
$10k initial, while daily_max_loss_pct=0.05 intent is $500 max).
|
|
|
|
|
|
Fix: after all sizing boosts (governor + streak + rolling WR), clamp sizing_capital so
|
|
|
that risk_per_trade_pct × sizing_capital ≤ single_trade_loss_cap_pct × initial_capital.
|
|
|
With risk_per_trade_pct=0.05 and cap=0.05: max sizing = $10,000 = initial_capital.
|
|
|
|
|
|
Example (2026-04-17 HIMS):
|
|
|
Without cap: streak 2.4× → sizing $24k → risk $1,200 → loss -4.63% of portfolio
|
|
|
With cap: sizing clamped to $10k → risk $500 → loss ~-1.92% of portfolio
|
|
|
|
|
|
Trade-off: streak bonus is capped for loss protection, but also for wins (smaller positions
|
|
|
on winning streaks). Net effect on WR and return is the test hypothesis.
|
|
|
|
|
|
Validation:
|
|
|
V23 200d TRUE BASELINE: +109.32%, WR 58.1%, DD -12.91%, Sharpe 3.01, 160 trades
|
|
|
Gates (200d): return ≥ +104%, single max loss ≤ $500, 2026-04-17 daily ≤ -2.5%
|
|
|
Gates (400d): return ≥ +88%, WR ≥ 52%, DD ≤ -24%
|
|
|
|
|
|
strategy_mode: orb
|
|
|
|
|
|
orb_strategy:
|
|
|
engine_family: gainers_leader
|
|
|
live_readiness: live_ready
|
|
|
|
|
|
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
|
|
|
|
|
|
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
|
|
|
|
|
|
# === CHANGE: cap single-trade loss at 5% of initial_capital (= $500 on $10k) ===
|
|
|
# Prevents streak boost from amplifying -1R losses beyond daily_max_loss intent.
|
|
|
single_trade_loss_cap_pct: 0.05
|
|
|
|
|
|
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
|