Module 5 — Strategy Design

Momentum vs Mean Reversion

Trend, reversion, and the diagnostic discipline that separates real edge from a curve fit.

Learning objectives

  • Recognise the timescales at which each regime tends to dominate.
  • Implement a 12-1 momentum factor.
  • Implement a short-horizon mean-reversion signal.

TEXT

Two empirical regularities, two timescales

Cross-sectional momentum (12 months minus the most recent month) earns a positive premium across nearly every asset class — winners keep winning over 3–12 month horizons. At the same time, daily and intraday returns mean-revert: a stock that ran +5% today tends to give back a bit tomorrow. The same stock can be momentum at the monthly level and mean-reverting at the daily level.

CODE

12-1 momentum factor

# For a panel of returns indexed by date and ticker
lb_12m = returns.rolling(252).sum()
recent_1m = returns.rolling(21).sum()
mom = lb_12m - recent_1m
# Long top decile, short bottom decile
rank = mom.rank(axis=1, pct=True)
long = (rank > 0.9).astype(int)
short = (rank < 0.1).astype(int)

CODE

Short-horizon mean reversion

# 5-day reversal: bet against last week's winners
short_term = returns.rolling(5).sum()
rank = short_term.rank(axis=1, pct=True)
position = -2*(rank - 0.5)  # linearly fade extremes

TEXT

Why both can coexist

Momentum is driven by slow incorporation of fundamental news and behavioural underreaction. Daily mean reversion is driven by liquidity demand — somebody had to push the stock up, and liquidity providers fade them. Different mechanisms, different horizons.