Prediction bot scorecard

In plain words: replayed on history since 2013, the bot’s rule was right 47.6% of the time, no better than a coin flip. I publish its calls anyway, graded by code, so you can hold any market call to the same test. The 12 open calls are not graded until Nov 2, 2026 or later, on that day’s close only.

A simple statistical bot calls whether corn, soybeans, Chicago wheat and KC wheat will close higher or lower about four weeks out, one call per crop after each weekly CFTC report. Code grades every call against Yahoo Finance daily closes, and nobody picks which calls count. The timing rules, and why the four Oct 5 entry prices were set by hand, are under How the arithmetic works.

Live record

Not enough calls yet.

0 graded so far. A rate is shown from 40 graded calls and 30 non-overlapping windows. Record as of Oct 27, 2026.

12 calls are waiting for their grading day. The first live calls are made at the Oct 5, 2026 close and graded four weeks later.

Backtest

No better than a coin flip; below half in 4 of 5 ways of counting, and worse than always saying down.

Jan 7, 2013 to Aug 31, 2026. Right on 1,301 of 2,736 weekly calls (47.6%). Across four non-overlapping groups of calls: 44.6% to 51.2% (170 windows).

Odds pure guessing does at least this well: about 96 in 100; at least this badly: about 4 in 100 (about 10 in 100 after adjusting for the records tested at once).

Always saying down: 51.1%. Always saying up: 48.9% (2,736 weekly calls).

The two boxes are kept apart on purpose. The backtest is the rule replayed on 2013–2026 history. The live record is calls made in public before the outcome was known. Adding them together would let old history prop up the live number.

Latest calls

Made at the Oct 26, 2026 close.

CropCallContractEntry closeGrades onWhere it stands (not graded)Why
CornDownDec '26$4.55Nov 23, 2026Shows after the bot’s next run13-week trend down (-3.8% over 13 weeks). Funds at the 79th percentile of the last 156 reports, not in the top or bottom tenth, so the trend decides
SoybeansDownJan '27$12.535Nov 23, 2026Shows after the bot’s next run13-week trend down (-1.2% over 13 weeks). Funds at the 89th percentile of the last 156 reports, not in the top or bottom tenth, so the trend decides
Chicago wheatDownDec '26$6.155Nov 23, 2026Shows after the bot’s next run13-week trend down (-9.5% over 13 weeks). Funds at the 74th percentile of the last 156 reports, not in the top or bottom tenth, so the trend decides
KC wheatDownDec '26$6.585Nov 23, 2026Shows after the bot’s next run13-week trend down (-11.7% over 13 weeks). Funds at the 81st percentile of the last 156 reports, not in the top or bottom tenth, so the trend decides

Where it stands is the latest close of the same contract, read by the bot after each run. It is not a grade: a call is graded on its grading day’s close only, and nothing in that column is ever counted.

Next calls: at the Oct 26, 2026 close, on the Oct 20, 2026 report.

By crop

CropLive, rightLive windowsBacktest, rightBacktest, non-overlappingBacktest verdict
Corn0 gradedn/a347 of 684 (50.7%)49.1%–51.8% (170 windows)No better than a coin flip.
Soybeans0 gradedn/a318 of 684 (46.5%)43.3%–50.6% (170 windows)No better than a coin flip; below half in 4 of 5 ways of counting, and worse than always saying up.
Chicago wheat0 gradedn/a330 of 684 (48.2%)45.0%–54.7% (170 windows)No better than a coin flip; below half in 4 of 5 ways of counting, and worse than always saying down.
KC wheat0 gradedn/a306 of 684 (44.7%)39.8%–48.5% (170 windows)No better than a coin flip; below half in 5 of 5 ways of counting, and worse than always saying down.

The rule

