{
 "updated": "2026-10-27T00:04:51Z",
 "rules": {
  "version": "bot-v1.1",
  "registered": "2026-10-03",
  "revised": "2026-10-05",
  "revision": "Before the first live call: one call per report (live had been daily), release date fixed for Monday as-of weeks, shutdown weeks skipped, record counted every way. The direction rule is unchanged.",
  "horizon_reports": 4,
  "horizon_label": "4 weeks",
  "trend_lookback_weeks": 13,
  "cot_window_reports": 156,
  "cot_crowded_long_pct": 90.0,
  "cot_crowded_short_pct": 10.0,
  "cot_max_age_days": 14,
  "tie_rule": "a settlement equal to the entry is a miss",
  "min_graded_for_rate": 40,
  "min_windows_for_rate": 30,
  "spell_offsets": 4,
  "hac_lag": 8,
  "significance": 0.05
 },
 "live_start": "2026-10-05",
 "first_live_call": "2026-10-05",
 "crops": [
  {
   "key": "corn",
   "label": "Corn"
  },
  {
   "key": "beans",
   "label": "Soybeans"
  },
  {
   "key": "wheat",
   "label": "Chicago wheat"
  },
  {
   "key": "kcwheat",
   "label": "KC wheat"
  }
 ],
 "latest": {
  "date": "2026-10-26",
  "calls": [
   {
    "id": "corn-2026-10-20",
    "crop": "corn",
    "made": "2026-10-26",
    "exit_day": "2026-11-23",
    "direction": "down",
    "signal": "trend_down",
    "cot_pct": 78.8,
    "cot_report": "2026-10-20",
    "trend_pct": -3.75,
    "contract": "Dec '26",
    "ticker": "ZCZ26.CBT",
    "entry": 455.0,
    "target": 454.75,
    "status": "open",
    "exit": null,
    "outcome": null,
    "graded_on": null
   },
   {
    "id": "beans-2026-10-20",
    "crop": "beans",
    "made": "2026-10-26",
    "exit_day": "2026-11-23",
    "direction": "down",
    "signal": "trend_down",
    "cot_pct": 88.5,
    "cot_report": "2026-10-20",
    "trend_pct": -1.2,
    "contract": "Jan '27",
    "ticker": "ZSF27.CBT",
    "entry": 1253.5,
    "target": 1253.25,
    "status": "open",
    "exit": null,
    "outcome": null,
    "graded_on": null
   },
   {
    "id": "wheat-2026-10-20",
    "crop": "wheat",
    "made": "2026-10-26",
    "exit_day": "2026-11-23",
    "direction": "down",
    "signal": "trend_down",
    "cot_pct": 73.7,
    "cot_report": "2026-10-20",
    "trend_pct": -9.49,
    "contract": "Dec '26",
    "ticker": "ZWZ26.CBT",
    "entry": 615.5,
    "target": 615.25,
    "status": "open",
    "exit": null,
    "outcome": null,
    "graded_on": null
   },
   {
    "id": "kcwheat-2026-10-20",
    "crop": "kcwheat",
    "made": "2026-10-26",
    "exit_day": "2026-11-23",
    "direction": "down",
    "signal": "trend_down",
    "cot_pct": 81.4,
    "cot_report": "2026-10-20",
    "trend_pct": -11.74,
    "contract": "Dec '26",
    "ticker": "KEZ26.CBT",
    "entry": 658.5,
    "target": 658.25,
    "status": "open",
    "exit": null,
    "outcome": null,
    "graded_on": null
   }
  ]
 },
 "live": {
  "records": {
   "all": {
    "graded": 0,
    "hits": 0,
    "hit_rate": null,
    "by_offset": [
     {
      "offset": 0,
      "calls": 0,
      "hits": 0,
      "rate": null,
      "windows": 0,
      "p_luck": null,
      "p_worse": null
     },
     {
      "offset": 1,
      "calls": 0,
      "hits": 0,
      "rate": null,
      "windows": 0,
      "p_luck": null,
      "p_worse": null
     },
     {
      "offset": 2,
      "calls": 0,
      "hits": 0,
      "rate": null,
      "windows": 0,
      "p_luck": null,
      "p_worse": null
     },
     {
      "offset": 3,
      "calls": 0,
      "hits": 0,
      "rate": null,
      "windows": 0,
      "p_luck": null,
      "p_worse": null
     }
    ],
    "spell_rate_low": null,
    "spell_rate_high": null,
    "windows": 0,
    "hac_z": null,
    "p_luck": null,
    "p_worse": null,
    "rose": null,
    "fell": null,
    "moves_of": null,
    "rose_rate": null,
    "fell_rate": null,
    "first": null,
    "last": null,
    "gate_ok": false,
    "p_luck_adjusted": null,
    "p_worse_adjusted": null,
    "verdict": "not_enough",
    "verdict_text": "Too few calls to grade."
   },
   "corn": {
    "graded": 0,
    "hits": 0,
    "hit_rate": null,
    "by_offset": [
     {
      "offset": 0,
      "calls": 0,
      "hits": 0,
      "rate": null,
      "windows": 0,
      "p_luck": null,
      "p_worse": null
     },
     {
      "offset": 1,
      "calls": 0,
      "hits": 0,
      "rate": null,
      "windows": 0,
      "p_luck": null,
      "p_worse": null
     },
     {
      "offset": 2,
      "calls": 0,
      "hits": 0,
      "rate": null,
      "windows": 0,
      "p_luck": null,
      "p_worse": null
     },
     {
      "offset": 3,
      "calls": 0,
      "hits": 0,
      "rate": null,
      "windows": 0,
      "p_luck": null,
      "p_worse": null
     }
    ],
    "spell_rate_low": null,
    "spell_rate_high": null,
    "windows": 0,
    "hac_z": null,
    "p_luck": null,
    "p_worse": null,
    "rose": null,
    "fell": null,
    "moves_of": null,
    "rose_rate": null,
    "fell_rate": null,
    "first": null,
    "last": null,
    "gate_ok": false,
    "p_luck_adjusted": null,
    "p_worse_adjusted": null,
    "verdict": "not_enough",
    "verdict_text": "Too few calls to grade."
   },
   "beans": {
    "graded": 0,
    "hits": 0,
    "hit_rate": null,
    "by_offset": [
     {
      "offset": 0,
      "calls": 0,
      "hits": 0,
      "rate": null,
      "windows": 0,
      "p_luck": null,
      "p_worse": null
     },
     {
      "offset": 1,
      "calls": 0,
      "hits": 0,
      "rate": null,
      "windows": 0,
      "p_luck": null,
      "p_worse": null
     },
     {
      "offset": 2,
      "calls": 0,
      "hits": 0,
      "rate": null,
      "windows": 0,
      "p_luck": null,
      "p_worse": null
     },
     {
      "offset": 3,
      "calls": 0,
      "hits": 0,
      "rate": null,
      "windows": 0,
      "p_luck": null,
      "p_worse": null
     }
    ],
    "spell_rate_low": null,
    "spell_rate_high": null,
    "windows": 0,
    "hac_z": null,
    "p_luck": null,
    "p_worse": null,
    "rose": null,
    "fell": null,
    "moves_of": null,
    "rose_rate": null,
    "fell_rate": null,
    "first": null,
    "last": null,
    "gate_ok": false,
    "p_luck_adjusted": null,
    "p_worse_adjusted": null,
    "verdict": "not_enough",
    "verdict_text": "Too few calls to grade."
   },
   "wheat": {
    "graded": 0,
    "hits": 0,
    "hit_rate": null,
    "by_offset": [
     {
      "offset": 0,
      "calls": 0,
      "hits": 0,
      "rate": null,
      "windows": 0,
      "p_luck": null,
      "p_worse": null
     },
     {
      "offset": 1,
      "calls": 0,
      "hits": 0,
      "rate": null,
      "windows": 0,
      "p_luck": null,
      "p_worse": null
     },
     {
      "offset": 2,
      "calls": 0,
      "hits": 0,
      "rate": null,
      "windows": 0,
      "p_luck": null,
      "p_worse": null
     },
     {
      "offset": 3,
      "calls": 0,
      "hits": 0,
      "rate": null,
      "windows": 0,
      "p_luck": null,
      "p_worse": null
     }
    ],
    "spell_rate_low": null,
    "spell_rate_high": null,
    "windows": 0,
    "hac_z": null,
    "p_luck": null,
    "p_worse": null,
    "rose": null,
    "fell": null,
    "moves_of": null,
    "rose_rate": null,
    "fell_rate": null,
    "first": null,
    "last": null,
    "gate_ok": false,
    "p_luck_adjusted": null,
    "p_worse_adjusted": null,
    "verdict": "not_enough",
    "verdict_text": "Too few calls to grade."
   },
   "kcwheat": {
    "graded": 0,
    "hits": 0,
    "hit_rate": null,
    "by_offset": [
     {
      "offset": 0,
      "calls": 0,
      "hits": 0,
      "rate": null,
      "windows": 0,
      "p_luck": null,
      "p_worse": null
     },
     {
      "offset": 1,
      "calls": 0,
      "hits": 0,
      "rate": null,
      "windows": 0,
      "p_luck": null,
      "p_worse": null
     },
     {
      "offset": 2,
      "calls": 0,
      "hits": 0,
      "rate": null,
      "windows": 0,
      "p_luck": null,
      "p_worse": null
     },
     {
      "offset": 3,
      "calls": 0,
      "hits": 0,
      "rate": null,
      "windows": 0,
      "p_luck": null,
      "p_worse": null
     }
    ],
    "spell_rate_low": null,
    "spell_rate_high": null,
    "windows": 0,
    "hac_z": null,
    "p_luck": null,
    "p_worse": null,
    "rose": null,
    "fell": null,
    "moves_of": null,
    "rose_rate": null,
    "fell_rate": null,
    "first": null,
    "last": null,
    "gate_ok": false,
    "p_luck_adjusted": null,
    "p_worse_adjusted": null,
    "verdict": "not_enough",
    "verdict_text": "Too few calls to grade."
   }
  },
  "tests_in_family": 0,
  "open": 12,
  "ungradeable": 0
 },
 "action_label": "BOT CALL",
 "action_text": "Bot call, Oct 26 close, 4 weeks out: corn $4.55 down, soybeans $12.53½ down, Chicago wheat $6.15½ down, KC wheat $6.58½ down. Backtest: no edge.",
 "calls": [
  {
   "id": "corn-2026-09-29",
   "crop": "corn",
   "made": "2026-10-05",
   "exit_day": "2026-11-02",
   "direction": "down",
   "signal": "crowded_long",
   "cot_pct": 97.4,
   "cot_report": "2026-09-29",
   "trend_pct": 3.93,
   "contract": "Dec '26",
   "ticker": "ZCZ26.CBT",
   "entry": 497.25,
   "target": 497.0,
   "status": "open",
   "exit": null,
   "outcome": null,
   "graded_on": null,
   "note": "Entry corrected 2026-10-05 before any grading: the 8:34 PM CT run read 496.5, a bar that already held evening trades. 497.5 is the Oct 5 close in AGSIST's price snapshots from 3:19 PM to 6:51 PM CT. Entry set to the settled 2026-10-05 close 497.25 (read 497.5 that evening).",
   "entry_final": true,
   "mark": {
    "date": "2026-10-23",
    "close": 456.0
   }
  },
  {
   "id": "beans-2026-09-29",
   "crop": "beans",
   "made": "2026-10-05",
   "exit_day": "2026-11-02",
   "direction": "down",
   "signal": "crowded_long",
   "cot_pct": 96.2,
   "cot_report": "2026-09-29",
   "trend_pct": 2.24,
   "contract": "Nov '26",
   "ticker": "ZSX26.CBT",
   "entry": 1280.75,
   "target": 1280.5,
   "status": "open",
   "exit": null,
   "outcome": null,
   "graded_on": null,
   "note": "Entry corrected 2026-10-05 before any grading: the 8:34 PM CT run read 1279.25, a bar that already held evening trades. 1281.0 is the Oct 5 close in AGSIST's price snapshots from 3:19 PM to 6:51 PM CT. Entry set to the settled 2026-10-05 close 1280.75 (read 1281.0 that evening).",
   "entry_final": true,
   "mark": {
    "date": "2026-10-23",
    "close": 1256.5
   }
  },
  {
   "id": "wheat-2026-09-29",
   "crop": "wheat",
   "made": "2026-10-05",
   "exit_day": "2026-11-02",
   "direction": "up",
   "signal": "trend_up",
   "cot_pct": 87.2,
   "cot_report": "2026-09-29",
   "trend_pct": 2.48,
   "contract": "Dec '26",
   "ticker": "ZWZ26.CBT",
   "entry": 692.25,
   "target": 692.5,
   "status": "open",
   "exit": null,
   "outcome": null,
   "graded_on": null,
   "note": "Entry corrected 2026-10-05 before any grading: the 8:34 PM CT run read 690.5, a bar that already held evening trades. 691.5 is the Oct 5 close in AGSIST's price snapshots from 3:19 PM to 6:51 PM CT. Entry set to the settled 2026-10-05 close 692.25 (read 691.5 that evening).",
   "entry_final": true,
   "mark": {
    "date": "2026-10-23",
    "close": 625.0
   }
  },
  {
   "id": "kcwheat-2026-09-29",
   "crop": "kcwheat",
   "made": "2026-10-05",
   "exit_day": "2026-11-02",
   "direction": "down",
   "signal": "crowded_long",
   "cot_pct": 92.3,
   "cot_report": "2026-09-29",
   "trend_pct": 4.27,
   "contract": "Dec '26",
   "ticker": "KEZ26.CBT",
   "entry": 742.25,
   "target": 742.0,
   "status": "open",
   "exit": null,
   "outcome": null,
   "graded_on": null,
   "note": "Entry corrected 2026-10-05 before any grading: the 8:34 PM CT run read 740.0, a bar that already held evening trades. 742.25 is the Oct 5 close in AGSIST's price snapshots from 3:19 PM to 6:51 PM CT.",
   "entry_final": true,
   "mark": {
    "date": "2026-10-23",
    "close": 664.5
   }
  },
  {
   "id": "corn-2026-10-13",
   "crop": "corn",
   "made": "2026-10-19",
   "exit_day": "2026-11-17",
   "direction": "down",
   "signal": "trend_down",
   "cot_pct": 85.9,
   "cot_report": "2026-10-13",
   "trend_pct": -0.77,
   "contract": "Dec '26",
   "ticker": "ZCZ26.CBT",
   "entry": 467.0,
   "target": 466.75,
   "status": "open",
   "exit": null,
   "outcome": null,
   "graded_on": null,
   "note": "Entry set to the settled 2026-10-19 close 467.0 (read 466.75 that evening).",
   "entry_final": true,
   "mark": {
    "date": "2026-10-23",
    "close": 456.0
   }
  },
  {
   "id": "beans-2026-10-13",
   "crop": "beans",
   "made": "2026-10-19",
   "exit_day": "2026-11-17",
   "direction": "down",
   "signal": "crowded_long",
   "cot_pct": 96.8,
   "cot_report": "2026-10-13",
   "trend_pct": -2.65,
   "contract": "Jan '27",
   "ticker": "ZSF27.CBT",
   "entry": 1268.75,
   "target": 1268.5,
   "status": "open",
   "exit": null,
   "outcome": null,
   "graded_on": null,
   "note": "Entry set to the settled 2026-10-19 close 1268.75 (read 1268.25 that evening).",
   "entry_final": true,
   "mark": {
    "date": "2026-10-23",
    "close": 1268.5
   }
  },
  {
   "id": "wheat-2026-10-13",
   "crop": "wheat",
   "made": "2026-10-19",
   "exit_day": "2026-11-17",
   "direction": "down",
   "signal": "trend_down",
   "cot_pct": 84.0,
   "cot_report": "2026-10-13",
   "trend_pct": -5.54,
   "contract": "Dec '26",
   "ticker": "ZWZ26.CBT",
   "entry": 655.25,
   "target": 655.0,
   "status": "open",
   "exit": null,
   "outcome": null,
   "graded_on": null,
   "note": "Entry set to the settled 2026-10-19 close 655.25 (read 656.0 that evening).",
   "entry_final": true,
   "mark": {
    "date": "2026-10-23",
    "close": 625.0
   }
  },
  {
   "id": "kcwheat-2026-10-13",
   "crop": "kcwheat",
   "made": "2026-10-19",
   "exit_day": "2026-11-17",
   "direction": "down",
   "signal": "trend_down",
   "cot_pct": 86.5,
   "cot_report": "2026-10-13",
   "trend_pct": -5.57,
   "contract": "Dec '26",
   "ticker": "KEZ26.CBT",
   "entry": 699.5,
   "target": 699.25,
   "status": "open",
   "exit": null,
   "outcome": null,
   "graded_on": null,
   "entry_final": true,
   "mark": {
    "date": "2026-10-23",
    "close": 664.5
   }
  },
  {
   "id": "corn-2026-10-20",
   "crop": "corn",
   "made": "2026-10-26",
   "exit_day": "2026-11-23",
   "direction": "down",
   "signal": "trend_down",
   "cot_pct": 78.8,
   "cot_report": "2026-10-20",
   "trend_pct": -3.75,
   "contract": "Dec '26",
   "ticker": "ZCZ26.CBT",
   "entry": 455.0,
   "target": 454.75,
   "status": "open",
   "exit": null,
   "outcome": null,
   "graded_on": null
  },
  {
   "id": "beans-2026-10-20",
   "crop": "beans",
   "made": "2026-10-26",
   "exit_day": "2026-11-23",
   "direction": "down",
   "signal": "trend_down",
   "cot_pct": 88.5,
   "cot_report": "2026-10-20",
   "trend_pct": -1.2,
   "contract": "Jan '27",
   "ticker": "ZSF27.CBT",
   "entry": 1253.5,
   "target": 1253.25,
   "status": "open",
   "exit": null,
   "outcome": null,
   "graded_on": null
  },
  {
   "id": "wheat-2026-10-20",
   "crop": "wheat",
   "made": "2026-10-26",
   "exit_day": "2026-11-23",
   "direction": "down",
   "signal": "trend_down",
   "cot_pct": 73.7,
   "cot_report": "2026-10-20",
   "trend_pct": -9.49,
   "contract": "Dec '26",
   "ticker": "ZWZ26.CBT",
   "entry": 615.5,
   "target": 615.25,
   "status": "open",
   "exit": null,
   "outcome": null,
   "graded_on": null
  },
  {
   "id": "kcwheat-2026-10-20",
   "crop": "kcwheat",
   "made": "2026-10-26",
   "exit_day": "2026-11-23",
   "direction": "down",
   "signal": "trend_down",
   "cot_pct": 81.4,
   "cot_report": "2026-10-20",
   "trend_pct": -11.74,
   "contract": "Dec '26",
   "ticker": "KEZ26.CBT",
   "entry": 658.5,
   "target": 658.25,
   "status": "open",
   "exit": null,
   "outcome": null,
   "graded_on": null
  }
 ],
 "skipped": [
  {
   "crop": "corn",
   "report": "2026-10-06",
   "date": "2026-10-15",
   "reason": "missed: no run at its entry close on 2026-10-13; never made late"
  },
  {
   "crop": "beans",
   "report": "2026-10-06",
   "date": "2026-10-15",
   "reason": "missed: no run at its entry close on 2026-10-13; never made late"
  },
  {
   "crop": "wheat",
   "report": "2026-10-06",
   "date": "2026-10-15",
   "reason": "missed: no run at its entry close on 2026-10-13; never made late"
  },
  {
   "crop": "kcwheat",
   "report": "2026-10-06",
   "date": "2026-10-15",
   "reason": "missed: no run at its entry close on 2026-10-13; never made late"
  }
 ],
 "next_entry": {
  "report": "2026-10-20",
  "day": "2026-10-26",
  "after_holiday": null
 },
 "backtest": {
  "computed": "2026-10-27T00:04:51Z",
  "source": "data/cot-deep.json (CFTC disaggregated COT; Yahoo continuous front-month, roll-repaired by cot_calendar.roll_adjust)",
  "source_built": "rebuild 2006–2026",
  "cutoff": "2026-10-02",
  "rules_version": "bot-v1.1",
  "rules_tested": 1,
  "tests_in_family": 5,
  "spell_tests": 16,
  "spell_tests_worse": 0,
  "spell_tests_better": 0,
  "records": {
   "all": {
    "graded": 2736,
    "hits": 1301,
    "hit_rate": 47.6,
    "by_offset": [
     {
      "offset": 0,
      "calls": 684,
      "hits": 305,
      "rate": 44.6,
      "windows": 171,
      "p_luck": null,
      "p_worse": null
     },
     {
      "offset": 1,
      "calls": 688,
      "hits": 352,
      "rate": 51.2,
      "windows": 172,
      "p_luck": null,
      "p_worse": null
     },
     {
      "offset": 2,
      "calls": 680,
      "hits": 324,
      "rate": 47.6,
      "windows": 170,
      "p_luck": null,
      "p_worse": null
     },
     {
      "offset": 3,
      "calls": 684,
      "hits": 320,
      "rate": 46.8,
      "windows": 171,
      "p_luck": null,
      "p_worse": null
     }
    ],
    "spell_rate_low": 44.6,
    "spell_rate_high": 51.2,
    "windows": 170,
    "hac_z": -1.7352,
    "p_luck": 0.958651,
    "p_worse": 0.041349,
    "rose": 1338,
    "fell": 1398,
    "moves_of": 2736,
    "rose_rate": 48.9,
    "fell_rate": 51.1,
    "first": "2013-01-07",
    "last": "2026-08-31",
    "gate_ok": true,
    "p_luck_adjusted": 0.975087,
    "p_worse_adjusted": 0.103372,
    "verdict": "coin_flip",
    "verdict_text": "No better than a coin flip; below half in 4 of 5 ways of counting, and worse than always saying down."
   },
   "corn": {
    "graded": 684,
    "hits": 347,
    "hit_rate": 50.7,
    "by_offset": [
     {
      "offset": 0,
      "calls": 171,
      "hits": 86,
      "rate": 50.3,
      "windows": 171,
      "p_luck": 0.5,
      "p_worse": 0.56075,
      "p_luck_adjusted": 0.997127,
      "p_worse_adjusted": 0.726678
     },
     {
      "offset": 1,
      "calls": 172,
      "hits": 89,
      "rate": 51.7,
      "windows": 172,
      "p_luck": 0.351569,
      "p_worse": 0.703176,
      "p_luck_adjusted": 0.997127,
      "p_worse_adjusted": 0.751209
     },
     {
      "offset": 2,
      "calls": 170,
      "hits": 88,
      "rate": 51.8,
      "windows": 170,
      "p_luck": 0.350741,
      "p_worse": 0.704258,
      "p_luck_adjusted": 0.997127,
      "p_worse_adjusted": 0.751209
     },
     {
      "offset": 3,
      "calls": 171,
      "hits": 84,
      "rate": 49.1,
      "windows": 171,
      "p_luck": 0.620103,
      "p_worse": 0.43925,
      "p_luck_adjusted": 0.997127,
      "p_worse_adjusted": 0.638909
     }
    ],
    "spell_rate_low": 49.1,
    "spell_rate_high": 51.8,
    "windows": 170,
    "hac_z": 0.255,
    "p_luck": 0.399349,
    "p_worse": 0.600651,
    "rose": 337,
    "fell": 347,
    "moves_of": 684,
    "rose_rate": 49.3,
    "fell_rate": 50.7,
    "first": "2013-01-07",
    "last": "2026-08-31",
    "gate_ok": true,
    "p_luck_adjusted": 0.975087,
    "p_worse_adjusted": 0.600651,
    "verdict": "coin_flip",
    "verdict_text": "No better than a coin flip."
   },
   "beans": {
    "graded": 684,
    "hits": 318,
    "hit_rate": 46.5,
    "by_offset": [
     {
      "offset": 0,
      "calls": 171,
      "hits": 74,
      "rate": 43.3,
      "windows": 171,
      "p_luck": 0.966929,
      "p_worse": 0.046102,
      "p_luck_adjusted": 0.997127,
      "p_worse_adjusted": 0.245877
     },
     {
      "offset": 1,
      "calls": 172,
      "hits": 87,
      "rate": 50.6,
      "windows": 172,
      "p_luck": 0.469625,
      "p_worse": 0.590426,
      "p_luck_adjusted": 0.997127,
      "p_worse_adjusted": 0.726678
     },
     {
      "offset": 2,
      "calls": 170,
      "hits": 81,
      "rate": 47.6,
      "windows": 170,
      "p_luck": 0.754931,
      "p_worse": 0.295742,
      "p_luck_adjusted": 0.997127,
      "p_worse_adjusted": 0.593648
     },
     {
      "offset": 3,
      "calls": 171,
      "hits": 76,
      "rate": 44.4,
      "windows": 171,
      "p_luck": 0.937046,
      "p_worse": 0.084242,
      "p_luck_adjusted": 0.997127,
      "p_worse_adjusted": 0.294683
     }
    ],
    "spell_rate_low": 43.3,
    "spell_rate_high": 50.6,
    "windows": 170,
    "hac_z": -1.4147,
    "p_luck": 0.921421,
    "p_worse": 0.078579,
    "rose": 369,
    "fell": 315,
    "moves_of": 684,
    "rose_rate": 53.9,
    "fell_rate": 46.1,
    "first": "2013-01-07",
    "last": "2026-08-31",
    "gate_ok": true,
    "p_luck_adjusted": 0.975087,
    "p_worse_adjusted": 0.130965,
    "verdict": "coin_flip",
    "verdict_text": "No better than a coin flip; below half in 4 of 5 ways of counting, and worse than always saying up."
   },
   "wheat": {
    "graded": 684,
    "hits": 330,
    "hit_rate": 48.2,
    "by_offset": [
     {
      "offset": 0,
      "calls": 171,
      "hits": 77,
      "rate": 45.0,
      "windows": 171,
      "p_luck": 0.915758,
      "p_worse": 0.110506,
      "p_luck_adjusted": 0.997127,
      "p_worse_adjusted": 0.294683
     },
     {
      "offset": 1,
      "calls": 172,
      "hits": 94,
      "rate": 54.7,
      "windows": 172,
      "p_luck": 0.126331,
      "p_worse": 0.902626,
      "p_luck_adjusted": 0.997127,
      "p_worse_adjusted": 0.902626
     },
     {
      "offset": 2,
      "calls": 170,
      "hits": 82,
      "rate": 48.2,
      "windows": 170,
      "p_luck": 0.704258,
      "p_worse": 0.350741,
      "p_luck_adjusted": 0.997127,
      "p_worse_adjusted": 0.607835
     },
     {
      "offset": 3,
      "calls": 171,
      "hits": 77,
      "rate": 45.0,
      "windows": 171,
      "p_luck": 0.915758,
      "p_worse": 0.110506,
      "p_luck_adjusted": 0.997127,
      "p_worse_adjusted": 0.294683
     }
    ],
    "spell_rate_low": 45.0,
    "spell_rate_high": 54.7,
    "windows": 170,
    "hac_z": -0.6546,
    "p_luck": 0.743628,
    "p_worse": 0.256372,
    "rose": 324,
    "fell": 360,
    "moves_of": 684,
    "rose_rate": 47.4,
    "fell_rate": 52.6,
    "first": "2013-01-07",
    "last": "2026-08-31",
    "gate_ok": true,
    "p_luck_adjusted": 0.975087,
    "p_worse_adjusted": 0.320465,
    "verdict": "coin_flip",
    "verdict_text": "No better than a coin flip; below half in 4 of 5 ways of counting, and worse than always saying down."
   },
   "kcwheat": {
    "graded": 684,
    "hits": 306,
    "hit_rate": 44.7,
    "by_offset": [
     {
      "offset": 0,
      "calls": 171,
      "hits": 68,
      "rate": 39.8,
      "windows": 171,
      "p_luck": 0.997127,
      "p_worse": 0.004561,
      "p_luck_adjusted": 0.997127,
      "p_worse_adjusted": 0.072976
     },
     {
      "offset": 1,
      "calls": 172,
      "hits": 82,
      "rate": 47.7,
      "windows": 172,
      "p_luck": 0.753664,
      "p_worse": 0.296824,
      "p_luck_adjusted": 0.997127,
      "p_worse_adjusted": 0.593648
     },
     {
      "offset": 2,
      "calls": 170,
      "hits": 73,
      "rate": 42.9,
      "windows": 170,
      "p_luck": 0.972567,
      "p_worse": 0.03871,
      "p_luck_adjusted": 0.997127,
      "p_worse_adjusted": 0.245877
     },
     {
      "offset": 3,
      "calls": 171,
      "hits": 83,
      "rate": 48.5,
      "windows": 171,
      "p_luck": 0.676758,
      "p_worse": 0.379897,
      "p_luck_adjusted": 0.997127,
      "p_worse_adjusted": 0.607835
     }
    ],
    "spell_rate_low": 39.8,
    "spell_rate_high": 48.5,
    "windows": 170,
    "hac_z": -1.9614,
    "p_luck": 0.975087,
    "p_worse": 0.024913,
    "rose": 308,
    "fell": 376,
    "moves_of": 684,
    "rose_rate": 45.0,
    "fell_rate": 55.0,
    "first": "2013-01-07",
    "last": "2026-08-31",
    "gate_ok": true,
    "p_luck_adjusted": 0.975087,
    "p_worse_adjusted": 0.103372,
    "verdict": "coin_flip",
    "verdict_text": "No better than a coin flip; below half in 5 of 5 ways of counting, and worse than always saying down."
   }
  },
  "by_signal": {
   "crowded_long": {
    "graded": 301,
    "hits": 135,
    "hit_rate": 44.9
   },
   "crowded_short": {
    "graded": 562,
    "hits": 270,
    "hit_rate": 48.0
   },
   "trend_up": {
    "graded": 867,
    "hits": 396,
    "hit_rate": 45.7
   },
   "trend_down": {
    "graded": 1006,
    "hits": 500,
    "hit_rate": 49.7
   }
  },
  "skipped": {
   "fewer than 156 prior reports": 624,
   "report held back by a federal shutdown (release date unknown)": 116,
   "exit close missing or not yet known": 16,
   "exit after the backtest cutoff": 12,
   "entry close missing": 4
  },
  "calls_file": "data/predictions-backtest.json"
 }
}
