← Lab
S028

Short-term RSI-2 reversion + protective ATR stop (A/B)

short-term-reversion-rsi2-stop-v1
failed 2026-06-30
Share: Twitter / X LinkedIn

ID: S028 Slug: short-term-reversion-rsi2-stop-v1 Run date: 2026-06-30 Outcome: FAILED Headline metric: Arm 1 mean −0.107%/trade (edge half: gate > baseline + 0.15%) Fail reason: The protective stop caps the intraday tail (CVaR-95 −13.2% → −8.5%) but cannot catch the overnight-gap killers (worst trade still −68.7%, gate −15%), worsens the portfolio drawdown (71% → 79%), and erases the thin edge (mean +0.058% → −0.107%, not significant). Fails both halves of the gate at every K tested. Exactly the pre-registered forecast.

What we tested

A two-arm A/B, one run, identical data and universe. Arm 0 reproduces S027 exactly (a harness sanity check — it matches to the decimal). Arm 1 adds one frozen element: an ATR-normalised protective stop, stop = entry_fill − K × ATR₁₄, static, evaluated intraday with gap-through honoured (open ≤ stop → fill at the open; else low ≤ stop → fill at the stop level), taking precedence over S027's 5-DMA / 10-day exits. Everything else — universe, survivorship-free monthly basket, RSI-2 < 10 & close > 200-DMA signal, T+1 entry, 30 bps friction, matched random-entry baseline, 2010 → 2026-05, 145,880 trades — is frozen identical to S027.

K was frozen by rule, before the level was known (§5): for every S027 trade, the maximum adverse excursion in ATR units. Eventual winners bottom shallow (median 0.46 ATR, P90 1.29 ATR); losers far deeper (median 1.95 ATR). K = the 90th percentile of winners' depth = 1.29 — placing the stop just beyond where ~90% of normal winning dips turn, so by construction it stops out ~10% of would-be winners. This is a rule, not a fit; K-sensitivity is reported below, never optimised.

What we found

Arm 1 must clear both halves — cap the tail and keep the edge. It clears neither.

Gate (applied to Arm 1) Required Observed Verdict
Tail — CVaR-95 ≥ −8% −8.5% (from −13.2%) FAIL (close)
Tail — worst single trade ≥ −15% −68.7% FAIL
Tail — portfolio max drawdown ≤ 25% 79% (from 71%) FAIL
Edge — magnitude vs baseline ≥ +0.15%/trade mean −0.107%, edge ≈ 0 FAIL
Edge — significance p < 0.05, right sign p = 0.61 FAIL
Win rate (reported) 55.0% (from 60.6%)
Arm 0 — no stop (= S027) Arm 1 — stop (K=1.29)
Mean net return / trade +0.058% −0.107%
Win rate 60.6% 55.0%
CVaR-95 −13.2% −8.5%
Worst trade −80.0% −68.7%
Portfolio max drawdown 71% 79%

The stop did its intraday job (CVaR and worst both improved) and still failed — because what it removed from the tail it took out of the edge, and the deepest losses were overnight gaps it never saw.

Why a stop can't win here (§9 covariates): of 48,175 stop exits, 13% filled at a gapped-down open rather than the stop level — that is the slice of the tail a resting intraday order structurally cannot catch, and it contains the −57% to −69% killers. The stop caught 70% of eventual losers but also 9.3% of eventual winners (≈ the 10% the K-rule budgeted) — and on a +0.06% edge, cutting ~1-in-11 winners is enough to flip the mean negative.

K-sensitivity (reported, not optimised) — the bind is structural:

K CVaR-95 Worst trade Edge vs baseline
P85 = 1.08 ATR −7.7% (passes) −68.7% −0.044%
P90 = 1.29 ATR −8.5% −68.7% −0.022%
P95 = 1.63 ATR −9.5% −68.7% +0.020%

Tighten K and CVaR passes but the edge is more negative; loosen it and the edge recovers toward zero but CVaR worsens. Worst-trade is stuck at −68.7% at every K — the overnight gaps are immune to any stop level. There is no setting that clears both halves.

Why this matters

This is a pre-registered remedy, tested cleanly, and honestly cut — the highest-value kind of negative result. It rules out the most obvious fix and tells us why it fails, which redirects the search precisely. The improvement in CVaR is real and worth remembering; the lesson is that a per-trade stop addresses neither of the two things that actually killed S027 — overnight idiosyncratic gaps and portfolio over-exposure.

