Performance

Record241–254495 bets
Win Rate48.7%
Cumulative ROI per bet+5.8%profit ÷ units risked
Unit Growth148.8started at 100

Unit curve (base 100)

Calibration events

  • ML out04-04Dropped moneyline — no detectable edge
  • Spread out05-09Dropped spreads — converged on totals
  • ML+SP back06-18Moneyline + spread reinstated after 2026-aware recal: ML +33.8% / spread +26.8% walk-forward ROI
  • v1.106-24v1.1: removed betting-market leakage features (ml_odds, spread_odds, total_odds); spread calibration gap 17pp → 2.6pp; all 3 markets retrained
  • v1.206-25v1.2: feature-count tune (ML 13→~20 features +10.6pp ROI, OU 30→~25 +4.5pp ROI) + spread deactivated — clean-model calibrated sweep showed negative ROI at every feature count on spread
  • v1.306-25v1.3: added weather_temp_f to OU candidate pool (single-feature ablation showed +4pp ROI vs v1.2 baseline; park_factor_delta solo had no lift). ML/spread excluded from weather/park per ablation (-2pp on ML when added).
  • v1.407-16v1.4: First-5-innings + NRFI markets go live end-to-end — line-move poller, odds feed, market_edge_view, and Kelly thresholds all wired for F5 ML / F5 spread / F5 totals / NRFI
  • v1.507-19v1.5: feature-build 9× speedup + SP matchup features (edges + averages) + F5 CLV pipeline; NRFI/F5 odds-leakage patched post-audit
  • v1.607-21v1.6: patched C2 season-snapshot leakage — pitcher + reliever features now on as-of-date lookup instead of end-of-season snapshots
  • v1.707-31v1.7: full calibration refit on production features, extended to F5 markets (previously ML/spread/totals only)
  • v1.808-11v1.8: FG splits as-of-date recovery — recovered leaked pitcher season stats through weekly FanGraphs snapshots; verify bound widened to [1,75]
  • v1.908-12v1.9: weather features (temp, humidity, dew point, wind + park-orientation-aware 'out toward CF' component) wired into feature matrix
  • v2.008-15v2.0: Statcast Phase D — pybaseball rolling xwOBA-against, barrel% allowed, hardhit% allowed, whiff%, chase% per starter (30d, min 200 pitches) + team-batting xwOBA; 9 statcast features selected across 6 of 7 markets after retrain

Hypothetical P&L by market — model edge, 1u flat per pick

Hypothetical cumulative P&L per market if every above-threshold model suggestion had been bet at 1 unit flat. Diagnostic view of where the model finds edge across MLB's markets — moneyline, run-line, totals, and first-5-innings variants. The placed-picks track record above is the truth; this chart is the model's edge picture, not the operator's tape.

MarketBetsW–LWin%Net P&L (u)
Moneyline121455665845.8%+0.00u
Spread126957769245.5%+0.00u
Totals (Over/Under)139168870349.5%+0.00u
f5_moneyline164669840.2%+0.00u
f5_spread1838110244.3%+0.00u
f5_totals149787152.3%+0.00u
nrfi49242549.0%+0.00u

Audit Trail

Every pick file is cryptographically committed to a public Git repo and signed to the Rekor transparency log before games start. Pre-game ✓ means the commit landed before first pitch — the pick was locked in. Retro means the file was committed after the fact; this still proves the file has not been altered since, but cannot prove pre-game timing. Click Verify to inspect the Git commit and Rekor entry.

