Open Replication Library
Which strategies survive out of sample?
Each strategy below is recomputed from its building blocks— reconstructing the Fama-French factors from their component portfolios, forming long-short books by ranking assets — never read off a finished factor. Then it is scored honestly out of sample by splitting at the paper's publication year (the McLean & Pontiff test). The library is open source: every result is reproduced by CI, runnable in Colab, and open to your contributions.
Each cross-sectional replication is independently checked against the Open Source Asset Pricing single-name long-short returns (Chen & Zimmermann). We report the magnitude of agreement: a different construction of the same anomaly, so 0.4–0.8 is a genuine match. This runs automatically alongside the leaderboard.
| Strategy | Pub. | IS | OOS | Decay | Verdict | vs OSAP | Run |
|---|---|---|---|---|---|---|---|
Idiosyncratic volatility puzzle ⚠ Univariate residual-variance sort (value-weighted quintiles). The puzzle is stronger with equal weighting and among small, illiquid names; this is the value-weighted spread, gross of transaction costs. | 2006 | 0.16 | +0.01 | 91% | dormant | clear 0.93 | Colab·code |
Asset-class momentum ⚠ Cross-sectional 12-1 momentum across a fixed ETF basket (histories begin mid-2000s, so the sample is short), a practical proxy for the paper's broad cross-asset universe; gross of transaction costs. | 2013 | 0.28 | +0.55 | improved | alive | — | Colab·code |
MAX effect (lottery stocks) ⚠ Uses a fixed basket of surviving Yahoo Finance large caps (history since ~2000), not the paper's full CRSP universe, so it is survivorship-biased and understates the effect, which is strongest in small, illiquid names. A faithful-but-limited proxy; gross of transaction costs. | 2011 | -0.11 | -0.29 | — | dormant | — | Colab·code |
Earnings yield (P/E effect) ⚠ Univariate earnings-yield sort (value-weighted quintiles); firms with negative earnings are excluded from the sort. Overlaps with the book-to-market value factor; gross of transaction costs. | 1977 | 0.74 | +0.25 | 67% | dormant | partial 0.68 | Colab·code |
Investment (CMA) | 2008 | 0.71 | +0.03 | 95% | dormant | weak 0.38 | Colab·code |
Long-term reversal | 1985 | 0.20 | +0.07 | 66% | dormant | partial 0.67 | Colab·code |
Value (HML) | 1993 | 0.49 | +0.21 | 58% | decayed | partial 0.55 | Colab·code |
Size (SMB) | 1981 | 0.20 | -0.01 | 108% | dormant | partial 0.63 | Colab·code |
Betting against beta ⚠ Beta-rescaling uses a simple rolling 60-month market beta of each leg, not the paper's exact (1-year vol x 5-year correlation) estimator, and rescales the two quintile legs rather than every security. Gross of the (high) financing and turnover costs that leverage entails. | 2014 | 0.28 | +0.04 | 87% | dormant | partial 0.41 | Colab·code |
Pairs trading (distance) ⚠ Distance method on a fixed large-cap Yahoo basket (history since ~2000), not the paper's full CRSP universe, so it is survivorship-biased and understates an effect that lives in smaller names; equal-weight long/short per pair, gross of the high transaction costs pairs trading incurs. | 2006 | -0.05 | +0.06 | — | dormant | — | Colab·code |
Short-term reversal ⚠ Extremely high turnover and heavily driven by microstructure (bid-ask bounce). The gross Sharpe shown is not achievable net of realistic transaction costs. | 1990 | 5.12 | +1.29 | 75% | decayed | partial 0.44 | Colab·code |
Momentum (WML) | 1993 | 0.63 | +0.38 | 40% | alive | clear 0.74 | Colab·code |
Cash-flow yield (value) ⚠ Univariate cash-flow-to-price sort (value-weighted quintiles); firms with negative cash flow are excluded. Highly correlated with book-to-market and earnings-yield value; gross of transaction costs. | 1994 | 0.58 | -0.06 | 110% | dormant | weak 0.34 | Colab·code |
Industry momentum | 1999 | 0.47 | +0.31 | 35% | alive | partial 0.45 | Colab·code |
Trend (time-series momentum) ⚠ Uses Yahoo Finance continuous front-month futures, which begin ~2000 (vs the paper's 1985) and carry roll artifacts — a faithful but data-limited proxy for the paper's 58-instrument universe. | 2012 | 0.34 | +0.42 | improved | alive | — | Colab·code |
Profitability (RMW) | 2013 | 0.58 | +0.24 | 59% | decayed | partial 0.46 | Colab·code |
Net share issuance ⚠ Univariate net-issuance sort (value-weighted quintiles). The effect is stronger with equal weighting and among small caps; gross of transaction costs. | 2008 | 0.45 | +0.03 | 94% | decayed | partial 0.53 | Colab·code |
Accruals anomaly ⚠ Univariate accruals sort (value-weighted quintiles), available from 1963. The anomaly is concentrated in small, hard-to-arbitrage names and has weakened since publication; gross of transaction costs. | 1996 | 0.63 | +0.23 | 63% | decayed | weak 0.30 | Colab·code |
IS / OOS are annualized Sharpe ratios in-sample (pre-publication) and out-of-sample (post-publication);vs OSAP is the magnitude of correlation between our (Ken-French-built) factor and the Open Source Asset Pricing single-name long-short returns — a different construction of the same anomaly, so 0.4–0.8 is a genuine match (an external check on top of CI). A few predictors (e.g. beta) are signed by OSAP in the opposite direction, so we show |correlation|. Decay is the fraction of in-sample Sharpe lost after publication. Verdicts fall out of the numbers, not editorial judgement.
Add your own replication
Recompute a strategy from building blocks, score it out of sample, and open a pull request. CI checks the contract and that your result reproduces; a maintainer merges it. Multiple takes on the same paper are welcome — the disagreement is the lesson.

