CAPTRACKER is two pieces. A selection engine ranks candidate picks by composite score (§2). A real-money bot then bets the subset of those picks that clears a set of execution gates (§3), as a taker on SX Network — a public blockchain orderbook.
The published record is the on-chain ledger, and nothing else. Every fill is a signed transaction against a public wallet. You do not have to trust our accounting — you are not asked to. The fills sit on a chain we do not control, timestamped before the event started, and no one can edit or delete them afterward. The complete record is at /ledger.
That is the entire pitch. Anyone can screenshot a winning slip; nobody can fake four months of timestamped fills on a public chain. If a capper's record cannot survive that test, you are reading marketing.
0x5197…37bf.Each scoring cycle, every candidate pick gets a composite score from 0–100 across four components:
| Component | Range | What it measures |
|---|---|---|
capper_score | 0–40 | Source handicapper's track record, ROI, streak. Backed by the leaderboard. |
model_score | 0–25 | Sport-specific model's agreement with the pick (see coverage table). |
convergence_score | 0–20 | Signal strength when multiple cappers + model align on the same canonical bet. |
edge_score | 0–10 | Closing-line value gap between model probability and book implied probability. |
Top-25 by composite score are promoted to the active portfolio per cycle. Per-game cap is 2 picks; daily upper bound is 10.
Promotion is not a bet. Of those promoted picks, the real-money bot fills at most five per day, and only the ones that survive the gates in §3 — in practice a small minority. A pick appearing on the site is a ranking output; a row on /ledger is money that actually moved.
How ranked picks are graded: automatically against the ESPN scoreboard, with no manual grading step. That covers every promoted pick, filled or not, so the selection engine is scored on its whole output rather than on the subset the bot happened to bet. On-chain fills are settled separately and authoritatively by SX Network (§4).
| Sport | Model | model_score active | Composite leans on |
|---|---|---|---|
| MLB | Poisson run-scoring (wOBA / FIP / park factors) | Yes | All four components |
| NBA | NetRtg / pace differential / B2B penalties | Yes | All four components |
| NHL | None (deferred) | No | capper + convergence + edge |
| NFL | None (offseason) | No | capper + convergence + edge |
| NCAAB / NCAAF / soccer / MMA | None | No | capper + convergence + edge |
Picks in a sport without a dedicated model still compete on the composite — they have model_score=0 and rely on the other three components to rank.
The _score_capper function had a field-name bug from launch through 2026-04-25: it only checked pick.get("handicapper") for the source name, missing every Reddit pick (which uses author). Walk-forward replay caught it and the fix landed 2026-04-25. Picks scored before that date may have under-weighted Reddit sources; everything from 2026-04-25 forward ships with the fix in place.
3% of the free wallet balance per fill, flat across all tiers. The wallet balance is read from chain at the start of every cycle, so the bet size compounds up as the wallet grows and shrinks on drawdown without anyone touching a config.
A ranked pick is not a bet. Most picks the selection engine promotes never get filled, because the real-money leg only fires when every gate below passes. These are the live values as of the timestamp at the top of this page:
| Gate | Live value | Why |
|---|---|---|
| Stake per fill | 3% of free wallet | Fixed fraction, so sizing scales with results instead of drifting |
| Minimum stake | $1.00 | Below this, gas and rounding dominate the bet |
| Rolling 24h stake cap | 15% of free wallet | Caps a single bad day even if the slate is full of qualifying picks |
| Fills per day | 5 max | The variance budget is a day, not a cycle |
| Markets | Moneyline only | Since 2026-07-28. Spreads and totals matched poorly against the book |
| Odds band | 1.833 – 3.50 decimal | −120 to +250 American. Heavy favorites and longshots both graded badly |
| Minimum edge | 0.0% fresh book / −2.0% fallback | Edge measured against the no-vig fair line at fill time |
| Book depth | ≥ 1× stake | Refuses to take a price the book cannot actually fill |
| Taker vig ceiling | 110% | Walks away when the two-sided book is too wide to be worth crossing |
This is fixed-fractional sizing, not Kelly. Edge decides whether the bot bets at all; it does not decide how much. A pick clearing the gate by 0.1% and one clearing by 8% get the same 3%. Kelly-proportional sizing returns only if the edge estimate proves calibrated enough to trust with stake size — see the trip-wires in §6.
The 3% figure came out of a simulation run on the selection cohort before the real-money leg went live. It is the reason the bot does not size larger, and it is reproduced here unchanged:
1,000 outcome-resampled simulations per sizing %, alternate-season risk:
| Sizing | Median final | DD p95 | >25% DD risk | >50% DD risk |
|---|---|---|---|---|
| 2% | $1,049 | 16.0% | 0.0% | 0.0% |
| 3% (live) | $1,071 | 23.2% | 1.1% | 0.0% |
| 5% | $1,107 | 36.2% | 6.4% | 0.2% |
| 10% | $1,149 | 61.1% | 19.8% | 5.3% |
| 15% (former) | $1,122 | 77.5% | 29.2% | 14.6% |
3% sizing retains nearly all median return ($1,071 vs $1,149 at 10%) while dropping >25% drawdown risk 18× vs the former 15% rule. p95 max drawdown at 3% is 23.2%, just below the 25% public-marketing threshold for "this is normal variance, not system failure."
Walk-forward replay can't validate that ELITE picks have meaningfully larger edge than HIGH picks. The replay produces NO_PLAY/MEDIUM tiers exclusively because historical model snapshots and historical odds are both leakage points (we don't have them stored at pick-creation time). Until model_predictions_history accumulates ≥6 months of clean data, flat 3% is the defensible move. Tier-graded sizing returns when there's evidence to support it.
This is the real-money result, settled fills only, as of the timestamp at the top of this page. It updates as bets settle; the live version is at /ledger.
| Metric | Value |
|---|---|
| Settled fills | 274 |
| Record | 147W – 122L – 5 push |
| Win rate (pushes excluded) | 54.6% |
| Total staked | $770.88 |
| Realized profit | +$58.62 |
| Unit ROI | +7.60% |
| First fill | 2026-05-11 |
Read the ROI column, not the dollar column. Stake size changed by 7× over this window as the wallet grew and the sizing rule compounded, so dollars are not comparable across months and unit ROI is.
| Month | Fills | W–L | Avg stake | Staked | P/L | Unit ROI |
|---|---|---|---|---|---|---|
| 2026-05 | 103 | 50–51 | $1.00 | $103.00 | −$2.36 | −2.29% |
| 2026-06 | 79 | 48–28 | $1.00 | $79.00 | +$18.93 | +23.96% |
| 2026-07 | 71 | 38–33 | $7.30 | $518.12 | +$30.84 | +5.95% |
| 2026-08 (partial) | 21 | 11–10 | $3.37 | $70.76 | +$11.21 | +15.85% |
Three of four months green, and the one red month cost 2.29%. Not a heater, not a blowup — a strategy that grinds and survives its bad stretches, which is the only kind worth following. Every one of those 274 fills was placed before the event started and settled by a network we do not operate.
We publish the sample size on purpose. 274 bets over four months is a real track record and a young one, and anyone quoting an ROI without telling you the denominator is hiding something. Ours is on the table, updating in public, fill by fill.
The bot's qualifying picks go out before the games start, not after.
GET THE PICKSOr audit the whole record first — every fill is on /ledger. We would rather you check.
The lifetime cohort is not homogeneous. Market mix across all fills: 233 moneyline, 46 spread, 27 total. Spreads and totals were retired on 2026-07-28 after grading worse than moneylines; every fill since is moneyline. Any cohort comparison that treats the whole history as one strategy is comparing three different rule sets.
This section grades the selection engine, not the on-chain cohort in §4. It answers "does the composite score rank picks in a useful order?" — a different and much larger sample than the filtered subset the real-money bot actually fires on.
Each pick in the test set is re-scored against only data that existed at pick.created_at. Sample as of the as-of timestamp at the top of this page.
Test cohort: 1,163 settled picks, window 2026-04-04 → 2026-04-25.
| Cohort | n | Win % | Wilson 95% CI | Variable-unit ROI | Flat-unit ROI |
|---|---|---|---|---|---|
| Top-10 | 10 | 50.0% | [23.7%, 76.3%] | -2.7% | -2.7% (n=10 noise) |
| Top-25 | 25 | 56.0% | [35.1%, 72.1%] | +10.12% | +10.07% |
| Top-50 | 50 | 51.0% | [37.5%, 64.4%] | +6.57% | -0.80% |
| Top-100 | 100 | 49.5% | [40.0%, 59.0%] | -7.86% | -7.86% |
sum(stored_profit_dollars) / sum(picks.units_field) × 100. Uses the bot's recommended per-pick units. Marketing-credible — answers "if you'd staked the bot's recommended units, what's your ROI?"sum(profit_at_$X_flat) / (n × $X) × 100, derived from result + odds_us. Treats every pick as the same dollar bet. The right metric for sizing decisions because uniform sizing is what production uses.The two metrics agree at top-25 (where unit distribution is near-flat) and diverge at top-50 (where ranks 26-50 carry units > 1 on a few winners that boost variable-unit). Both are valid measurements of different things.
The walk-forward test window is the most recent 20% of all settled picks. As new picks settle, the window slides forward. The numbers above are computed against settled picks as of the as-of timestamp at the top of this page, and will move as the database grows. The sizing-experiment snapshot is pinned for reproducibility.
The real-money curve has been underwater, hard. Measured on cumulative realized profit:
At 3% flat sizing on the top-25 selection cohort, alternate-season simulations produce:
Note on scope: those simulations were run against the selection cohort, not the on-chain cohort, and they are the reason the sizing rule is 3% rather than 10–15%. They are not a forecast for the real-money bot, whose realized drawdown is the number above. The live equity curve and its drawdown are tracked on /ledger and update as fills settle.
When any of the following fires, the bot freezes new picks and the cause is investigated before fresh selections resume.
model_prob expected calibration error (ECE) exceeds threshold (formal threshold pending live data). Indicates sport models are mis-calibrating probabilities.Each trip event is recorded with date, condition, and resolution in the changelog at the bottom of this page.
Three different questions, three different numbers. /ledger publishes all three side by side rather than picking the flattering one.
(equity - basis) / basis × 100. What the account actually did, compounding included. The number a person putting money in would feel.total_profit / total_wagered × 100. Per-bet edge. Currently +7.60% on the on-chain cohort. The industry-standard way to quote a betting record.These diverge under fractional sizing because the wallet turns over many times: at 3% per bet, a few hundred fills wager several multiples of the starting balance. A big wallet ROI on a small unit ROI mostly means compounding did the work; a big unit ROI on a small wallet ROI means the good bets happened while stakes were small. Both happen, which is why one number is never enough.
| Metric | Definition | Where it appears |
|---|---|---|
| Settled fills | Count of on-chain fills with a final result (WON, LOST, PUSH, or VOID) | /ledger, §4 |
| Win rate | wins / (wins + losses) — pushes excluded | /ledger, §4 |
| Unit ROI | total_profit / total_wagered × 100 | /ledger, §4, methodology |
| Wallet ROI | (equity - basis) / basis × 100 | /ledger |
| Flat-unit ROI | Profit if every fill had carried an identical stake | /ledger |
| Open exposure | Stake on fills placed but not yet settled | /ledger |
| Profit / Loss | Dollar profit summed across settled fills | /ledger, §4 |
| Max drawdown | Largest fall in cumulative realized profit from its running high-water mark | /ledger, §6 |
| Composite score | 0–100 rank, sum of capper + model + convergence + edge components | Internal selection signal |
| Convergence tag | Gold (3+ cappers + model + bot) / Silver (cappers only) / Bronze (model only) | Per-pick row badges |
An earlier "AI CONFIRMED ✓ NN%" badge appeared in the bet log column. That metric was not derived from model output. Its implementation was a deterministic hash of the pick text plus a base value of 62 if the pick won or 54 if it lost — visual decoration, post-hoc-biased toward winners.
The column was retired. The bet log replaces it with the actual convergence tag (Gold / Silver / Bronze) which is derived from real model + capper agreement. When NHL and NCAA models land, a real model_prob percentage column may return; until then there is no "AI Confirmed %" surface.
The claims in §4 are checkable without trusting us at all. Every fill is a transaction on SX Network with a hash, a timestamp, a price, and a size. Pull the ledger from the public endpoint behind /ledger, verify any row against the chain, and re-run the arithmetic: the totals in §4 are a sum over that table and nothing else.
This is the whole reason the published record is on-chain. A paper tracker can be re-based, re-cohorted, or quietly re-graded after the fact, and the reader has no way to detect it. A fill that already settled on a chain we do not operate cannot be moved. If our numbers ever disagree with the chain, the chain is right.
The composite-score formulas in §2 and the sizing math in §3 are fully specified here. The sizing-experiment cohort is frozen in our backtest archive and its published numbers do not retroactively change. As new fills settle they extend the live cohort forward; recalculations refresh the metrics with a new "as of" timestamp at the top of this page.
You have now read the entire method — the gates, the sample, the drawdown, the losing month.
Nothing above this line is marketing. Decide from the record.
Audit the ledger first if you would rather check than trust. That is what it is there for.
Related reading: we applied this same settled-ledger grading to the public handicappers we track — Are Sports Handicappers Actually Profitable? We graded 97 of them.
| Date | Change |
|---|---|
| 2026-04-26 | Initial publication. |
| 2026-05-11 | Retired V1 / V2 cohort framing. Single bot, all settled picks on the ledger. |
| 2026-07-28 | Real-money bot narrowed to moneylines only; spreads and totals retired after grading worse. |
| 2026-08-11 | Rebuilt around the on-chain record as the published proof. Added §4 on-chain record, live execution gates in §3, realized on-chain drawdown in §6, and the wallet / unit / flat-unit ROI set published on /ledger. |