DateBlockchainFiles
2026-09-04
Pre-game ✓
Available tomorrow.ots
2026-09-03
Pre-game ✓
View proof.ots
2026-09-02
Pre-game ✓
View proof.ots
2026-09-01
Pre-game ✓
View proof.ots
2026-08-31
Pre-game ✓
View proof.ots
2026-08-30
Pre-game ✓
View proof.ots
2026-08-29
Pre-game ✓
View proof.ots
2026-08-28
Pre-game ✓
View proof.ots
2026-08-27
Pre-game ✓
View proof.ots
2026-08-26
Pre-game ✓
View proof.ots
2026-08-25
Pre-game ✓
View proof.ots
2026-08-24
Pre-game ✓
View proof.ots
2026-08-23
Pre-game ✓
View proof.ots
2026-08-22
Pre-game ✓
View proof.ots
2026-08-21
Pre-game ✓
View proof.ots
2026-08-20
Pre-game ✓
View proof.ots
2026-08-19
Pre-game ✓
View proof.ots
2026-08-18
Pre-game ✓
View proof.ots
2026-08-17
Pre-game ✓
View proof.ots
2026-08-16
Pre-game ✓
View proof.ots
2026-08-15
Pre-game ✓
View proof.ots
2026-08-14
Pre-game ✓
View proof.ots
2026-08-13
Pre-game ✓
View proof.ots
2026-08-12
Pre-game ✓
View proof.ots
2026-08-11
Pre-game ✓
View proof.ots
2026-08-10
Pre-game ✓
View proof.ots
2026-08-09
Pre-game ✓
View proof.ots
2026-08-08
Pre-game ✓
View proof.ots
2026-08-07
Pre-game ✓
View proof.ots
2026-08-06
Pre-game ✓
View proof.ots
2026-08-05
Pre-game ✓
View proof.ots
2026-08-04
Pre-game ✓
View proof.ots
2026-08-03
Pre-game ✓
View proof.ots
2026-08-02
Pre-game ✓
View proof.ots
2026-08-01
Pre-game ✓
View proof.ots
2026-07-31
Pre-game ✓
View proof.ots
2026-07-30
Pre-game ✓
View proof.ots
2026-07-29
Pre-game ✓
View proof.ots
2026-07-28
Pre-game ✓
View proof.ots
2026-07-27
Pre-game ✓
View proof.ots
2026-07-26
Pre-game ✓
View proof.ots
2026-07-25
Pre-game ✓
View proof.ots
2026-07-24
Pre-game ✓
View proof.ots
2026-07-23
Pre-game ✓
View proof.ots
2026-07-22
Pre-game ✓
View proof.ots
2026-07-21
Pre-game ✓
View proof.ots
2026-07-20
Pre-game ✓
View proof.ots
2026-07-19
Pre-game ✓
View proof.ots
2026-07-18
Pre-game ✓
View proof.ots
2026-07-17
Pre-game ✓
View proof.ots
2026-07-12
Pre-game ✓
View proof.ots
2026-07-11
Pre-game ✓
View proof.ots
2026-07-10
Pre-game ✓
View proof.ots
2026-07-09
Pre-game ✓
View proof.ots
2026-07-08
Pre-game ✓
View proof.ots
2026-07-07
Pre-game ✓
View proof.ots
2026-07-06
Pre-game ✓
View proof.ots
2026-07-05
Pre-game ✓
View proof.ots
2026-07-04
Pre-game ✓
View proof.ots
2026-07-03
Pre-game ✓
View proof.ots
2026-07-02
Pre-game ✓
View proof.ots
2026-07-01
Pre-game ✓
View proof.ots
2026-06-30
Pre-game ✓
View proof.ots
2026-06-29
Pre-game ✓
View proof.ots
2026-06-28
Pre-game ✓
View proof.ots
2026-06-27
Pre-game ✓
View proof.ots
2026-06-26
Pre-game ✓
View proof.ots
2026-06-25
Pre-game ✓
View proof.ots
2026-06-24
Pre-game ✓
View proof.ots
2026-06-23
Pre-game ✓
View proof.ots
2026-06-22
Pre-game ✓
View proof.ots
2026-06-21
Pre-game ✓
View proof.ots
2026-06-20
Pre-game ✓
View proof.ots
2026-06-19
Pre-game ✓
View proof.ots
2026-06-18
Pre-game ✓
View proof.ots
2026-06-17
Pre-game ✓
View proof.ots
2026-06-16
Pre-game ✓
View proof.ots
2026-06-15
Pre-game ✓
View proof.ots
2026-06-14
Pre-game ✓
View proof.ots
2026-06-13
Pre-game ✓
View proof.ots
2026-06-12
Pre-game ✓
View proof.ots
2026-06-09
Retro 06-19
View proof.ots
2026-06-08
Retro 06-19
View proof.ots
2026-06-07
Retro 06-19
View proof.ots
2026-06-05
Retro 06-19
View proof.ots
2026-06-04
Retro 06-19
View proof.ots
2026-06-03
Retro 06-19
View proof.ots
2026-06-02
Retro 06-19
View proof.ots
2026-06-01
Retro 06-19
View proof.ots
2026-05-31
Retro 06-19
View proof.ots
2026-05-30
Retro 06-19
View proof.ots
2026-05-29
Retro 06-19
View proof.ots
2026-05-28
Retro 06-19
View proof.ots
2026-05-27
Retro 06-19
View proof.ots
2026-05-26
Retro 06-19
View proof.ots
2026-05-25
Retro 06-19
View proof.ots
2026-05-24
Retro 06-19
View proof.ots
2026-05-23
Retro 06-19
View proof.ots
2026-05-22
Retro 06-19
View proof.ots
2026-05-21
Retro 06-19
View proof.ots
2026-05-20
Retro 06-19
View proof.ots
2026-05-19
Retro 06-19
View proof.ots
2026-05-18
Retro 06-19
View proof.ots
2026-05-17
Retro 06-19
View proof.ots
2026-05-16
Retro 06-19
View proof.ots
2026-05-15
Retro 06-19
View proof.ots
2026-05-14
Retro 06-19
View proof.ots
2026-05-11
Retro 06-19
View proof.ots
2026-05-10
Retro 06-19
View proof.ots
2026-05-09
Retro 06-19
View proof.ots
2026-05-08
Retro 06-19
View proof.ots
2026-05-07
Retro 06-19
View proof.ots
2026-05-06
Retro 06-19
View proof.ots
2026-05-05
Retro 06-19
View proof.ots
2026-05-04
Retro 06-19
View proof.ots
2026-04-29
Retro 06-19
View proof.ots
2026-04-27
Retro 06-19
View proof.ots
2026-04-26
Retro 06-19
View proof.ots
2026-04-25
Retro 06-19
View proof.ots
2026-04-24
Retro 06-19
View proof.ots
2026-04-23
Retro 06-19
View proof.ots
2026-04-22
Retro 06-19
View proof.ots
2026-04-21
Retro 06-19
View proof.ots
2026-04-20
Retro 06-19
View proof.ots
2026-04-19
Retro 06-19
View proof.ots
2026-04-18
Retro 06-19
View proof.ots
2026-04-17
Retro 06-19
View proof.ots
2026-04-16
Retro 06-19
View proof.ots
2026-04-15
Retro 06-19
View proof.ots
2026-04-14
Retro 06-19
View proof.ots
2026-04-13
Retro 06-19
View proof.ots
2026-04-12
Retro 06-19
View proof.ots
2026-04-11
Retro 06-19
View proof.ots
2026-04-10
Retro 06-19
View proof.ots
2026-04-09
Retro 06-19
View proof.ots
2026-04-08
Retro 06-19
View proof.ots
2026-04-07
Retro 06-19
View proof.ots
2026-04-06
Retro 06-19
View proof.ots
2026-04-05
Retro 06-19
View proof.ots
2026-04-04
Retro 06-19
View proof.ots
2026-04-03
Retro 06-19
View proof.ots
2026-04-02
Retro 06-19
View proof.ots
2026-04-01
Retro 06-19
View proof.ots
2026-03-31
Retro 06-19
View proof.ots
2026-03-30
Retro 06-19
View proof.ots
2026-03-29
Retro 06-19
View proof.ots
2026-03-28
Retro 06-19
View proof.ots
2026-03-27
Retro 06-19
View proof.ots
2026-03-26
Retro 06-19
View proof.ots
2026-03-25
Retro 06-19
View proof.ots
How to verify the blockchain timestamp on your own

Each picks file is hashed and the hash is committed to the Bitcoin blockchain via OpenTimestamps. This proves the file existed before the first Bitcoin block mined after it was stamped — i.e., before any game that day could have started.

  1. 1
    Download both filesClick Download JSON to get the picks file, then Download OTS Proof to get the timestamp proof. Keep them in the same folder with the same base name (e.g., 2026-02-21.json and 2026-02-21.json.ots).
  2. 2
    Open the OpenTimestamps verifierGo to opentimestamps.org and scroll to the Stamp & Verify section.
  3. 3
    Upload the .ots proof fileDrag the .ots file into the verification box. The site will automatically look for a matching document to hash.
  4. 4
    Upload the JSON picks fileWhen prompted, also upload the .json file. The verifier hashes it and checks that the hash is embedded in the .ots proof chain.
  5. 5
    Read the resultA successful verification will show a green confirmation with the Bitcoin block number and timestamp — proving the exact picks were published to the blockchain before that block was mined. Any alteration to the JSON would cause the hash to mismatch and verification to fail.

Prefer the command line? Install opentimestamps-client via pip and run: ots verify 2026-02-21.json.ots