SAM innovation sizing the high-conviction agri L/S

Over 27 years it returned about -0% a year. The plausible range of outcomes still includes doing nothing at all.

Conclusion: Failed

Failed: the 95% range spans zero. Indicative performance of (0.1%) a year at 6.9% volatility, return for risk taken (0.01) (95% range (0.35) to 0.35).

Figure 1 · Growth of $1

1999–2026 · net of 15bp round-trip costs
What one dollar became, after costs: $0.98 by 2026. Shown against S&P 500, rebased to the same starting dollar.
Return for risk
(0.01)
range (0.35) to 0.35
Ann. return
(0.1%)
volatility 6.9%
Max drawdown
42.4%
over 327 months
Beats the search
0.0%
chance, after correction

Method

Hypothesis

Lowest raw shift-test p in the deep study (0.0026).

Rule

UNIVERSE = 29 high-conviction agricultural names
function positions(bar):
z = zscore(feature(sam_shock), expanding)
size = clip(z / 2, -1, 1)
for symbol in UNIVERSE:
w[symbol] = declared_sign(symbol) / vol_36m(symbol, bar.prev)
return w * size
# ── execution ────────────────────────────────────────────────────────
COST_PER_TRADE = 15 bps of the notional that changes hands
function on_bar(bar, book):
if not bar.is_month_end:
return # decisions are made monthly only
target = positions(bar) # the rule above
target = scale_to_gross(target, 1.0)
rebalance(book, target, bar)
function scale_to_gross(w, limit):
gross = sum(abs(w)) # total capital at work
if gross == 0:
return w # flat is a valid target
return w * limit / gross # leverage fixed, never implicit
function rebalance(book, target, bar):
for symbol in union(book.symbols, target.symbols):
delta = target[symbol] - book.weight(symbol)
if delta > 0:
buy(symbol, delta, fill = next_bar.close)
else if delta < 0:
sell(symbol, -delta, fill = next_bar.close)
book.charge(COST_PER_TRADE * abs(delta))
# Orders are filled at the next month's close, never the one the decision
# was made on. There is no stop_loss(), take_profit(), limit order or
# position cap: a holding changes only when positions() returns a
# different target at the next month end.

Evaluation

Table 1 · Performance

1999-04 – 2026-06 · 327 months, 327 invested
MeasureValue
Annualised return(0.1%)
Annualised volatility6.9%
Return for risk taken(0.01)
95% range(0.35) to 0.35
t-statistic(0.05)
Maximum drawdown42.4%
Hit rate50.2%
Annual turnover12.45×
Return skew0.06
Return kurtosis5.67
The range is measured by resampling the history in blocks, so runs of good and bad months stay intact.

Table 2 · Robustness

DiagnosticValueReads asBadOkayYayHmm
Design half (pre-2015)0.06return for risk≤ 00 – 0.40≥ 0.40
Holdout half (2015+)(0.17)return for risk≤ 00 – 0.40≥ 0.40
Top-5-month share of profit(1,929.8%)how much rode on a few months — lower is better≥ 40%25 – 40%< 25%
Top-2-year share of profit(1,181.3%)concentration
Distinct trading episodes1how many independent runs this really is< 5050 – 100≥ 100
Chance the edge is real48.1%non-normality corrected
Chance it beats the whole search0.0%chance of beating the whole search by luck
bad/ok boundary is the pre-registered criterion · ok/good is a margin above it, not a criterion · blank where none was registered
The last row asks whether the result would stand out from the hundred-odd ideas tried here, rather than being judged alone.

Table 3 · Net return by calendar year

after costs
+18%-18%
YearNet return
199911.6%
2000(18.0%)
2001(0.3%)
2002(14.5%)
20034.0%
20044.2%
2005(3.4%)
20062.7%
20074.8%
20088.5%
2009(0.4%)
2010(6.4%)
20115.8%
20128.9%
20134.2%
2014(3.6%)
20151.6%
2016(3.8%)
20175.4%
2018(2.1%)
20198.3%
2020(7.5%)
20218.3%
2022(6.2%)
2023(0.4%)
2024(5.8%)
2025(5.8%)
2026(1.7%)

Table 4 · Concentration detail

MeasureValue
Best years1999:+12%, 2012:+9%, 2008:+9%
Worst year2000:-18%

Reference

Instruments

last price and one-month change, live from Yahoo Finance
SymbolNotes
GNC.AXGrainCorp — listed on ASX, in AUD.
ELD.AXElders — listed on ASX, in AUD.
NUF.AXNufarm — listed on ASX, in AUD.
AAC.AXAustralian Agricultural Company — listed on ASX, in AUD.
BALRAMCHIN.NSNot in the instrument table.
TRIVENI.NSTriveni Engineering & Industries — listed on NSE, in INR.
DHAMPURSUG.NSNot in the instrument table.
COROMANDEL.NSNot in the instrument table.
CHAMBLFERT.NSNot in the instrument table.
M&M.NSMahindra & Mahindra — listed on NSE, in INR.
ESCORTS.NSEscorts Kubota — listed on NSE, in INR.
ZW=FChicago SRW Wheat — continuous futures on CBOT, quoted in US cents.
ZM=FSoybean Meal — continuous futures on CBOT, in USD.
ZR=FRough Rice — continuous futures on CBOT, in USD.
list truncated in the source record

Sample

1999-04 – 2026-06 · 327 months

Sources

NOAA Physical Sciences Laboratory. Climate indices. ONI, Niño 3.4, MEI v2, DMI, PDO, AMO, TNA, QBO, solar flux. psl.noaa.gov/data/climateindices/list
Queensland Department of Agriculture and Fisheries. Southern Oscillation Index. The Long Paddock. Monthly, 1876–. www.longpaddock.qld.gov.au/soi/soi-data-files
Yahoo Finance. Historical market prices. Adjusted close, month-end. Retrieved with yfinance. finance.yahoo.com

Revision history

RevStageStatusChange
01DraftDirection and criteria fixed before the experiment ran
02TestedFailedBenchmark, not scored against the criteria
algorithmic-trading-anthology-july-2026-s2-sam-agri-ls | d/rksci