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.

125 lines
3.6 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: 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