Validation · #361154 · Cross-asset futures
Graph-learning network momentum
Network Momentum across Asset Classes, 2023
The rule
Don't trade each asset on its own momentum — trade it on its neighbours'. Every day, build eight momentum signals for ~40 futures, then learn a graph that links assets whose momentum tends to move together. Each asset inherits a blended momentum from whatever it's wired to; a single regression turns that inherited signal into a long/short position, sized to equal risk and vol-targeted to 15%. The pitch: this cross-asset 'network momentum' beats trading each asset's own momentum — Sharpe 1.51 vs 1.13.
Overstated
1.51→0.62
claimed → measured Sharpe
1.51
Claimed SharpeGMOM network momentum, 64 futures, 2000–2022 — a +34% lift over trading each asset's own momentum (1.13)
0.62
Measured Sharpesame method on the 40-contract roll-adjusted panel, 2020–2026; the edge over individual momentum is +0.58 but t = 1.5 — a coin-flip's worth of significance
0.80
The rule it never showsa plain 12-month trend-follow scores 0.80 — it beats the graph-learning model on identical data
Asset40 futures — commodities, US equity, US Treasury, FX
StrategyGraph-learned network momentum, long/short
Period2020–2026, daily
CostsTurnover-based sweep (breakeven ≈ 2.2bps)
BenchmarkIndividual momentum + plain 12-month TSMOM
Assets tradedCL GC NG HG ZC ES NQ ZN 6E 6J…and 30 more roll-adjusted continuous futures: 26 commodities (energy, metals, grains, livestock, softs), 3 US equity indices, 4 US Treasuries, 7 FX majors. The paper's 64-contract Pinnacle universe adds global equity/bond indices with no free source; ours is US-only outside commodities and, like the paper's own panel, commodity-heavy.
The exact rules
| Each day, per contract | → | Compute 8 momentum features — vol-scaled returns over 1d/1m/3m/6m/1y + three normalised MACD speeds (Baz et al.) |
| Learn the network | → | Solve a convex graph-learning problem (Kalofolias log-degree) so assets with similar momentum histories get a positive edge; ensemble 5 look-back windows (1–5y), symmetric-normalise |
| Propagate | → | Each asset's network momentum = the edge-weighted average of its NEIGHBOURS' 8 features (never its own) |
| Predict & position | → | One cross-sectional OLS maps network features → next-day return; go long if the prediction is positive, short if negative |
| Size & scale | → | Equal-weight, each asset scaled to 15% vol, then the whole book vol-targeted to 15% annualised — rebalanced daily |
The backtest, re-run
Inside the model
- Position mix
- 63% long / 37% short across ~37 contracts traded per day — a net-long trend tilt
- Win rate
- 52.2% of days, 60.3% of months
- Skew / kurtosis
- −0.28 / 6.4 daily (−0.18 / 2.8 monthly) — a mild left tail, nothing exotic
- Best / worst day
- +6.0% / −5.7% · month +9.9% / −10.5%
- Annual returns
- 2020 −4 · 2021 +20 · 2022 −7 · 2023 +10 · 2024 +29 · 2025 +30 · 2026 +1 (H1) — the good years are all post-publication; in the paper's own 2020–22 window the plain trend rule made +18/+17/+17% while GMOM did −4/+20/−7
- The crux, tested
- GMOM − individual momentum = +0.58 Sharpe, but the paired daily t-stat is 1.49 — the paper's headline claim (network beats individual) is never significance-tested and doesn't clear the bar
- What the model actually loads on
- The dominant regression coefficient is the network-propagated 12-month return (t = 3.3) — cross-asset trend, relabelled as 'network momentum'
The validation ladder
| C0 | Replicate | The mechanism reproduces and is correctly wired (a one-day look-ahead trap explodes the Sharpe to 22; shuffling the network features collapses it to zero). The magnitude does not: GMOM 0.62 vs the claimed 1.51, return 9.0% vs 22.2% — though the max drawdown lands almost exactly (−19.5% vs −19.9%). Notably the paper's benchmark ordering only half-holds: individual-momentum LinReg is the worst row here (0.05), because on clean 2010s futures the 1-day own-return shows reversal, not momentum. |
| C1 | Honesty | High-turnover daily strategy: net Sharpe falls 0.62 → 0.34 (1bp) → 0.05 (2bp) → −0.24 (3bp). Breakeven ≈ 2.2bps, roughly matching the paper's own Fig-3b claim of 'positive to 3bps' — but every cost level trails the naive trend rule. |
| C2 | Deflate | Deflated Sharpe against the paper's 11×11 α,β grid: 0.74 — fails the 0.95 bar. No config in the look-back family clears multiple-testing (best t = 1.81, no FDR survivor, misses the t≥3 floor). PBO 0.71: the in-sample-best window/config more likely than not underperforms out of sample. |
| C3 | Crisis | No protection despite the 'effectively managed risk' pitch: −26%/yr through COVID, −4.7% through the 2022 rate shock, −73%/yr annualised through the SVB week (−11% in 21 days). Only the Aug-2024 yen unwind is positive. The strategy was weak in the paper's own 2020–2022 overlap and only shone 2024–2025. |
| C5 | Frictions | Breakeven ≈ 2.2bps one-way on turnover. Liquid futures trade ~1–3bps, so it's borderline-tradeable gross — but the plain 12-month TSMOM survives past 5bps and dominates GMOM at every cost level. |
| C6 | Decay | The network edge over individual momentum fades post-publication: uplift +0.91 (2020–22) → +0.28 (2023–26). GMOM's absolute return improves (0.19 → 0.99) — but so does individual momentum, and the naive trend rule stays ahead across the full out-of-sample. |
| C7 | Originality | No alpha over known trend. Against a plain cross-asset 12-month TSMOM: α 5.7%/yr at t = 1.05, R² 0.11 — insignificant, and TSMOM's level is higher. Against individual momentum: α 9.5%/yr at t = 1.91, just shy. The fitted model loads dominantly on network-propagated 12-month momentum (t = 3.3) — the much-advertised 'network' is a smoothing of neighbours' trend, not a distinct anomaly. |
Mechanism replicatesMagnitude replicatesNetwork beats individualStatistically realOriginal vs known trendCost-robustCrisis-robustBeats the naive benchmark
How we rebuilt it
- Data
- The roll-adjusted continuous-futures reference panel: exchange daily settlements (CME Globex / ICE, via Databento) assembled into continuous series under a declared open-interest roll rule and ratio back-adjusted at every roll, so returns are what a rolled position actually earns. 40 of the paper's 64 contracts across all four asset classes.
- Method
- Baz-et-al. 8 momentum features → Kalofolias log-degree graph learning (the paper's Eq 4, solved with the same CVXPY they use, on the open-source CLARABEL backend rather than commercial MOSEK — cross-checked to <1e-2 and exact on the 2-node closed form) → 5-window ensemble, symmetric-normalised → neighbour-averaged network features → cross-sectional OLS → sign → 15% vol target. Graphs learned daily.
- Universe
- 26 commodities + 3 US equity indices + 4 US Treasuries + 7 FX majors (vs the paper's 33 commodities + 13 global equity + 10 global FI + 8 FX). Softs enter 2019, so the tradeable set grows from 33 to 40 as history accumulates — the graph needs 5 years of features per node.
- Window
- A daily strategy with no free daily futures before 2010: the 5-year graph warm-up burns to ~2015, the regression trains 2015–2019, and the out-of-sample is 2020–2026 — 2020–2022 overlaps the paper's own test, 2023–2026 is true post-publication. The 2000–2022 magnitude is out of free-data reach.
Deviations from the paper
- Window: the paper's 2000–2022 daily backtest is unreproducible on public data — no free daily futures history exists before 2010-06 (commodity settlements start there; pre-2010 financials would be synthetic and monthly-only). We measure the mechanism and the relative claims on 2020–2026, not the 22-year level.
- Universe: 40 of 64 contracts across all four classes; the paper's global equity/bond index futures have no free source, so our equity/FI sleeves are US-only. The panel is commodity-heavy — as the paper's own is.
- Graph solver: the paper's Eq-4 convex program is solved with CVXPY on MOSEK (commercial); we solve the identical program with CVXPY on CLARABEL (open-source). Graphs learned daily, as the paper does — a weekly stride understates GMOM by ~0.1 Sharpe.
- α,β regularisers: the paper grid-searches 11×11 per period on a validation set; we select one pair on the first block's 2018–2019 validation slice and hold it. The choice barely matters — validation Sharpe ranges only 0.487–0.493 across the whole grid.
- Costs: the paper's Fig-3b pseudo-cost sweep on its turnover definition is replicated exactly; futures effective cost is ~1–3bps.
ProvenanceBeta
- Engine
- v1
- Blocks
- 3 new (Baz-8 momentum features + winsorisation, Kalofolias log-degree graph learner, network-momentum engine: ensemble graph + Eq-7 propagation + OLS→sign + vol-target), 6 reused (reference-panel adapter, metrics, G1/G2/G3 gates, regime, single-factor spanning)
- Data
- Roll-adjusted continuous-futures reference panel, vintage databento_glbx_2026-07-17 (CME Globex / ICE daily settlements, OI roll rule, ratio back-adjusted), daily 2010-06→2026-06; out-of-sample 2020-01→2026-06
- Source
- arXiv 2308.11294 ↗ · Databento CME Globex daily settlements ↗ · Databento ICE Futures US (softs) ↗ · Kalofolias (2016) — How to Learn a Graph from Smooth Signals ↗
- Tests
- 6 known-value tests (graph-learning 2-node closed form; CLARABEL ≡ independent primal-dual to <1e-2; Baz features; Eq-7 propagation; no-look-ahead portfolio proof) + negative controls (peek trap SR 22.3, feature-shuffle SR 0.01, α,β grid + daily-vs-weekly cadence robustness)
- Reproduce
- view code ↗
Your library