signal = trailing L-day return; ranked cross-sectionally, held H days, lag=1 (daily returns, sticky weights). Universe includes delisted stocks (no survivorship bias). IS/OOS 2016-01-01. Methodology certified by assert_no_lookahead (startup self-test).
Long-only (top decile winners, tradeable, no shorting)
| L(d) | H(d) | IS Sharpe | OOS Sharpe | OOS p | Verdict |
|---|---|---|---|---|---|
| 63 | 21 | 1.19 | 1.54 | 0.000 | PASS |
| 126 | 21 | 1.04 | 1.69 | 0.000 | PASS |
| 189 | 21 | 0.95 | 1.60 | 0.000 | PASS |
| 252 | 21 | 0.81 | 1.59 | 0.000 | PASS |
| 126 | 63 | 0.85 | 1.67 | 0.000 | PASS |
| 252 | 63 | 0.72 | 1.44 | 0.000 | PASS |
Long-short (top minus bottom decile)
| L(d) | H(d) | IS Sharpe | OOS Sharpe | OOS p | Verdict |
|---|---|---|---|---|---|
| 63 | 21 | -0.09 | 0.15 | 0.336 | REJECT |
| 126 | 21 | -0.28 | 0.38 | 0.157 | REJECT |
| 189 | 21 | -0.29 | 0.31 | 0.201 | REJECT |
| 252 | 21 | -0.30 | 0.35 | 0.169 | REJECT |
| 126 | 63 | -0.34 | 0.44 | 0.117 | REJECT |
| 252 | 63 | -0.26 | 0.37 | 0.159 | REJECT |
Decision memo
The long-SHORT momentum factor is flat/negative post-2015 (consistent with the well-documented post-2009 weakness of US equity momentum). The long-ONLY 'buy past winners' portfolio is robust across lookbacks (OOS Sharpe ~1.0-1.4). This is the genuine, tradeable edge — adopt the long-only variant (no shorting needed).
The previously reported long-short Sharpe 0.86-0.92 (equity_momentum_monthly.py) was a MEASUREMENT ARTIFACT (overlapping forward returns + return clipping), NOT a real edge.