Prediction Calibration
prediction_calibrationREALIZED win rate by shown price and minutes elapsed for short-horizon crypto up/down markets, net of taker fee — read from our own settled-outcomes archive, not from live prices. Answers the one question no venue will: "a side shown at 82 with five minutes left, how often did it ACTUALLY win?" Returns a grid of (price bucket x minute elapsed) -> n, realized_win_rate_pp, mean_shown_price_pp, calibration_gap_pp (realized minus shown — zero means the book is calibrated), breakeven_win_rate_pp (the shown price plus the taker fee that was actually in force for that market), and net_edge_pp (realized minus breakeven, which is what a taker would have kept). WHY AN ARCHIVE EXISTS AT ALL: a settled 15-minute window is exactly what these venues stop serving. Measured 2026-10-22, a polymarket.com window drops out of the default market listing within minutes of closing (its trade tape and resolution stay retrievable by a closed-market lookup, which the collector now uses), and the other venues serve settled windows only briefly or thinly. So this tool reads a local archive collected window-by-window as they settle. THE THREE VENUES ARE NEVER POOLED. polymarket.com settles on a whole-window Chainlink BTC/USD 60s TWAP; polymarket-us and Kalshi settle on a CF Benchmarks BRTI endpoint average. A whole-window average and an endpoint average are different random variables, so venue:"all" returns one grid PER VENUE and venues_pooled is always false. EVERY RATE CARRIES ITS 95% INTERVAL, AND EVERY EDGE SAYS WHETHER IT SURVIVES IT. Each cell gives realized_win_rate_ci95_lo/hi_pp (Wilson, so it never reports an impossible win rate above 100), the same interval carried onto net_edge_ci95_lo/hi_pp, and net_edge_distinguishable_from_zero. READ THAT BOOLEAN BEFORE net_edge_pp: at these sample sizes most cells are false, meaning the interval straddles zero and a net_edge_pp of +4pp is NOT evidence of an edge. For scale, at a 90% win rate even n=300 gives a 95% half-width of ~3.4pp while net edges here run +2 to +4pp — so a comfortable-looking sample still cannot call a small edge real. verdict says it per cell in plain words, and the first note says how many cells survived. A THIN CELL WITHHOLDS ITS RATE ENTIRELY. Any bucket holding fewer than 30 settled windows reports status "thin" with realized_win_rate_pp and every interval null rather than printing a rate from a sample too small to mean anything — a 2-sample "100% win rate" is the most misleading thing this tool could say. ALWAYS READ coverage BEFORE THE GRID: it gives the first and last window held, windows_total vs windows_settled, every UTC day inside the span with no windows at all, and the longest run of consecutive missing windows. A grid over a store with a three-day hole looks entirely normal and is measuring a different population. mean_fill_price_pp and fill_vs_shown_pp are populated for polymarket.com only — it is the one venue of the three that publishes a trade tape for these markets, so it is the only place realized FILL can be compared with the shown price instead of assumed equal to it.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| asset | No | btc (default) | eth | sol | xrp | bnb. Coverage differs by venue: polymarket and polymarket-us carry btc/eth/sol/xrp, Kalshi carries btc/eth/bnb. | |
| venue | No | polymarket | polymarket-us | kalshi | all (default polymarket). "all" returns one grid per venue, never a merged one. | |
| minute | No | Minutes elapsed since window open, 0-based. Omit for the full grid; pass 5 for the "five minutes in" row only, which is also the cheapest query. | |
| horizon | No | 15m (default). 5m | 1h | 1d are accepted but only 15m is collected today, so another value returns coverage.windows_total 0 rather than an error. | |
| bucket_pp | No | Price-bucket width in percentage points: 5 | 10 (default) | 20 | 25 | 50. Must divide 100, so the last bucket is never narrower than the rest. | |
| side_convention | No | "favorite" (default) folds each window onto whichever side was the favorite — the frame published claims about early favorites use. "yes" keeps the venue own YES/Up side. |