What is Mean Reversion?

Mean reversion is based on the statistical concept that prices tend to gravitate back toward their historical average over time. When an asset's price deviates significantly from its mean, it's expected to eventually return—creating trading opportunities.

This strategy is essentially the opposite of momentum trading: instead of "buying high and selling higher," mean reversion traders "buy low and sell at the mean" (or short high and cover at the mean).

When Mean Reversion Works Best

Mean reversion strategies excel in specific market conditions:

  • Range-bound markets: When prices oscillate within defined boundaries
  • High-liquidity assets: Where extreme prices quickly attract counter-traders
  • Short timeframes: Intraday to several days (longer periods favor trending behavior)
  • Stable volatility regimes: Sudden volatility changes can break mean reversion patterns
Critical Warning

Mean reversion fails catastrophically during regime changes and trending markets. Always use stop losses—the "mean" you're reverting to might have shifted permanently.

Common Mean Reversion Approaches

Bollinger Band Strategy

Use Bollinger Bands to identify when prices have moved too far from the mean:

Bollinger Band Mean Reversion Rules

  • Setup: 20-period SMA with 2 standard deviation bands
  • Buy: Price touches or crosses below lower band
  • Sell: Price touches or crosses above upper band
  • Exit: Price returns to the middle band (20-period SMA)
  • Stop Loss: 1-1.5x the band width below/above entry

RSI Oversold/Overbought

The Relative Strength Index can signal when an asset is overextended:

RSI Mean Reversion Rules

  • Buy: RSI falls below 30 (oversold) then crosses back above
  • Sell: RSI rises above 70 (overbought) then crosses back below
  • Confirmation: Wait for reversal candle pattern before entry
  • Target: RSI returns to 50 (neutral zone)

Z-Score Method

A more quantitative approach using standardized deviation from the mean:

Z-Score Calculation
# Calculate rolling mean and standard deviation
rolling_mean = prices.rolling(window=20).mean()
rolling_std = prices.rolling(window=20).std()

# Calculate z-score
z_score = (prices - rolling_mean) / rolling_std

# Trading signals
buy_signal = z_score < -2  # 2 std deviations below mean
sell_signal = z_score > 2   # 2 std deviations above mean

Risk Management for Mean Reversion

Mean reversion has a unique risk profile that requires specific risk controls:

  • Strict stop losses: Prices don't always revert—sometimes they keep going
  • Position sizing: Scale in gradually rather than taking full position at first signal
  • Time stops: Exit if reversion doesn't occur within expected timeframe
  • Regime filters: Avoid mean reversion during strong trending periods