←  Work

A trend strategy that doubled its Sharpe out of sample, and an overlay that gave back the return to keep it

EWMA and Donchian trend following across 23 commodity futures, then a walk-forward logistic overlay that decides when to take less risk.

Systematic strategy2026
Universe
23 commodities
Test Sharpe
1.03
Overlay drawdown
-8.66%
Costs
10bps modelled

The strategy

Two trend signals combined across 23 commodity futures in energy, metals and agriculture, from 1990. A 63 against 126 day EWMA crossover on cumulative log price, and a 20-day Donchian breakout held until the opposite bound fires. Channel bounds are lagged one day so no bar can see its own high.

Weights are volatility-scaled to a portfolio target and divided by the square root of the active count, then rebalanced monthly: every day in month M uses the weights fixed at the end of M-1. Train ends 31 December 2019; everything from January 2020 is out of sample and was never used for a design decision.

What it did

Training return was 11.21% at 21.16% volatility, Sharpe 0.53, against an equal-weighted commodity market factor at 3.04% and 0.24. Out of sample the strategy returned 25.74% at 24.96% volatility for a Sharpe of 1.03, against the market factor at 11.25% and 0.69.

Volatility rose between the two periods and the Sharpe ratio still nearly doubled, which is the part worth trusting. The improvement did not come from taking more risk.

Parameter sensitivity is the check on overfitting. Varying the fast EWMA span from 40 to 80 days moves training Sharpe only between 0.49 and 0.54. The Donchian window matters more, 0.41 at 10 days against 0.56 at 40, so the breakout component is the fragile one and I would not tune it further than this.

The overlay, and what it costs

A walk-forward logistic regression sits on top, trained monthly on lagged macro and strategy-state variables to score the probability that next month is positive. Regularisation is picked on a chronological held-out block inside each training window, with the scaler fitted only on the sub-training block so nothing leaks backward.

It is a risk overlay, not a return forecaster. Out of sample it cuts volatility from 24.96% to 6.29% and maximum drawdown from -27.84% to -8.66% net of costs, while holding a Sharpe of 0.91. The price is return: 25.74% becomes 5.70%.

The ex-post check is that the model reduces exposure in the right places without ever being shown crisis labels: average exposure scale of 0.29 through 2008, 0.28 in the 2011 euro crisis, 0.31 in the 2020 shock and 0.25 through the 2022 rate move.

The honest version

The full enhancement chain, continuous EWMA then an equity volatility filter then transaction costs, improves test Sharpe from 0.69 to 1.10 and cuts test drawdown from -40.90% to -14.48%, but it lowers training Sharpe from 0.53 to 0.30. Enhancements that help out of sample and hurt in sample are the ones I trust most, and the ones hardest to justify to someone reading only the training table.

Costs are modelled at 10bps on daily weight changes throughout. They are not a footnote: at baseline turnover they are the difference between a strategy and a backtest.

Sharpe ratio by period. The strategy improves out of sample; so does the market factor, but by less.
Maximum drawdown out of sample. The overlay gives up most of the return and buys a risk profile three times shallower.
Training-period Sharpe across nearby parameter settings. The EWMA spans are stable; the Donchian window is not.
Run it yourself

Run the momentum backtest yourself

A companion time-series momentum study on the same universe. Move the lookback from 1 to 24 months and the backtest, the drawdown, the sector attribution and the correlation matrix all recompute in your browser.

Next Momentum earns 7.5% a year and loses half of it in a month →