New to these reports? Start here
- Dotted-underlined words have a plain-English definition — hover or tap them. Every term is also on the glossary page.
- "Null" means we found nothing, not that something broke. Most reports here are negative results, on purpose — knowing an idea doesn't work is the point.
- Two questions get asked separately. First, is the effect real? Second, is it already priced into the betting odds? An effect can be completely real and still useless to bet on.
- A "calibration" row is a self-check. It runs the same method on something already known to be true. If that fails, the whole report is unreliable — so it's reported alongside the findings.
- If a confidence interval includes zero, the real effect might be nothing at all, so no claim gets made.
002 12-1 Momentum — Factor Attribution
Generated by backtests/common/factor_attribution.py (DATA_SOURCES_ROADMAP.md item #8). Regresses monthly strategy returns on the Fama-French 3 factors (Mkt-RF, SMB, HML) plus momentum (UMD) via data_loader.factor_returns('M'). No P&L impact — this is a measurement/honesty exercise, not a strategy change.
(a) Backtest equity curve (002_momentum_12_1.py, 2015–2026)
Period: 2015-03 → 2026-05 (n=135 months)
| Metric | Value |
|---|---|
| Alpha (monthly) | +0.335% |
| Alpha (annualized) | +4.09% |
| Alpha t-stat | 1.31 |
| R-squared | 0.789 |
| Factor | Beta | t-stat |
|---|---|---|
| Mkt-RF | 1.261 | 21.22 |
| SMB | 0.028 | 0.29 |
| HML | 0.064 | 0.90 |
| UMD | 0.657 | 9.24 |
Is the 12-1 backtest just UMD beta?
UMD beta = 0.66, Mkt-RF beta = 1.26, alpha t-stat = 1.31. Verdict: PARTIALLY — UMD beta (0.66) is real and highly significant but well below a pure 1.0 loading — Mkt-RF (beta 1.26) is actually the dominant factor here. Alpha is statistically indistinguishable from zero (t=1.31), so there's no detectable stock-selection skill beyond the combined factor exposure — but that exposure is market beta plus a meaningful (not dominant) momentum tilt, not momentum alone.
(b) Live paper-trading bankroll (momentum_strategy/db.py nav table)
ERROR: insufficient overlapping months (n=0) to run a regression — returns cover 2026-06..2026-07, Ken French monthly factor data currently covers 1926-07..2026-05 (the French library publishes monthly with a lag, so very recent months commonly have no factor data yet)
Is the live paper-trading track record just UMD beta?
N/A — regression did not run (see error above).
Reading this
- A UMD beta near 1.0 with an alpha t-stat below ~2 means the strategy's returns are well explained by the academic momentum factor itself — expected and fine for a strategy explicitly designed to harvest that factor, but it means the honest framing is "we're paper-trading a known factor exposure," not "we found alpha."
- The live paper-trading sample (since 2026-05) is far too short for a monthly regression to mean anything on its own — it's included per spec for completeness and to establish the harness end-to-end; treat it as a placeholder that will become meaningful after 24+ months of history, not as a current verdict.
- The backtest series (2015–2026, ~130+ months) is the one worth reading for a real answer to the UMD-beta question.