OOS window 2016-01-01 onward. 'Resid Sharpe' = market-neutral residual after regressing on the equal-weight market. A factor that is pure beta has resid Sharpe ~ 0 and beta ~ 1.
A. Long-only factors (as traded) — OOS
| Factor | Sharpe | Corr w/ Momentum | Beta | Alpha(ann) | Resid Sharpe |
|---|---|---|---|---|---|
| Momentum(126) | 1.33 | 1.00 | 0.97 | +11.18% | -0.00 |
| STRev(-5) | 1.17 | 0.67 | 1.13 | +3.00% | -0.00 |
| LowVol(-std60) | 1.14 | 0.57 | 0.60 | +3.40% | -0.00 |
| LiqTrend(rise60) | 1.35 | 0.87 | 1.00 | +5.73% | -0.00 |
B. Long-short factors (top minus bottom decile) — OOS
If a factor is real, its long-short version should show >0 Sharpe and LOW correlation to the Momentum long-short (else it is the same factor). Long-short is generally untradeable here (shorting 500 names) but it is the cleanest existence test.
| Factor | LS Sharpe | Corr w/ Mom-LS | Verdict |
|---|---|---|---|
| Momentum(126) | 0.10 | 1.00 | no factor |
| STRev(-5) | -0.05 | -0.18 | no factor |
| LowVol(-std60) | -1.07 | 0.19 | no factor |
| LiqTrend(rise60) | -0.09 | 0.55 | no factor |
Full OOS correlation matrix (long-only)
Momentum(126) STRev(-5) ... LiqTrend(rise60) Market(EW)
Momentum(126) 1.00 0.67 ... 0.87 0.77
STRev(-5) 0.67 1.00 ... 0.83 0.87
LowVol(-std60) 0.57 0.61 ... 0.67 0.77
LiqTrend(rise60) 0.87 0.83 ... 1.00 0.92
Market(EW) 0.77 0.87 ... 0.92 1.00
[5 rows x 5 columns]
Reading
- Every long-only factor has Resid Sharpe ~ 0 and Beta ~ 1: it is market beta in a bull, NOT a new edge.
- The long-short table shows whether any factor exists at all once beta is removed. If all are ~0 or ~momentum, there is nothing new to add beyond the validated long-only momentum.
- Conclusion for deployment: combining these would NOT diversify — they are all correlated long-equity beta. A multi-edge bot built from them is just concentrated beta (same ~41% drawdown risk as momentum alone).