Cross-Sectional 12-1 Momentum in S&P 500
Research overview
This study implements the classical 12-1 momentum strategy on the S&P 500 universe: rank stocks on cumulative return from month t−12 through t−2 (skipping the most recent month to avoid short-term reversal), form winner and loser portfolios, and rebalance monthly.
The framework extends a basic momentum backtest with alpha persistence, regime-dependent performance, momentum crash analysis, volatility-managed momentum (Barroso & Santa-Clara), multi-factor decomposition (CAPM, Fama–French, Carhart, FF5), cross-sectional dispersion, sector and residual momentum, and machine-learning crash prediction.
Daily prices are sourced from Yahoo Finance (yfinance); risk factors from Ken French. The universe uses current S&P 500 constituents — a survivorship caveat is noted in the results banner.
Hypotheses
H1: Cross-sectional momentum remains profitable within the S&P 500.
H2: Momentum alpha decays gradually rather than immediately.
H3: Momentum crashes cluster around market recoveries (Daniel & Moskowitz).
H4: Volatility-managed momentum reduces crash risk.
H5: Machine-learning models can forecast crash probability.
Methodology
Signal: M_i = ∏(1 + r) from t−12 to t−2 − 1 using adjusted monthly closes.
Portfolios: Decile and quintile sorts; winner (top 10%), loser (bottom 10%), long-short, and long-only winner. Weighting schemes include equal weight, market cap, inverse volatility, and risk parity.
Regimes: Bull/bear (SPY vs 200-DMA), high volatility (VIX > 75th percentile), panic (SPY drawdown > 20%), recovery (10%+ rebound within 3 months after drawdown).
Crashes: Monthly return < −15% or quarterly return < −30%.
Vol-managed: Scale exposure to target 12% annualized realized volatility.
Limitations
Current S&P 500 membership applied historically introduces survivorship bias.
yfinance adjusted closes may differ slightly from CRSP/Compustat.
Ken French factors are aggregated from daily to monthly; ML crash models use time-series cross-validation with limited crash events.
Research output only — not investment advice.
Interactive dashboard
Below: equity curves, performance metrics, decile analysis, regime and crash diagnostics, factor alphas, volatility-managed comparison, dispersion, and ML crash predictor.
Results
Point-in-time membership from Wikipedia change history reduces survivorship bias vs a frozen current-constituent list. Delisted names included when yfinance has price history.
Enhancements applied
- Point-in-time S&P 500 membership from Wikipedia change history
- Expanded ticker panel including removed constituents (where yfinance has data)
- Liquidity filter: minimum $5 month-end price
- Cross-sectional winsorization of monthly returns (1st–99th pct)
- Industry-neutral momentum signal
- Volatility-managed overlay (12% target vol)
- Regime timing: reduce exposure in recovery/panic/high-vol regimes
- Ken French UMD factor benchmark comparison
Strategy comparison (long-short variants)
| Variant | Sharpe | CAGR | Cumulative | Max DD |
|---|---|---|---|---|
| baseline survivorship | -0.11 | -2.70% | -49.40% | -80.10% |
| pit winsorized | -0.20 | -4.10% | -65.30% | -83.20% |
| industry neutral pit | -0.30 | -3.80% | -63.00% | -81.20% |
| vol managed | -0.18 | -1.50% | -31.60% | -69.20% |
| regime timed | -0.07 | 0.50% | 14.80% | -47.10% |
| full enhanced | -0.07 | 0.50% | 14.80% | -47.10% |
Why long-short returns are weak
- Inverted decile pattern: Q1 (losers) outperforms Q10 (winners) by 0.210%/month — opposite of classical momentum.
- Average Spearman IC (momentum vs next-month return) = -0.0009. Near zero — no cross-sectional predictability.
- Winner leg: 10.7% ann.; Loser leg: 13.4% ann. Long-short ≈ -2.7% ann. because the short leg earns positive returns (short loses money).
- All used tickers are CURRENT S&P 500 members. Historical losers that left the index (bankruptcies, acquisitions, demotions) are absent. Past 'loser' portfolios therefore contain stocks that eventually recovered and remained in the index — this mechanically flattens or inverts the winner-minus-loser spread and depresses long-short returns.
- Only 647/872 (74.2%) of current S&P 500 names have usable yfinance history — incomplete cross-section.
- Long-only winner portfolio can still show high cumulative returns because it holds high-beta recent outperformers in a rising market; that is not the same as a positive momentum factor premium.
Hypothesis testing (3/5 supported)
3 of 5 hypotheses supported at conventional thresholds. See diagnostics for data-quality caveats (survivorship, universe).
| ID | Test | Result | Supported? |
|---|---|---|---|
| H1 | Cross-sectional momentum remains profitable (winner-minus-loser > 0) | -2.67% ann., p=0.404 | No |
| H2 | Momentum alpha decays gradually (1m spread >= 12m spread) | supported | Yes |
| H3 | Momentum crashes cluster in recovery (L/S recovery < L/S bull) | fail_to_reject | No |
| H4 | Volatility-managed momentum reduces crash risk / improves risk-adjusted returns | supported | Yes |
| H5 | ML models forecast momentum crash probability better than chance | ROC-AUC 0.93 | Yes |
Key findings
- Inverted decile pattern: Q1 (losers) outperforms Q10 (winners) by 0.210%/month — opposite of classical momentum.
- Average Spearman IC (momentum vs next-month return) = -0.0009. Near zero — no cross-sectional predictability.
- Winner leg: 10.7% ann.; Loser leg: 13.4% ann. Long-short ≈ -2.7% ann. because the short leg earns positive returns (short loses money).
- All used tickers are CURRENT S&P 500 members. Historical losers that left the index (bankruptcies, acquisitions, demotions) are absent. Past 'loser' portfolios therefore contain stocks that eventually recovered and remained in the index — this mechanically flattens or inverts the winner-minus-loser spread and depresses long-short returns.
- Only 647/872 (74.2%) of current S&P 500 names have usable yfinance history — incomplete cross-section.
- Long-only winner portfolio can still show high cumulative returns because it holds high-beta recent outperformers in a rising market; that is not the same as a positive momentum factor premium.
- 3 of 5 hypotheses supported at conventional thresholds. See diagnostics for data-quality caveats (survivorship, universe).
- H1 test: L/S mean -2.7% ann. (NW t=-0.8345, p=0.403994) — NOT SUPPORTED.
- H2 persistence: 1m spread -0.190% vs 12m -2.500% — SUPPORTED.
- H3 recovery crash: recovery avg -1.546%/mo vs bull 0.280%/mo — NOT SUPPORTED.
- H4 vol-managed: Sharpe -0.1714 → -0.0361, max DD -0.812 → -0.6921 — SUPPORTED.
- H5 ML crash forecast: best lightgbm ROC-AUC 0.927 — SUPPORTED.
- Decile pattern: inverted_momentum (Q1=1.120%/mo, Q10=0.910%/mo, spread=-0.210%/mo).
- Momentum IC: mean=-0.0009, IR=-0.006, hit rate=51%.
- Sub-period L/S returns — 2000-2009: -0.515%/mo, 2010-2019: -0.083%/mo, 2020-present: -0.032%/mo.
- Carhart alpha (ann.) -5.02% (not significant; t=-1.4834); MOM beta loading=0.058.
Stock universe — 647 of 872 S&P 500 names (74.2% coverage)
Excluded (sample): AAP, ABK, ABMD, ACAS, ACE, ADS, AGN, AKS, ALTR, ALXN, AMG, ANDV, ANF, ANR, ANSS, APC, APOL, ARG, ARNC, ATVI, AV, AVP, AYE, BCR, BHI, BIG, BJS, BRCM, BS, BXLT, CCR, CDAY, CELG, CEPH, CERN, CFN, CHK, CMA, CMCSK, COG — 225 current S&P 500 names missing from yfinance panel (download failures, insufficient history since 2000, or delisted tickers). Full list truncated to 40 in JSON; see cache for complete panel.
Equity curves — enhanced vs baseline vs Ken French UMD
Indexed to 100 at start (growth of $1). Long-short portfolios only — not comparable to long-only SPY.
Decile portfolio returns (avg monthly)
D10 − D1 spread: -0.200%/mo
Performance by regime
Alpha persistence (winner − loser forward spread)
| Horizon | Mean spread | Hit rate | N |
|---|---|---|---|
| 1m | -0.200% | 51% | 304 |
| 3m | -0.600% | 50% | 302 |
| 6m | -1.500% | 51% | 299 |
| 12m | -2.500% | 51% | 293 |
Factor decomposition (long-short)
| Model | α (ann.) | t(α) | R² |
|---|---|---|---|
| capm | -4.90% | -1.47 | 0.00 |
| ff3 | -4.60% | -1.44 | 0.01 |
| carhart | -5.00% | -1.48 | 0.01 |
| ff5 | -4.50% | -1.22 | 0.01 |
Volatility-managed vs static momentum
| Metric | Static | Vol-managed |
|---|---|---|
| Sharpe | -0.17 | -0.04 |
| Max drawdown | -0.81 | -0.69 |
| Crash frequency | 0.01 | 0.01 |
Target vol: 12%
ML crash prediction
Latest crash probability: 0.9%
| Model | ROC-AUC | F1 |
|---|---|---|
| logistic regression | 0.75 | 0.00 |
| random forest | 0.44 | 0.00 |
| xgboost | 0.50 | 0.00 |
| lightgbm | 0.93 | 0.00 |
Drawdown — long-short momentum
Crash analysis
Weighting scheme Sharpe comparison
| equal weight sharpe | -0.30 |
| market cap sharpe | -0.20 |
| inverse vol sharpe | -0.30 |