Long-only inverse-volatility agri equities

The comparison portfolio for the farming-company strategies: own the whole basket continuously, measured against each company's home market so it is a bet on the companies rather than on shares in general.

Conclusion: Control

A benchmark, not a candidate. Held continuously it returned 1.7% a year at 13.4% volatility, with a worst fall of 97.0% over 629 months. Strategies are measured against this.

Figure 1 · Growth of $1

1974–2026 · net of 15bp round-trip costs
What one dollar became, after costs: $2.44 by 2026. Shown against S&P 500, rebased to the same starting dollar.
Return for risk
0.13
range (0.16) to 0.43
Ann. return
1.7%
volatility 13.4%
Max drawdown
97.0%
over 629 months
Beats the search
0.0%
chance, after correction

Method

Hypothesis

Returns arrive benchmark-adjusted, so this answers 'does ag equity beta versus the local index pay anything at all' before any climate claim is made.

Rule

UNIVERSE = the agribusiness equities, benchmark-adjusted
function positions(bar):
# no signal, no timing: always fully invested
for symbol in UNIVERSE:
w[symbol] = 1 / vol_36m(symbol, bar.prev) # equal risk
return w
# ── 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

1974-02 – 2026-06 · 629 months, 629 invested
MeasureValue
Annualised return1.7%
Annualised volatility13.4%
Return for risk taken0.13
95% range(0.16) to 0.43
t-statistic0.92
Maximum drawdown97.0%
Hit rate50.1%
Annual turnover0.37×
Return skew0.01
Return kurtosis5.79
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.14return for risk≤ 00 – 0.40≥ 0.40
Holdout half (2015+)0.03return for risk≤ 00 – 0.40≥ 0.40
Top-5-month share of profit76.7%how much rode on a few months — lower is better≥ 40%25 – 40%< 25%
Top-2-year share of profit77.9%concentration
Distinct trading episodes1how many independent runs this really is< 5050 – 100≥ 100
Chance the edge is real82.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
+41%-41%
YearNet return
197429.4%
1975(16.0%)
1976(11.3%)
19777.6%
197821.1%
197916.1%
19802.1%
1981(12.2%)
1982(3.6%)
19835.7%
1984(0.5%)
1985(7.4%)
1986(3.9%)
198718.3%
19889.7%
19899.1%
1990(9.6%)
199114.7%
1992(16.1%)
19935.7%
1994(0.7%)
1995(1.9%)
19968.7%
1997(11.2%)
1998(40.9%)
1999(18.7%)
200011.3%
200117.2%
200227.3%
20034.7%
200414.2%
2005(4.2%)
20068.9%
200740.0%
2008(18.4%)
20093.0%
20105.3%
2011(10.6%)
2012(2.9%)
2013(8.3%)
20144.3%
20155.2%
20166.0%
2017(5.9%)
20183.1%
2019(5.4%)
20201.1%
202111.2%
202211.9%
2023(8.2%)
2024(7.8%)
2025(7.2%)
2026(1.1%)

Table 4 · Concentration detail

MeasureValue
Best years2007:+40%, 1974:+29%, 2002:+27%
Worst year1998:-41%

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.
DNL.AXDyno Nobel — listed on ASX, in AUD.
RIC.AXRidley Corporation — 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.
UPL.NSUPL Limited — listed on NSE, in INR.
M&M.NSMahindra & Mahindra — listed on NSE, in INR.
ESCORTS.NSEscorts Kubota — listed on NSE, in INR.
list truncated in the source record

Sample

1974-02 – 2026-06 · 629 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
02TestedControlBenchmark, not scored against the criteria
algorithmic-trading-anthology-july-2026-c4-eq-long | d/rksci