MR Mean Reversion Strategies
Beyond pairs — the full playbook for fading moves and catching snapbacks
Learning Objectives
- •Understand mean reversion as a strategy class beyond pairs trading
- •Learn single-instrument mean reversion approaches
- •Combine mean reversion with regime detection for conditional alpha
Explain Like I'm 5
Mean reversion is the idea that prices snap back to some average after moving too far. It's not just pairs trading — you can apply it to single instruments. When RSI hits 20, the asset is likely to bounce. When RSI hits 80, it's likely to dip. But here's the critical caveat: mean reversion only works in ranging markets. In trends, it will destroy you. Combine it with regime detection and you get conditional mean reversion — one of the most powerful concepts in quantitative trading.
Think of It This Way
Mean reversion is a rubber band. Stretch it too far and it snaps back. But not all rubber bands snap back — some break. The key is knowing which instruments in which regimes are actually mean-reverting vs. trending. This is where most people get wrecked: applying mean reversion blindly without checking the regime first.
1Single-Instrument Mean Reversion
2The Regime Problem
Blind Mean Reversion vs Regime-Adaptive Strategy
3Combining Mean Reversion with Momentum
4The Hurst Exponent Reference
5Common Mean Reversion Traps
Key Formulas
Bollinger Band Width
Width measures how stretched the bands are. Narrow bands indicate low volatility (breakout imminent). Wide bands indicate high volatility (mean reversion more likely).
Hands-On Code
Regime-Adaptive Mean Reversion
import numpy as np
def regime_adaptive_strategy(prices, hurst, rsi, lookback=20):
"""Switch between momentum and mean reversion based on regime."""
signals = []
for i in range(lookback, len(prices)):
h = hurst[i]
r = rsi[i]
if h > 0.55: # Trending regime
# Momentum: follow the trend
momentum = (prices[i] - prices[i-lookback]) / prices[i-lookback]
if momentum > 0:
signal = 1 # long
else:
signal = -1 # short
elif h < 0.45: # Mean-reverting regime
# Mean reversion: fade extremes
if r < 25:
signal = 1 # oversold, buy
elif r > 75:
signal = -1 # overbought, sell
else:
signal = 0 # no trade
else:
signal = 0 # uncertain regime, sit out
signals.append(signal)
signals = np.array(signals)
print(f"=== REGIME-ADAPTIVE STRATEGY ===")
print(f"Momentum trades: {np.sum(np.abs(signals[np.array(hurst[lookback:]) > 0.55]))}")
print(f"MeanRev trades: {np.sum(np.abs(signals[np.array(hurst[lookback:]) < 0.45]))}")
print(f"Skipped: {np.sum(signals == 0)}")
return signalsSwitches between momentum and mean reversion signals based on the rolling Hurst exponent, demonstrating how regime conditioning prevents catastrophic losses from applying the wrong strategy.
Knowledge Check
Q1.Hurst exponent is 0.60 and RSI is 22. Should you buy (mean reversion) or wait?
Assignment
Implement a regime-adaptive strategy that switches between momentum and mean reversion based on Hurst exponent. Compare performance to a pure momentum strategy and a pure mean reversion strategy.