Cross-Sectional Momentum (Long-Only, No Gearing) — 2026-06-14
Hypothesis
Recent winners keep winning: each week buy the 8 strongest US names by 26-week trailing return (skipping the last 1 week), equal weight, long only, no leverage. Hold cash when the market regime is risk-off.
Method & rules
- Universe: 2164 US names (
us_universe_clean.csv). - Signal: trailing 26w return, skip 1w; rank; take top 8; only momentum > 0.0.
- Sizing: 1/8 each (max 8 positions, exposure ≤ 100%, no gearing). Leftover = cash.
- Regime gate (breadth): risk-on when >50% of names are above their 40-week MA, else cash.
- Costs: 0.055% fee + 0.030% slippage per side on traded notional.
- Window: 2024-06-01 → 2026-06-14. Train < 2026-01-01; OOS ≥ 2026-01-01.
Results (after costs)
TRAIN (pre-2026, tuning): - Trades: 139 | Win rate: 38.8% | Avg trade: -0.21% | Profit factor: 0.98 | Total return: -8.48% | Max DD: -48.83%
OUT-OF-SAMPLE (2026, untouched): - Trades: 51 | Win rate: 39.2% | Avg trade: -0.953% | Profit factor: 0.89 | Total return: 11.25% | Max DD: -23.19%
Full window: - Trades: 190 | Win rate: 38.9% | Avg trade: -0.409% | Profit factor: 0.96 | Total return: -11.74% | Max DD: -54.52%
Last-14-day: +12.02%
Monthly returns
| Month | Return % |
|---|---|
| 2024-07 | -0.51 |
| 2024-08 | -6.57 |
| 2024-09 | +10.93 |
| 2024-10 | +10.73 |
| 2024-11 | +4.52 |
| 2024-12 | +49.53 |
| 2025-01 | -17.17 |
| 2025-02 | -4.37 |
| 2025-03 | +0.00 |
| 2025-04 | +0.00 |
| 2025-05 | +0.00 |
| 2025-06 | +0.00 |
| 2025-07 | -1.01 |
| 2025-08 | -15.43 |
| 2025-09 | -8.61 |
| 2025-10 | -8.92 |
| 2025-11 | +8.17 |
| 2025-12 | -10.40 |
| 2026-01 | +10.67 |
| 2026-02 | -11.25 |
| 2026-03 | +2.58 |
| 2026-04 | +9.36 |
| 2026-05 | -21.87 |
| 2026-06 | +12.02 |
Caveats / honesty
- Survivorship: universe = names listed as of 2026-06; even the 2024→ window omits any name delisted in that period. Treat absolute returns as optimistic.
- "Avg trade" is realized return per position (no stop-loss model yet, so R = return).
- Regime gate is self-contained breadth, not an external index — first-pass choice.
- Prototype: parameters not yet swept. Next: sweep lookback / TOP_N / gate on TRAIN only, then re-confirm OOS.
Files
momentum_engine.py(this engine),momentum_trades.csv,momentum_equity.csv