Validation · #361025 · Commodity futures
Nelson-Siegel curve dynamics
Exploiting the dynamics of commodity futures curves, 2023
The rule
Read the shape of each commodity's futures curve every day — how high it sits (level), how steeply it tilts (slope), and how much it bows (curvature) — then bet that whatever the shape did yesterday, it does again today. The slope book is the headline: when the front contract gained on the far one, buy that spread; when it lost, sell it. Claimed Sharpe 1.41 on 21 commodities over 1992–2019.
Fails
1.41→−0.56
claimed → measured Sharpe
1.41
Claimed Sharpeslope strategy, 21 commodities, 1992–2019 — said to survive costs and to be unrelated to known commodity risk factors
−0.56
Measured Sharpesame rules on exchange settlement curves, 16 commodities, 2010–2026; the curvature book is worse at −4.29, and the strategy loses in 15 of 17 years
−0.50
What the signal actually isdifferencing two near-identical contracts into a spread leaves mostly settlement noise — metals sit at −0.42 to −0.55 lag-1 autocorrelation, against the −0.50 pure noise produces by construction
Asset16 commodity futures — energy, grains, metals, meats, oilseeds, lumber
StrategyNelson-Siegel curve-change continuation, long/short spreads
Period2010–2026, daily (the paper's 1992–2019 window has no free data)
CostsBreakeven < 1bp at 1.37 one-way turnover/day
BenchmarkCommodity market, carry and 12-month trend factors
Assets tradedCL RB HO GC SI HG ZC ZW ZS LE…plus oats, soybean meal, soybean oil, feeder cattle, lean hogs and lumber — the nearest four contracts of each, so four points on every curve. The paper's other five (cotton, cocoa, coffee, orange juice, rough rice) have no free four-deep curve history.
The exact rules
| Each day, per commodity | → | Fit a Nelson-Siegel curve to the nearest FOUR contracts → a level, slope and curvature parameter |
| Form the signal | → | Take the one-day change in each parameter (Δlevel, Δslope, Δcurvature) — the curve's most recent move |
| Δslope > 0 (slope book) | → | Go LONG the calendar spread — long the front contract, short the 4th — betting the tilt keeps steepening |
| Δslope < 0 | → | Go SHORT that same spread |
| Δcurvature ≷ 0 (curvature book) | → | Long/short a butterfly — short front, long 2nd ×2, short 4th |
| Size the book | → | Equal-weight each side, dollar-neutral (long leg +50%, short leg −50%), rebalanced daily, held one day |
The backtest, re-run
Inside the model
- Position mix
- Dollar-neutral by construction — 5.5 long / 5.5 short of an average 10.9 names traded per day (a commodity drops out when its 4th contract is not quoted)
- Win rate
- 43.2% of days, 39.8% of months
- Skew / kurtosis
- +3.9 / 120 daily — the distribution is a long bleed punctuated by rare dislocation spikes, not a symmetric edge
- Best / worst day
- +6.65% / −3.10% · month +11.67% / −3.50%
- Annual returns
- 2010 −3.5 · 2011 −5.5 · 2012 −1.3 · 2013 −1.5 · 2014 −1.2 · 2015 −4.4 · 2016 −7.8 · 2017 −4.8 · 2018 −2.9 · 2019 −5.1 · 2020 +11.3 · 2021 −1.9 · 2022 −2.1 · 2023 −4.8 · 2024 −4.5 · 2025 −4.8 · 2026 +1.7 — negative in 15 of 17 years, with the one good year a COVID artefact
- Where the losses come from
- RBOB −1.27%/yr, silver −1.12, heating oil −1.11, copper −0.94 — precisely the markets whose curves are economically inert (metals are pure cost-of-carry) and therefore noise-dominated. Livestock and the soy complex, which have genuine term-structure dynamics, are mildly positive
- Turnover
- 1.37 units one-way per day over two spread legs — the cost problem is structural, not incidental
The validation ladder
| C0 | Replicate | Does not reproduce, under either decay specification. The slope book measures −0.56 against a claimed +1.41; curvature −4.29 against +1.27. The only claim that lands is the negative one — the level book is indeed unprofitable (−0.34). The wiring is verified causal: a one-day look-ahead trap explodes the Sharpe to +13.9, and shuffling the signal in time collapses it to +0.09. |
| C1 | Honesty | The book turns over 1.37 units one-way per day across two spread legs — roughly 344 units a year. Gross is already negative in the stated direction; even the flipped book, which harvests the bounce instead of paying it, goes from +0.56 gross to −0.30 at half a basis point and −1.17 at one. Deferred commodity spreads trade far wider than that. |
| C2 | Deflate | No configuration clears multiple testing (best t = −1.49, nothing near the t≥3 floor). Deflated Sharpe 0.00 against a 0.95 bar. PBO 0.64 — the in-sample-best of the three books more likely than not underperforms out of sample. |
| C3 | Crisis | Negative through the 2011 euro crisis (−2.73), the 2014–16 oil crash (−0.80) and the 2022 rate shock (−0.29); positive only in the 2013 taper and COVID-2020. Worst decade −1.07. The single positive year, 2020 at +11.3%, is a COVID dislocation artefact — the return distribution carries skew +3.9 and kurtosis 120. |
| C5 | Frictions | There is no breakeven in the stated direction because gross is already negative. In the flattering flipped direction breakeven is roughly half a basis point for the slope book and two for the curvature book — below any realistic commodity-spread cost. |
| C6 | Decay | Nothing to decay: −1.06 over the 2010–19 overlap with the paper's own sample, +0.12 in the 2019–23 gap, −0.90 after publication. It loses money in 15 of 17 calendar years. |
| C7 | Originality | Not original and not positive. Against commodity market, carry and 12-month trend factors the slope book earns α of −2.23%/yr at t = −2.72, R² 0.02. It is uncorrelated with the known factor set — it is simply losing money independently of it. |
| QA | Is it even a signal? | The decisive test. The daily change in a calendar spread has lag-1 autocorrelation of −0.55 for silver, −0.47 for copper, −0.42 for gold — against the −0.50 that differencing pure white noise produces by construction — while those same markets' front-contract returns are clean at roughly zero. Two near-identical contracts differenced into a spread leave a tiny quantity dominated by each leg's own settlement error. The effect dies at lag 2 (−0.56 → +0.35): a one-day bounce, not economics. |
Reproduces magnitudeReproduces directionStatistically realSignal is economic, not noiseCost-robustOriginal alphaCrisis-robustTestable on the paper's own sample
How we rebuilt it
- Data
- Exchange daily settlements (CME Globex, via Databento) assembled into continuous series under a declared calendar roll rule. Where a trend strategy needs one series per market, a term-structure strategy needs the whole near curve, so this paper added a four-points-per-curve adapter (contracts 1–4) plus each point's time to maturity, derived from the calendar roll ladder. Vintage databento_glbx_2026-07-17 plus the 4th-contract pull of 2026-07-19.
- Method
- Nelson-Siegel fitted daily to log prices (scale-free, so the signal is comparable across $3 corn and $2,600 gold), giving level, slope and curvature; the one-day change in each drives a dollar-neutral long/short book in the paper's own spreads — outright front, front-vs-4th calendar spread, and the front/2nd/4th butterfly.
- Decay parameter
- The paper specifies a decay 'estimated daily'. On its own four-point curve that parameter is not identifiable — the fit hops between values and the three factors absorb the wobble, which shows up as Δlevel, Δslope and Δcurvature acquiring identical autocorrelation. We therefore fix the decay (the standard treatment for sparse curves) and carry the paper's literal version as a fragility check. Both fail, in the same direction.
- Window
- The paper's 1992–2019 headline cannot be tested: no free pre-2010 commodity curve history exists. We measure 2010–2026 — which the paper itself describes as the weaker era, since it concedes the slope edge was concentrated before the 2000 CFMA and faded after.
Deviations from the paper
- Window: the paper's 1992–2019 sample is untestable on public data — there is no free pre-2010 commodity curve history. We measure 2010-08→2026-06. Since the paper itself reports the slope edge was strongest pre-CFMA and weakened after, our window is precisely the era it concedes is weak. This refutes the strategy as a live proposition on modern data; it does not refute the 1992–2019 backtest on its own terms.
- Universe: 16 of the paper's 21 commodities. Cotton, cocoa, coffee and orange juice are ICE softs with only two curve points and only from 2019; rough rice has no free series.
- Maturities: time-to-maturity is derived from the calendar roll ladder rather than exact contract expiries. A constant per-commodity offset is absorbed by the decay parameter and cancels in the day-to-day change.
- Fourth-contract coverage: the deferred contract is not quoted every day in thin markets — oats 50% of days, lumber 66%, gold 81%, silver 83%. Those names simply drop out of the book that day.
- Sign convention: the paper's slope-sign convention is ambiguous in its description. We verified our construction is internally coherent — the fitted slope change correlates +0.38 with the long-front/short-4th spread return, and the curvature change +0.68 with the butterfly — so it is a genuine continuation bet. We additionally report the flipped book, so the verdict does not depend on that reading.
- The 2020-04-20 negative WTI settlement is excluded from the log-price fit; the surrounding move is retained.
ProvenanceBeta
- Engine
- v1
- Blocks
- 3 new (four-point curve adapter with maturity ladder and cross-depth roll-clean returns, Nelson-Siegel fitter vectorised over days and decay grid, curve-change long/short strategy), 6 reused (metrics, multiple-testing, deflated Sharpe, PBO, regime, spanning)
- Data
- Exchange settlement curves, vintage databento_glbx_2026-07-17 + c3_2026-07-19 (CME Globex daily settlements, calendar roll rule, nearest four contracts), daily 2010-06→2026-06; measured 2010-08→2026-06
- Source
- arXiv 2308.00383 ↗ · Databento CME Globex daily settlements ↗
- Tests
- 6 known-value tests (Nelson-Siegel exact recovery at fixed decay, dense-curve recovery with free decay, vectorised ≡ per-point fit, flat-curve null, dollar-neutral sign weights, cross-depth roll identity) + negative controls (look-ahead trap +13.9, time-shuffle +0.09) + the roll identity verified through the negative-WTI week
- Reproduce
- view code ↗
Your library