Does anything beat buy & hold on Cotton (CT)?
Every setup we tested on Cotton (CT) — ranked out-of-sample, corrected for multiple testing, and forward-tracked in public from the day this page published. The honest answer is the headline.
Beat buy-and-hold in both windows — but can't be told apart from selection luck.
Beat buy-and-hold in both the full window and out-of-sample but its OOS Sharpe 0.65 did not clear the 1.28 selection hurdle (best-of-N luck cannot be ruled out). Buy-and-hold benchmark: +1.4% CAGR over 26.8 years (+0.3% CAGR in the out-of-sample window).
Educational research from historical backtests — not investment advice. Past performance does not predict future results.
Cotton: the winner beat buy-and-hold in both windows — and still can't shake the luck problem
In Cotton, buy-and-hold is a harder benchmark than it looks: roll costs drag on returns, macro regimes flip the rules mid-game, and prices can go nowhere for years. Against that backdrop, we ran 754 indicator configurations on CT. The best, Detrended Price Osc. on the weekly timeframe, beat buy-and-hold in both windows — +2.9% annualized edge over the full period, +10.7% out of sample against a buy-and-hold CAGR of +1.4%. Over 8.1 out-of-sample years it took 169 trades, won 53.8% of them, and drew down -68.5% at worst.
Here is the honest read. When you test 754 setups and keep the best one, the winner looks good by construction — even on pure noise. Our correction for that selection effect sets a Sharpe hurdle of 1.28, and this setup's out-of-sample Sharpe of 0.65 falls short. Statistically, we cannot distinguish it from the luckiest of hundreds of tries. It also has company: 39.4% of setups edged buy-and-hold, which tends to happen when one regime dominated the sample. Of everything tested, 648 produced enough trades to grade at all. Macro regimes rotate, and a rule tuned to one rarely survives the next. Past performance does not predict future results.
Every figure above is computed from our own backtests — nothing is estimated or invented. Hypothetical results; not investment advice.
The setups that ranked, and what they are
Fully mechanical — no discretionary steps, no hidden filters. We name the indicator and publish its record; we keep the settings.
Detrended Price Osc.
What it is: An oscillator rule: it reads a bounded momentum gauge and takes exposure when it turns from an extreme. Long/flat only — no leverage, no shorting. The parameters we tested are not published.
How it was tested: signals evaluated at weekly-bar close, the position changes on the NEXT bar, 0.08% cost per side. Same engine, same cost model, same out-of-sample split as every other number on this site.
Out-of-sample (last ~30% of the window, never used to pick this setup): Sharpe 0.65 · alpha +10.7% · 55 trades over 8.1 yrs.
On-Balance Volume
What it is: A trend-following rule: it holds while a smoothed trend reference is pointing up and goes flat when it turns. Long/flat only — no leverage, no shorting. The parameters we tested are not published.
How it was tested: signals evaluated at weekly-bar close, the position changes on the NEXT bar, 0.08% cost per side. Same engine, same cost model, same out-of-sample split as every other number on this site.
Out-of-sample (last ~30% of the window, never used to pick this setup): Sharpe 0.6 · alpha +7.0% · 17 trades over 8.1 yrs.
Range Filter
What it is: A trend-following rule: it holds while a smoothed trend reference is pointing up and goes flat when it turns. Long/flat only — no leverage, no shorting. The parameters we tested are not published.
How it was tested: signals evaluated at weekly-bar close, the position changes on the NEXT bar, 0.08% cost per side. Same engine, same cost model, same out-of-sample split as every other number on this site.
Out-of-sample (last ~30% of the window, never used to pick this setup): Sharpe 0.6 · alpha +4.9% · 20 trades over 8.1 yrs.
Since publication — including if it loses
Buy-and-hold is ahead so far — we publish that too. That is the point. Marked to market nightly from real prices, rules frozen at publication, as of 2026-10-26. Currently FLAT.
We tested 754 setups (indicator × parameters × timeframe) on Cotton (CT). Only setups with ≥30 trades qualify (648 did). Setups are ranked by out-of-sample Sharpe — the last ~30% of history, which standard-parameter rules never saw during selection. Because picking the best of 754 tries mines even the holdout, the VALIDATED verdict additionally requires the top setup’s OOS Sharpe to clear a selection hurdle of 1.28 (√(2 ln N)/√T) AND positive alpha in both windows. Of the eligible setups, 39.4% had positive out-of-sample alpha (median OOS Sharpe 0.07) — the table below is truncated, but this summary covers all of them. How we test: methodology. The scoring contract is published in full; the parameters of each individual setup are not.
Top 20 of 648 eligible setups
Ranked by out-of-sample Sharpe. Full + out-of-sample columns, costs included. Hypothetical.
| # | Setup | TF | Total ret | Sharpe | Max DD | Win | Trades | α vs B&H | OOS Sharpe | OOS α | OOS trades |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Detrended Price Osc. | Weekly | +210.2% | 0.3 | -68.5% | 53.8% | 169 | +2.9% | 0.65 | +10.7% | 55 |
| 2 | On-Balance Volume | Weekly | +143.4% | 0.27 | -72.3% | 44.4% | 81 | +1.9% | 0.6 | +7.0% | 17 |
| 3 | Range Filter | Weekly | +82.3% | 0.25 | -36.3% | 47.4% | 95 | +0.8% | 0.6 | +4.9% | 20 |
| 4 | FRAMA 100 Trend | Weekly | +201.3% | 0.31 | -55.9% | 44.1% | 118 | +2.8% | 0.54 | +7.5% | 37 |
| 5 | Morning Star | Daily | +7.6% | 0.09 | -49.0% | 45.0% | 238 | -1.4% | 0.51 | +4.7% | 65 |
| 6 | UT Bot (ATR Trailing) | Weekly | +146.5% | 0.27 | -66.2% | 43.5% | 92 | +2.0% | 0.5 | +7.2% | 23 |
| 7 | Zero-Lag MACD | Weekly | -23.0% | 0.06 | -83.9% | 42.9% | 126 | -2.4% | 0.48 | +6.8% | 36 |
| 8 | Chaikin Oscillator | Weekly | -41.1% | -0.03 | -77.5% | 40.6% | 64 | -3.4% | 0.48 | +5.3% | 17 |
| 9 | A/D Oscillator | Weekly | -41.1% | -0.03 | -77.5% | 40.6% | 64 | -3.4% | 0.48 | +5.3% | 17 |
| 10 | TEMA 20/50 Cross | Daily | -19.5% | 0.07 | -84.6% | 36.0% | 161 | -2.5% | 0.45 | +6.7% | 42 |
| 11 | Delta Volume (CVD proxy) | Daily | -81.3% | -0.25 | -91.5% | 37.0% | 300 | -7.8% | 0.45 | +5.6% | 86 |
| 12 | Volatility Regime (VIX-style) | Weekly | +277.8% | 0.42 | -39.9% | 44.9% | 49 | +3.7% | 0.45 | +4.3% | 14 |
| 13 | Order-Flow Reversion | Daily | -21.6% | -0.01 | -58.1% | 62.9% | 70 | -2.6% | 0.45 | +3.1% | 18 |
| 14 | Chandelier Exit | Weekly | +330.1% | 0.36 | -61.8% | 44.1% | 59 | +4.2% | 0.44 | +6.9% | 12 |
| 15 | Trade Volume Index | Daily | +84.6% | 0.22 | -77.1% | 35.2% | 261 | +0.7% | 0.43 | +5.5% | 72 |
| 16 | Zero-Lag LSMA | Weekly | -25.2% | 0.05 | -70.3% | 46.4% | 97 | -2.5% | 0.42 | +6.1% | 25 |
| 17 | CCI (200) | Daily | +202.2% | 0.3 | -59.0% | 25.3% | 75 | +2.6% | 0.42 | +5.9% | 13 |
| 18 | Historical Volatility Regime | Weekly | +255.1% | 0.39 | -42.6% | 44.2% | 43 | +3.4% | 0.42 | +4.3% | 13 |
| 19 | Donchian 10 Break | Daily | +55.5% | 0.18 | -68.9% | 39.9% | 148 | 0.0% | 0.41 | +5.6% | 40 |
| 20 | Premier Stochastic | Weekly | +92.9% | 0.22 | -53.6% | 36.5% | 52 | +1.1% | 0.41 | +5.2% | 16 |
Hypothetical backtests with 0.08%/side costs. Not investment advice — see the full disclaimer.
These are historical backtests of mechanical rules. They are educational research, not investment advice, not a recommendation, and not tailored to you. Educational information only — not investment advice. Hypothetical backtested results; past performance does not guarantee future results. Trading involves risk of loss.