CAPTRACKER · METHODOLOGY
CAPTRACKER BOT METHODOLOGY
real money, public wallet, every fill on-chain — here is exactly how it works
AS OF 2026-08-11
CONTENTS
  1. What the bot is
  2. Selection rule
  3. Sizing rule and execution gates
  4. The on-chain record
  5. Walk-forward results
  6. Drawdown disclosure
  7. Trip-wires
  8. Wallet ROI vs unit ROI
  9. Metric definitions
  10. Reproducibility

1. What the CAPTRACKER bot is

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.

One record, real money, no side numbers. There is no simulated bankroll, no "model portfolio," and no hypothetical ROI published anywhere on this site. If a number appears here, a signed transaction backs it.

2. Selection rule

Each scoring cycle, every candidate pick gets a composite score from 0–100 across four components:

ComponentRangeWhat it measures
capper_score0–40Source handicapper's track record, ROI, streak. Backed by the leaderboard.
model_score0–25Sport-specific model's agreement with the pick (see coverage table).
convergence_score0–20Signal strength when multiple cappers + model align on the same canonical bet.
edge_score0–10Closing-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).

Per-sport model coverage

SportModelmodel_score activeComposite leans on
MLBPoisson run-scoring (wOBA / FIP / park factors)YesAll four components
NBANetRtg / pace differential / B2B penaltiesYesAll four components
NHLNone (deferred)Nocapper + convergence + edge
NFLNone (offseason)Nocapper + convergence + edge
NCAAB / NCAAF / soccer / MMANoneNocapper + 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.

Capper score correctness

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. Sizing rule and execution gates

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:

GateLive valueWhy
Stake per fill3% of free walletFixed fraction, so sizing scales with results instead of drifting
Minimum stake$1.00Below this, gas and rounding dominate the bet
Rolling 24h stake cap15% of free walletCaps a single bad day even if the slate is full of qualifying picks
Fills per day5 maxThe variance budget is a day, not a cycle
MarketsMoneyline onlySince 2026-07-28. Spreads and totals matched poorly against the book
Odds band1.833 – 3.50 decimal−120 to +250 American. Heavy favorites and longshots both graded badly
Minimum edge0.0% fresh book / −2.0% fallbackEdge measured against the no-vig fair line at fill time
Book depth≥ 1× stakeRefuses to take a price the book cannot actually fill
Taker vig ceiling110%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.

Why 3%: sizing experiment (top-25 selection cohort, +10.07% flat unit ROI)

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:

SizingMedian finalDD p95>25% DD risk>50% DD risk
2%$1,04916.0%0.0%0.0%
3% (live)$1,07123.2%1.1%0.0%
5%$1,10736.2%6.4%0.2%
10%$1,14961.1%19.8%5.3%
15% (former)$1,12277.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."

Why no tier-graded sizing?

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.

4. The on-chain record

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.

MetricValue
Settled fills274
Record147W – 122L – 5 push
Win rate (pushes excluded)54.6%
Total staked$770.88
Realized profit+$58.62
Unit ROI+7.60%
First fill2026-05-11

Month by month

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.

MonthFillsW–LAvg stakeStakedP/LUnit ROI
2026-0510350–51$1.00$103.00−$2.36−2.29%
2026-067948–28$1.00$79.00+$18.93+23.96%
2026-077138–33$7.30$518.12+$30.84+5.95%
2026-08 (partial)2111–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 PICKS

Or audit the whole record first — every fill is on /ledger. We would rather you check.

What the bot actually bet

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.

5. Walk-forward backtest results

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.

Top-K performance

CohortnWin %Wilson 95% CIVariable-unit ROIFlat-unit ROI
Top-101050.0%[23.7%, 76.3%]-2.7%-2.7% (n=10 noise)
Top-252556.0%[35.1%, 72.1%]+10.12%+10.07%
Top-505051.0%[37.5%, 64.4%]+6.57%-0.80%
Top-10010049.5%[40.0%, 59.0%]-7.86%-7.86%

Why two ROI columns

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.

Cohort caveat

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.

6. Drawdown disclosure

Realized, on-chain

The real-money curve has been underwater, hard. Measured on cumulative realized profit:

We publish our worst moment. Almost nobody does. July was ugly: the curve gave back more than $100 from its high and stayed red for weeks. It recovered the entire drawdown and made a new high — which is exactly what a strategy with an edge is supposed to do, and exactly what you cannot find out about a tout who deletes losing posts. Size to this number, not to the +7.60%, and you will not be surprised by anything this bot does.

Simulated, from the sizing experiment

At 3% flat sizing on the top-25 selection cohort, alternate-season simulations produce:

In plain language: bankroll dipping 15–25% periodically is expected variance, not a sign the system is broken. Drawdowns deeper than 25% will happen occasionally (about 1 in 90 alternate-season simulations); drawdowns deeper than 50% effectively never (under our edge and sizing).

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.

7. Trip-wires (monitored invariants)

When any of the following fires, the bot freezes new picks and the cause is investigated before fresh selections resume.

  1. Edge degradation — if walk-forward top-25 ROI drops to top-50 levels (currently ~+6.5% variable-unit). Either the selection rule has stopped picking winners or noise has overwhelmed the signal.
  2. Sizing safety — if realized on-chain drawdown from the high-water mark exceeds the prior worst (−$106.43, 2026-07-21) as a share of the wallet at the time. Either variance is genuinely worse than modeled or the sizing assumptions are wrong.
  3. Model calibration — if model_prob expected calibration error (ECE) exceeds threshold (formal threshold pending live data). Indicates sport models are mis-calibrating probabilities.
  4. Loss streak — if a single-week losing streak exceeds 6 picks. Tonight's longest observed streak across the test cohort was 6; exceeding it is a tail event worth examining.

Each trip event is recorded with date, condition, and resolution in the changelog at the bottom of this page.

8. Wallet ROI vs unit ROI vs flat-unit ROI

Three different questions, three different numbers. /ledger publishes all three side by side rather than picking the flattering one.

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.

9. Definitions of every published metric

MetricDefinitionWhere it appears
Settled fillsCount of on-chain fills with a final result (WON, LOST, PUSH, or VOID)/ledger, §4
Win ratewins / (wins + losses) — pushes excluded/ledger, §4
Unit ROItotal_profit / total_wagered × 100/ledger, §4, methodology
Wallet ROI(equity - basis) / basis × 100/ledger
Flat-unit ROIProfit if every fill had carried an identical stake/ledger
Open exposureStake on fills placed but not yet settled/ledger
Profit / LossDollar profit summed across settled fills/ledger, §4
Max drawdownLargest fall in cumulative realized profit from its running high-water mark/ledger, §6
Composite score0–100 rank, sum of capper + model + convergence + edge componentsInternal selection signal
Convergence tagGold (3+ cappers + model + bot) / Silver (cappers only) / Bronze (model only)Per-pick row badges

"AI Confirmed %" (retired)

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.

10. Reproducibility

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.

GET THE PICKS

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.

Changelog (this page)

DateChange
2026-04-26Initial publication.
2026-05-11Retired V1 / V2 cohort framing. Single bot, all settled picks on the ledger.
2026-07-28Real-money bot narrowed to moneylines only; spreads and totals retired after grading worse.
2026-08-11Rebuilt 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.
CAPTRACKER · Dashboard · SX Public Ledger · Leaderboard · Daily Feed · Handicapper Study
Methodology updates are versioned. Past metric definitions and weight changes are recorded in the changelog above.