Big BotsResearch ← all reports

Cross-Sectional Momentum on 1d Crypto — Backtest Report

Date: 2026-06-10 Analyst: Claude (for Jacques) Data: crypto_cross.db, 1d candles, June 2024 → 2026-06-09 Engine: /root/backtest_xsmom_PY-00027_100626.py Helpers: /root/xsmom_finals_100626.py (finalist cross-eval), /root/xsmom_robust_100626.py (robustness sweep) Outputs: /root/xsmom_tune_leaderboard_100626.csv, /root/clean_universe_1d_100626.txt


1. Goal & why

Project mission: find a trading strategy with positive expectancy after costs. The prior lead (flag breakouts) was shelved — its edge was a single month and died under the 8-position cap. The next lead on the list was cross-sectional momentum: each week, rank coins by recent performance and trade the extremes (long strongest / short weakest), gated by the BTC regime. This report tests that idea under the project's mandatory validation rules.

Validation rules applied (CLAUDE.md): - Costs: 0.055% fee/side + 0.03% slippage/side = 0.085%/side → 0.17% round-trip. Charged on every position-week (no turnover netting) → slightly conservative. - Max 8 concurrent positions. Equal weight, 1/8 of equity per slot, gross ≤ 1.0 (no leverage). - Tune on data before 2026-01-01 only. 2026 held back as untouched out-of-sample (OOS). - Report trades, win rate, avg R, profit factor, max drawdown, monthly table, last-14-day. - Beware survivorship bias. Be honest.


2. Building a clean, bias-free universe

Before any strategy logic, I checked the data for survivorship bias — critical for a ranking strategy, where a coin appearing or vanishing mid-test distorts the ranks.

Result: clean_universe_1d_100626.txt, 247 coins, continuous and crypto-only.

Top-100 selection — and a deliberate bias experiment

We have no market-cap field, so "top 100" uses average daily dollar volume (close × volume) as the proxy — which also doubles as the right liquidity screen. Ordering sanity-checks correctly (BTC > ETH > SOL > HYPE > XRP…).

Two ways to pick the top 100, run as a controlled comparison: - FIXED — today's top-100 applied across all history. This has look-ahead/survivorship bias (it pre-selects coins that grew large later). Jacques chose this as the primary view. - POINT-IN-TIME (PIT) — recompute the top-100 each week from trailing volume known at that time. No look-ahead. This is the honest test, run as a bias check.


3. Method


4. Results

4a. Tune-set leaderboard (pre-2026, FIXED universe)

Best risk-adjusted variant: regime-gated long/short, 21d lookback, 3 per side — PF 1.55, +176%, max DD −9.2%, Sharpe 2.25. A useful sanity signal: the skip=7 long/short variants lose money (momentum inverts to reversal at a 1-week skip), so the engine is measuring something real.

4b. Finalists across all four cells (tune/OOS × fixed/PIT)

The bias check was decisive. Headline survivor — regime_ls, L21, N3:

Universe Period Trades Win PF Return Max DD Sharpe
FIXED Tune 252 56.3% 1.55 +176.5% −9.2% 2.25
FIXED OOS 66 45.5% 1.13 +5.5% −25.3% 0.51
PIT Tune 258 51.6% 1.24 +61.7% −31.8% 0.88
PIT OOS 66 59.1% 1.26 +19.8% −20.9% 1.07

Under the honest PIT universe it is positive and consistent in both periods — the same ~1.25 profit factor in and out of sample.

The look-ahead trap, caught explicitly: the long-only / fast-lookback variant (L14, N4) showed +831% OOS on the FIXED universe — and −56% OOS under PIT. Pre-loading 2026's winners and going long-only trivially "predicts" them; rerun honestly, it collapses. Variants C and D also looked great in one cell but failed either the tune set or the bias check, so we could not claim we'd have selected them. The fixed/biased universe is unreliable, not merely optimistic.

4c. Robustness (PIT, neighbourhood sweep around the survivor)

4d. OOS 2026 monthly (PIT, headline variant)

Jan +18.5% · Feb +0.0% (flat — BTC regime off) · Mar +22.1% · Apr −20.9% · May +4.7% · Jun ~0% (partial). Last ~14 days: −4.2% (currently in a drawdown).


5. Honest conclusion

A modest, real-looking edge: regime-gated long/short 21-day momentum, ~1.25 profit factor net of full costs, consistent across tune and OOS, robust to parameter choice. This is the first strategy in the project to pass validation rather than fail it.

Caveats I won't bury: 1. OOS is statistically thin. 66 trades / ~23 weeks; OOS-only t-stat ≈ 0.7 (not significant alone). Confidence comes from tune+OOS agreement and the parameter plateau, not 2026 by itself. 2. The +100%+ figures in some neighbour cells are inflated by a short, momentum-friendly 2026 window. Treat the conservative center (PF ~1.25) as the expectation. 3. It is really a bull-market alt-dispersion strategy — flat in BTC downtrends (no edge, no loss). Its worst month (Apr −21%) was a bull-regime whipsaw the filter did not catch.

Recommendation: worth a forward paper-trade (log weekly picks, track live) before any capital. Two open questions for next time: (a) what caused the April whipsaw and whether a second filter fixes it without overfitting; (b) whether a volatility-scaled position size lifts the risk-adjusted return.

Status: PASS (provisional, pending forward test).