Does anything beat buy & hold on Soybeans (ZS)?
Every setup we tested on Soybeans (ZS) — 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.81 did not clear the 1.29 selection hurdle (best-of-N luck cannot be ruled out). Buy-and-hold benchmark: +3.7% CAGR over 26.2 years (+4.5% CAGR in the out-of-sample window).
Educational research from historical backtests — not investment advice. Past performance does not predict future results.
Soybeans: the winner beat buy-and-hold in both windows — and still can't shake the luck problem
In Soybeans, 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 748 indicator configurations on ZS. The best, Volume Oscillator on the weekly timeframe, beat buy-and-hold in both windows — +5.2% annualized edge over the full period, +3.2% out of sample against a buy-and-hold CAGR of +3.7%. Over 7.9 out-of-sample years it took 83 trades, won 59.0% of them, and drew down -23.4% at worst.
Here is the honest read. When you test 748 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.29, and this setup's out-of-sample Sharpe of 0.81 falls short. Statistically, we cannot distinguish it from the luckiest of hundreds of tries. It also has company: 13.4% of setups edged buy-and-hold, which tends to happen when one regime dominated the sample. Of everything tested, 659 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.
Volume Oscillator
What it is: A momentum rule: it holds while rate-of-change stays positive and steps aside when it rolls over. 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.81 · alpha +3.2% · 28 trades over 7.9 yrs.
Vertical Horizontal 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 daily-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.8 · alpha +3.1% · 59 trades over 7.8 yrs.
Tweezer Bottom
What it is: A market-structure rule: it reacts to swing structure and prior levels rather than to a smoothed average. 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.75 · alpha +3.5% · 22 trades over 7.9 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-19. Currently LONG.
We tested 748 setups (indicator × parameters × timeframe) on Soybeans (ZS). Only setups with ≥30 trades qualify (659 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 748 tries mines even the holdout, the VALIDATED verdict additionally requires the top setup’s OOS Sharpe to clear a selection hurdle of 1.29 (√(2 ln N)/√T) AND positive alpha in both windows. Of the eligible setups, 13.4% had positive out-of-sample alpha (median OOS Sharpe 0.21) — 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 659 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 | Volume Oscillator | Weekly | +842.3% | 0.77 | -23.4% | 59.0% | 83 | +5.2% | 0.81 | +3.2% | 28 |
| 2 | Vertical Horizontal Filter | Daily | +123.2% | 0.32 | -30.1% | 44.8% | 203 | -0.6% | 0.8 | +3.1% | 59 |
| 3 | Tweezer Bottom | Weekly | +32.5% | 0.18 | -42.7% | 38.6% | 44 | -2.7% | 0.75 | +3.5% | 22 |
| 4 | Williams Fractals | Daily | +75.8% | 0.21 | -53.5% | 38.7% | 163 | -1.6% | 0.64 | +3.9% | 40 |
| 5 | T3 10/40 Cross | Daily | +261.3% | 0.38 | -47.8% | 43.4% | 76 | +1.3% | 0.63 | +3.2% | 21 |
| 6 | Stochastic (10,3) | Weekly | +349.0% | 0.41 | -37.5% | 51.9% | 160 | +2.2% | 0.62 | +3.2% | 47 |
| 7 | ADX Strong Trend | Daily | -24.7% | -0.02 | -60.8% | 41.8% | 110 | -4.9% | 0.62 | +1.0% | 26 |
| 8 | Bollinger Breakout | Daily | +164.1% | 0.35 | -41.0% | 42.6% | 108 | 0.0% | 0.61 | +1.4% | 32 |
| 9 | Markov Regime (Confirmed) | Weekly | +203.5% | 0.31 | -40.6% | 45.0% | 111 | +0.6% | 0.6 | +4.7% | 28 |
| 10 | Donchian 10 Break | Daily | -3.0% | 0.08 | -68.1% | 36.1% | 155 | -3.9% | 0.59 | +2.9% | 38 |
| 11 | RSI Mean-Reversion | Daily | +106.0% | 0.31 | -28.8% | 74.3% | 35 | -1.0% | 0.59 | +0.1% | 15 |
| 12 | Chaikin Money Flow | Weekly | +480.6% | 0.45 | -51.3% | 46.7% | 60 | +3.2% | 0.58 | +3.3% | 18 |
| 13 | Advance Trend Pressure | Daily | -28.9% | -0.0 | -76.4% | 40.3% | 345 | -5.1% | 0.58 | +1.5% | 102 |
| 14 | STARC Bands | Daily | +0.2% | 0.07 | -53.4% | 46.1% | 141 | -3.8% | 0.58 | +1.0% | 28 |
| 15 | Linear Regression Slope | Daily | +138.1% | 0.28 | -55.7% | 42.5% | 167 | -0.4% | 0.57 | +2.6% | 50 |
| 16 | Correlation Trend | Daily | +138.1% | 0.28 | -55.7% | 42.5% | 167 | -0.4% | 0.57 | +2.6% | 50 |
| 17 | Ichimoku TK Cross | Daily | +204.0% | 0.34 | -46.6% | 41.6% | 149 | +0.6% | 0.56 | +2.5% | 41 |
| 18 | Ehlers Reflex | Weekly | +352.0% | 0.43 | -39.9% | 51.2% | 43 | +2.2% | 0.55 | +2.1% | 14 |
| 19 | SMA 10/30 Cross | Daily | +169.9% | 0.31 | -55.6% | 48.5% | 130 | +0.1% | 0.54 | +2.2% | 34 |
| 20 | Accelerator Oscillator | Weekly | +293.6% | 0.4 | -38.8% | 49.3% | 71 | +1.6% | 0.54 | +1.8% | 21 |
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.