Written down on 2026-10-03, and backtested once that day, before the first live call, as rule set bot-v1.1. The backtest came out no better than a coin flip and is published as such. On 2026-10-05, after that day’s close and before the first live call was written, the timing was corrected so live calls match what was backtested (one call per report, the release date for holiday weeks, shutdown weeks skipped); the direction rule did not change. Any later change gets a new version number and a new record of its own.

  1. Crowding first. Take managed money's net position (CFTC) as a share of open interest, from that week's report. Rank it against the 156 reports before it, about three years. This is the bot’s own rule, not the site’s measure of crowded: the COT page ranks the same share against every week since 2010 and calls funds crowded only in the top or bottom tenth of that whole record (90th/10th percentile, on the side the position is on), and it makes no forecast from it; its own tests find no timing signal. Under the bot’s rule, at or above the 90th percentile of the three years: call down. At or below the 10th: call up.
  2. Otherwise, trend. If the roll-repaired front-month index (Yahoo’s continuous futures with the jump at each contract change removed) is higher than 13 weeks ago, call up; lower, call down; exactly flat, no call.
  3. Grade. An up call is right when the close at the exit (the entry close of the report 4 weeks later) is above the entry close. A down call is right when it is below. A close equal to the entry is a miss.

There is no seasonal signal. The seasonal figures the site has are built from all years at once, so using them would grade 2013 with knowledge from 2026.

How the arithmetic works

Sources, dates, units and conventions
Live prices
Daily closes of the named contract (for example Dec ’26 corn), from Yahoo Finance daily bars. The call is made after the close, before the 7 PM Central evening reopen, from that day’s reading; its entry price is then replaced once, on the next run, by the day’s bar as Yahoo restates it, and the log notes any change. A call is graded on the run after its exit day, from the restated exit bar. Yahoo’s bars are not the exchange’s settlement file. The Oct 5, 2026 calls were first read at 8:34 PM, after the reopen; each note says how the entry was set. Grains are quoted in cents per bushel; the page shows them in dollars. The contract is the first listed month still trading on the grading day, so no live call spans a contract roll.
Entry and exit days
Entry: the close of the first business day after CFTC published the report that is not a federal holiday. Federal holidays are skipped even when CME trades (Columbus Day, Veterans Day), and a day CME is closed moves the entry to its next session. Exit: the entry close of the report four weeks later. Both are fixed when the call is made. Release dates: scripts/cot_calendar.py. CFTC publishes on the Friday of the report week at 3:30 PM Eastern, after grains settle; a federal holiday delays it. Reports held back by a government shutdown (2013, 2018–19, 2025) are skipped, because their real release dates are not all known.
Positioning
CFTC Disaggregated Futures-Only Commitments of Traders, managed money long minus short, divided by open interest. A report counts from the close of the first non-holiday business day after CFTC published it (it lands at 3:30 PM Eastern, after grains settle; a federal holiday delays it).
Backtest prices
The roll-repaired front-month index in data/cot-deep.json: Yahoo's continuous series with the return across each contract change dropped. It is an index, not a price. One call per weekly report, same entry and exit days as live. Decisions whose grading day falls after 2026-10-02 are left out, so the backtest never overlaps the live record. The continuous series follows Yahoo's own roll, which can differ by a few days from the exchange calendar the repair uses.
Overlap, counted every way
Weekly calls on a four-week window overlap, and the four crops on one report are one bet on one month of markets. So the record is counted every way: all calls, tested with a Newey–West test that allows for the overlap; and four disjoint groups, by report week counted mod 4, in which no two calls on the same crop overlap; the four crops on one report share one window. The page prints the range across the four groups. Picking one group would let the luckiest stand in for all.
Coin-flip odds
The chance that pure guessing does at least as well, from the Newey–West test on all calls. Five records are tested at once (all crops together and each crop), so the odds are adjusted with the Benjamini–Hochberg method before any record is called a finding.
Baselines
How often the price fell, and rose, over the same windows: what a bot that always said down, or always said up, would have scored.
Minimum before a rate is shown
At least 40 graded calls and 30 non-overlapping four-week windows in time (crops on the same report share one window). Below that the page says “Not enough calls yet”.
Raw files
/data/predictions.json (calls, record, rule) and /data/predictions-backtest.json (every backtest call). Code: scripts/prediction_bot.py; its selftests carry hand-worked answers.
Last changed
2026-10-27 00:04:51 UTC

Every live call

MadeCropCallContractEntryExit closeGrades onResult
Loading the call log

Days with no call

-

The old call scorecard

Until October 2026 this address showed a scorecard of calls the morning briefing wrote for itself. It has been retired. For a few days in October 2026 the briefing's “The Action” line printed this bot's call; since October 9 the bot's calls appear only on this page.

Not financial or trading advice. A four-week direction call says nothing about where to price your grain. Verify prices with your elevator or broker. Questions: sig@agsist.com.