Does buying 2σ dips actually work?

One rule, five years of daily bars, nine tickers — and the honest answer, including the cases where it loses badly. Last run 11 Aug 2026.

z = (close − SMA20) / stdev20  ·  BUY when z < −2.0  ·  SELL when z ≥ 0.0  ·  long only, 100% notional, next-bar fill

No stops, no leverage, no position sizing, no parameter fitting — the same 20/−2/0 settings on every ticker so nothing is tuned per-symbol. Data is 5 years of daily closes (11 Aug 2021 → 11 Aug 2026).

Results

TickerCAGRSharpeMax DDWin %TradesTime in mktB&H CAGRB&H SharpeB&H Max DD
XLE25.4%1.60−11.7%79%2418%29.1%0.98−26.9%
SPY10.0%0.76−9.2%69%2621%17.6%0.88−25.4%
IWM9.6%0.68−11.8%67%2423%8.9%0.45−33.1%
XLU6.7%0.64−15.3%62%2625%7.1%0.43−28.1%
GLD3.8%0.45−8.0%84%1918%29.9%1.28−26.4%
QQQ6.1%0.42−18.2%75%2021%21.8%0.85−35.6%
BTC-USD2.1%0.22−44.9%52%3126%7.0%0.39−76.6%
TLT−2.2%−0.12−24.7%59%2735%−15.5%−0.80−46.8%
ETH-USD−9.9%−0.05−61.2%47%3228%−9.9%0.20−79.4%

Green Sharpe = the dip rule beat buy & hold on a risk-adjusted basis. Red = it lost.

What the numbers actually say

Run it on your own ticker

The backtester that produced this table is free and takes no signup. Type a symbol, pick your lookback and z-thresholds, get the equity curve, the trade list and the current signal.

Mean-Reversion Backtester → Any crypto, stock or ETF · up to 5y daily · Sharpe / CAGR / max DD / win rate vs buy & hold · free, no signup

If you want the version I would actually trade off

The single-setting table above deliberately does not fit parameters, because a fitted number on one sample is worth nothing. The useful version is a parameter sweep with the out-of-sample check attached, so you can see whether the best setting is a real ridge or a lucky spike.

The Full Optimization Report ($29, one ticker) is that: a sweep over lookback × entry z × exit z, walk-forward in-sample vs out-of-sample results for the best settings, the complete trade ledger as CSV, and a standalone runnable Python file so you can re-run and modify it yourself. Delivered by email within 24 hours — if the ticker's best parameters do not hold up out of sample, the report says so.

Get the $29 report →

Secure Stripe checkout. Put the ticker you want in the checkout notes, or reply to the receipt.