Buy the crops that have historically done well in the coming month and sell those that have done badly. It looked like the best result in the project until the price data itself turned out to produce the pattern.
Withdrawn after audit. Repeating the same trades on exchange-traded funds, which hold real contracts and pay real costs, cut return-for-risk from 0.80 to 0.34. The pattern was largely an artefact of how free price histories stitch expiring contracts together.
Agricultural futures carry persistent calendar-month seasonality that can be harvested cross-sectionally.
Sharpe 1.16, confidence interval [0.74, 1.60], design half 1.26 and holdout 1.10, best five months only 17.6% of profit. It survived deflation against all 560 trials the project had run — the harshest correction available here.
That result warranted scrutiny, and the concern has a specific form. A futures contract expires every few months, so a long price history is really many short ones stitched together. The stitches happen on a calendar. A strategy that trades the calendar could easily be trading the stitches.
So the same four commodities were checked against exchange-traded funds that hold the real contracts and pay the real cost of rolling from one to the next.
A new rule was added afterwards: a result does not count if the returns could not actually have been earned. Changing the rules after seeing the answer is usually cheating, so this one is allowed to do only one thing — take results away. It can never hand one out.
What remains is not nothing. The investable version is weakly positive, and in line with what others have reported for crop seasonality. Fifteen years of fund history is simply too little to prove it either way. That is a limit of the data, not a verdict on the idea.
| Earned on | Months | Ann. return | Sharpe | t |
|---|---|---|---|---|
| Spliced futures (what the backtest saw) | 178 | +17.7% | +0.80 | 3.09 |
| ETFs (what an investor could hold) | 178 | +5.5% | +0.34 | 1.31 |
The strategy did not find seasonality in crops. It found seasonality in how the price series was assembled.
| Measure | Value |
|---|---|
| Annualised return | 12.0% |
| Annualised volatility | 10.4% |
| Return for risk taken | 1.16 |
| 95% range | 0.74 to 1.60 |
| t-statistic | 4.90 |
| Maximum drawdown | 12.8% |
| Hit rate | 64.3% |
| Annual turnover | 19.39× |
| Return skew | (0.05) |
| Return kurtosis | 2.99 |
| Diagnostic | Value | Reads as | Bad | Okay | Yay | Hmm |
|---|---|---|---|---|---|---|
| Design half (pre-2015) | 1.26 | return for risk | ≤ 0 | 0 – 0.40 | ≥ 0.40 | |
| Holdout half (2015+) | 1.10 | return for risk | ≤ 0 | 0 – 0.40 | ≥ 0.40 | |
| Top-5-month share of profit | 17.6% | how much rode on a few months — lower is better | ≥ 40% | 25 – 40% | < 25% | |
| Top-2-year share of profit | 24.7% | concentration | — | — | — | |
| Distinct trading episodes | 1 | how many independent runs this really is | < 50 | 50 – 100 | ≥ 100 | |
| Chance the edge is real | 100.0% | non-normality corrected | — | — | — | |
| Chance it beats the whole search | 97.6% | chance of beating the whole search by luck | — | — | — |
| Check | What it asks | Result |
|---|---|---|
| 1 | Reward large enough for the risk | pass |
| 2 | Confidence range clear of zero | pass |
| 3 | Profit not concentrated in a few months | pass |
| 4 | Worked in both halves of the history | pass |
| 5 | Beat buying and holding | pass |
| 6 | Stood out from the whole search | pass |
| Year | Net return |
|---|---|
| 2008 | 1.0% |
| 2009 | 13.3% |
| 2010 | 17.8% |
| 2011 | 1.9% |
| 2012 | 14.2% |
| 2013 | 14.1% |
| 2014 | 25.2% |
| 2015 | 21.4% |
| 2016 | (0.7%) |
| 2017 | (3.0%) |
| 2018 | 3.4% |
| 2019 | 9.5% |
| 2020 | 18.2% |
| 2021 | 7.1% |
| 2022 | 26.6% |
| 2023 | 12.8% |
| 2024 | 26.3% |
| 2025 | 9.1% |
| 2026 | (4.4%) |
| Measure | Value |
|---|---|
| Best years | 2022:+27%, 2024:+26%, 2014:+25% |
| Worst year | 2026:-4% |
| Rev | Stage | Status | Change |
|---|---|---|---|
| 01 | Draft | — | Direction and pass/fail criteria fixed before the run |
| 02 | Tested | Validated | Passed every check, including the penalty for how many ideas were tried |
| 03 | Audited | Voided | Repeating the trades on real funds showed the returns could not actually have been earned |