Strategy #12 — SPY VWAP Deviation Reversal (mean-reversion)
Fade ±2σ VWAP extremes on a failed second test + 5m RSI extreme + 1m volume. Phase-1 backtest
on SPY underlying (R-multiples), real Alpaca data, strictly causal. 1 year: 2025-05-01 → 2026-05-01.
as-spec: 5 trades
expectancy −0.41R
PF 0.36
win 20%
VERDICT: no durable edge
Bottom line: the strategy as specified barely triggers (5×/yr — RSI≤28/≥72 right at the
±2σ band is rare) and loses (PF 0.36). Loosening the filters to get a real sample keeps expectancy negative;
the one config that prints positive (k1.5, +2.7R) is a top-5 mirage (ex-top-5 = −12.7R). Fading VWAP
extremes bleeds in the trending 2025–26 regime. First mean-reversion idea tested — edgeless like the
continuation family (#7–#11). Phase-2 options mapping is moot: there's no underlying edge to wrap.
Sensitivity sweep (spec §26)
| config | trades | win% | expectancy | PF |
total R | ex-top5 | +months |
|---|
| AS-SPEC (2σ, RSI 28/72, vol 1.5×) | 5 | 20.0% | −0.41R | 0.36 | −2.0R | — | 1/4 |
| loose (2σ, RSI 30/70, vol 1.25×) | 14 | 35.7% | −0.12R | 0.80 | −1.6R | −8.2R | 2/10 |
| loosest (2σ, RSI 35/65, vol 1.0×) | 61 | 37.7% | −0.03R | 0.94 | −2.0R | −16.8R | 6/12 |
| k1.5 (1.5σ, RSI 35/65, vol 1.0×) | 126 | 43.7% | +0.02R | 1.04 | +2.7R | −12.7R | 7/12 |
ex-top5 = total after dropping the 5 best trades (mirage check). Every positive cell collapses without its top 5.
As-spec analysis charts (2σ, RSI 28/72, vol 1.5×)
5 trades over the year: 1 winner, 4 losers; equity bleeds to −2R. Too sparse to be a strategy.
Larger-sample view — k1.5 sweep config (1.5σ, RSI 35/65, vol 1.0×)
126 trades — the only "positive" config (+2.7R, PF 1.04). Underwater for ~100 of 126 trades
(drawdown to −12R), rescued by a late cluster of winners = the top-5 mirage in visual form.
As-spec trade log (5 trades)
| # | date | entry t | side | entry | R ($) | RSI(5m) |
vol× | exit reason | result |
|---|
| 1 | 2025-06-27 | 14:26 | long | $613.23 | 0.50 | 22 | 1.85× | STOP | -1.00R |
| 2 | 2025-06-30 | 15:59 | short | $618.59 | 0.63 | 77 | 1.73× | EOD | +1.13R |
| 3 | 2025-07-07 | 12:26 | long | $620.24 | 1.00 | 24 | 1.68× | TIME | -0.15R |
| 4 | 2025-10-30 | 15:49 | long | $680.74 | 0.55 | 27 | 1.66× | STOP | -1.00R |
| 5 | 2026-04-01 | 12:12 | short | $657.56 | 0.54 | 74 | 2.16× | STOP | -1.00R |
Bug-fix note (2026-06-16): caught while plotting — v1 (1) didn't apply the synthetic-
invalidation floor on EOD/time exits, so a degenerate $0.07-stop setup produced a spurious −3.57R loss, and
(2) had no minimum-stop filter, so rejection candles whose high ≈ the setup extreme created near-zero-R
"trades" with wild R-multiples. Fixes: clamp any pre-TP1 loss to −1R (the invalidation IS the stop) and
require stop ≥ 0.08% of price (~$0.50 on SPY). Trade counts roughly halved; the no-edge verdict is unchanged.