What this doesn't tell us yet

What happens next

No Stage 2. Per the swing-pillar rules each is a new S-NNN, and S028's result points at the two mechanisms a stop cannot address — both already deferred in the ledger:

S028 is recorded failed; family B1's cumulative trial count stays at 2.

What we tested — the recipe

What we tested — S027 + one protective stop
A/B: the stop is the only change
Base — S027 held constant (universe, RSI-2<10 & >200-DMA, 5-DMA/10-day exit, 30 bps)145,880 tradesNEW — ATR-normalised protective stop: entry − K × ATR14K = 1.29 (P90 of winners' MAE)Exit precedence — gap-through fills at the open, intraday touch fills at the stop48,175 stop exitsArm 0 (no stop) replicates S027 · Arm 1 (stop) carries the claimgate both halvesTail half (CVaR / worst / DD) AND edge half (mean > baseline+0.15%, p<0.05) — both required
K frozen by rule before the level is known; the stop is the single varied element.
Stop catches a collapse — ATHE
the loser tail the stop is meant to cut
stop = entry − K×ATRbuy openstopped out
ATHE · no-stop -80% → with-stop -69% via gap. Burgundy line = stop level.
Stop cuts a winner — the edge cost — VKTX
a would-be winner stopped out before it reverts
stop = entry − K×ATRbuy openstopped out
VKTX · no-stop +70% → with-stop -9% via stop. Burgundy line = stop level.

Slice & dice

Where the exits came from
the overnight-gap exits (right) are the part the stop structurally cannot catch
base (5-DMA/time)intraday stopovernight gapflat = 48626
Worst SPY-return decile highlighted; flat line = regime-neutral.
Arm 1 (with stop) — equity curve
max drawdown 79% — worse than the 71% no-stop book
0.2x1.0x2010201220142016201820202022202420262026-05
Fully-invested equal-weight book; 1.0x = start. Trough marked.
Arm 1 — mean net return per trade, by year
the stop pushes the thin edge negative
101k117k127k138k149k157k167k179k189k198k208k2114k226k239k2412k2510k265k+0.6%−0.6%
Bar = mean net return per trade that year (30 bps in); label = trade count.
For the specialist — methodology details (click to expand)
  • Arm 0 replication: mean +0.058%, CVaR-95 −13.2%, worst −80.0%, DD 71%, n = 145,880 — matches the published S027 result exactly (harness verified).
  • Arm 1 (K=1.29 ATR): mean −0.107%, edge vs matched baseline ≈ −0.02% (p = 0.61), CVaR-95 −8.5%, worst −68.7%, DD 79%, win 55.0%, n = 145,880.
  • Stop mechanics: 48,175 stop exits (41,971 intraday-touch fill at the stop, 6,204 gap-through fill at the open); 97,705 trades reached the base 5-DMA/time exit unchanged. Overnight-gap-through share 12.9%. Eventual winners stopped 9.3%; eventual losers stopped 69.6%.
  • K derivation: winners' MAE depth percentiles (ATR units) P50 0.46 / P75 0.83 / P85 1.08 / P90 1.29 / P95 1.63; losers' P50 1.95 / P75 3.07 / P90 4.62. K = P90 of winners = 1.29.
  • Look-ahead controls (delta vs S027): gap-through fills at open(T), never at the stop; ATR₁₄ on adjusted prices through close(T); stop fixed at entry, not trailing. All S027 controls inherited (survivorship-free PIT, split/dividend-adjusted, indicators through close(T)).
  • Reproducibility note: strategy metrics are deterministic; the matched random-entry baseline carries small run-to-run sampling variation (bounded, does not affect the verdict — the edge is within noise of zero at every K).
  • Artifacts: trades.parquet (Arm 1), ab_summary.json (both arms, gates, K-sensitivity, covariates), charts.json. Runner: lab/quickkill/short-term-reversion-rsi2-stop-v1/run.py (reuses the S027 engine; Arm 0 = S027).
← Oldershort-term-reversion-rsi2-stop-v1 Newer →trend-continuation-breakout-v1

Mechaniq provides information, not investment advice. We do not execute trades. Past results are no guarantee for future performance. You are solely responsible for your trading decisions.

Lab · Methodology · Greeks Lab · About · FAQ · Glossary · Privacy · Terms · mechaniq.trade © 2026

07 Jul 2026, 07:06