SL/risk-control corpus analysis - don’t tighten SL, don’t add session peak-stop
Context. 2026-05-14 mid-session, user observed asymmetric P&L per trade: wins ~2k (TP fires at +10%), losses ~5k (SL fires at -25%). Breakeven win rate = 71%; corpus empirical win rate = 60-65%. User asked for the “sweet spot to limit the downside” without losing data-collection volume. Two candidate interventions tested against the full corpus (22 trading days, 315 trades, 2026-04-07 → 2026-05-14):
- Trailing daily-peak-stop (session lockout after give-back from intraday peak)
- SL-tightening (move -25% to a tighter level)
Both lost money over the corpus. Don’t implement either.
Intervention 1: Daily peak-stop
Configuration tested: stop new entries for the day when running P&L drops below peak by max($floor, peak × pct%). Sweep across floor=3000, pct=20-35%.
| Config | Actual $ | Sim $ | Δ |
|---|---|---|---|
| floor=$2000 pct=25% | +18,229 | +2,006 | -$16,223 |
| floor=$2000 pct=30% | +18,229 | +2,006 | -$16,223 |
| floor=$3000 pct=35% | +18,229 | +2,751 | -$15,478 |
**Result: every configuration costs 75k saved across days like 04-10 -4k, 04-30 -4.4k, 05-07 -2.5k, 05-12 -1.5k). On 6 days it hurt - 05-05 alone cost -74,373 winning day off at +$2,648 after early give-back). The engine demonstrably has recovery ability; peak-stop kills it.
Intervention 2: SL-tightening (-25% → tighter)
Computed against outcomes.mae_pct (runtime-recorded max adverse excursion, not noisy path snapshots). For each trade, if mae_pct ≤ -sl_pct, simulated SL fires and locks loss at -sl_pct × total_cost.
| SL% | Actual $ | Sim $ | Δ | Helped | Hurt | Breakeven WR |
|---|---|---|---|---|---|---|
| 30% | +39,480 | -192k | -$232k | 1 | 68 | 75% |
| 25% (current) | +39,480 | -172k | -$211k | 20 | 66 | 71% |
| 22% | +39,480 | -162k | -$201k | 44 | 64 | 69% |
| 20% | +39,480 | -159k | -$199k | 48 | 70 | 67% |
| 18% | +39,480 | -162k | -$201k | 51 | 75 | 64% |
| 15% | +39,480 | -150k | -$190k | 60 | 81 | 60% |
**Result: every SL ≤ 25% destroys 190-232k of P&L over the corpus.** For every 1 saved by cutting a loser shorter, $3-5 is lost by stopping a winner out before it recovers.
(Note: sim at SL=25% should ≈ actual; the gap reflects engine-actual MAE-based exit timing being slightly different from a hard MAE-trigger exit, plus partial-exit dynamics. The shape of the curve across SL levels is what matters - monotonically worse as SL tightens.)
Why SL-tightening fails: MAE distribution among ALL trades
| MAE bucket | n | wins | win % |
|---|---|---|---|
| Barely dipped (>-5%) | 72 | 70 | 97% |
| -5 to -10% | 40 | 35 | 88% |
| -10 to -15% | 36 | 21 | 58% |
| -15 to -20% | 23 | 17 | 74% ← V-recovery sweet spot |
| -20 to -25% | 25 | 11 | 44% |
| -25 to -30% | 23 | 5 | 22% |
| ≤ -30% | 70 | 21 | 30% |
The -15 to -20% MAE bucket has 74% win rate. These are V-recovery trades: option mid dips deep, then comes back through the entry to hit +10% TP. A tighter SL kills exactly these. Options premium has enormous intraday vol - a $0.30 SPY underlying move can cycle the option mid -20% then +10% inside 2 minutes. TP at +10% is small relative to the option’s natural vol, so winners frequently V-dip past where a tighter SL would have stopped them.
The real “limit the downside” levers (data-supported)
In order of durability:
1. Smaller position size, not tighter SL. Today’s 17k positions × 25%, not the SL %. Drop from 100 contracts to 50 = same -25% SL but $2k max loss. Preserves V-recovery winners. Cleanest implementation: scale contract count by signal confidence (HIGH=100, MEDIUM=70, LOW=50).
2. Filter out the “deep-MAE” cohort. Trades with MAE ≤ -25% have 22-30% win rate vs corpus baseline ~60%. If the meta-model retrain (task #56, nightly pipeline) can predict “this trade is likely to go deep” from entry features, those signals are skipped. Today’s data feeds that learning loop.
3. Path-aware exit (MK3 only). Use IMPULSE-against-position as an early-exit signal: if IMPULSE flips against the position before profit, bail before -25%. This is the right MK3 design - exit on signal flip, not just price level.
What NOT to do (data-proven wrong)
- Tighten SL below 25%: costs $190-230k across corpus
- Daily peak-stop: costs $15-20k across corpus
- Raise score threshold globally: empirically neutral-to-slightly-worse (see 2026-05-14-impulse-vs-composite-empirical-tier-analysis)
- Anything that kills the V-recovery winners
Decision
- Keep -25% SL on MK2. Empirically near-optimal in (-15%, -30%) range.
- Do not add session peak-stop. Net negative across corpus.
- Reduce position size for low-confidence signals - MK3 design, validate first.
- Filter deep-MAE candidates via meta-model - already in nightly pipeline, watch for signal once n grows.
Memory links
- 2026-05-14-impulse-vs-composite-empirical-tier-analysis - same-day analysis: don’t tier the score threshold either
- project_impulse_corpus_may14 - memory: 5-week IMPULSE TP-hit analysis
- project_stop_loss_optimization - prior memory: tighten SL deferred until engine stable
- Task #100 - P0 strategy: thesis-invalid logic + TP/SL geometry (MK3 revisit)