Methodology & Data Notes for Polymarket Up or Down Markets
Last updated: September 2026
This page describes where the numbers on UpDown Charts come from, how they are recorded, and where two superficially similar numbers are not the same number. If a figure on a market page is not explained here, treat it as unexplained and tell us.
Price sources
Five sources are recorded in parallel for all 28 markets (7 assets × 4 timeframes). They are separate series, never blended into a single "consensus" price:
| Source | What it is | Coverage |
|---|---|---|
| Binance spot | Exchange trade price, streamed live. | All 7 assets (HYPE from 2026-09-24) |
| Pyth Hermes | Aggregated oracle price feed. | All 7 assets; no data since 2026-08-26 (correction #2) |
| Chainlink | Chainlink price stream, relayed by Polymarket's live-data socket. First tick after a window opens is our captured price to beat. | All 7 assets (HYPE from 2026-09-24) |
| Polymarket CLOB | Order book — best bid/ask on the UP and DOWN tokens. | All 28 markets |
| Polymarket price-to-beat feed | Polymarket's crypto-price endpoint: the window's open and close as Polymarket publishes them (the Chainlink stream price at the window boundaries for 5m, 15m and 4h, which since 2026-08-07 is not the TWAP those windows settle on; the Binance 1-hour candle for 1h). | All 28 markets |
Per-asset availability is not uniform over time. HYPE's Binance and Chainlink series start on 2026-09-24, so earlier HYPE windows show fewer series and have no captured Chainlink price. Missing series are hidden rather than substituted.
Recording and retention
Every active market is sampled twice a second (every 500 ms) and the current value of each source is written; a source that has not published since the last sample repeats its last value for up to 60 seconds and is recorded as empty after that, so tick density is uniform rather than source-driven. Tick history is kept for 90 days and older partitions are dropped daily. Close price, outcome, volume and the settlement open are stored per window and are not pruned; windows recorded before April 2026 have no stored settlement open.
How a window resolves
Each window's outcome is the result Polymarket settled, read from its Gamma market API once the market is closed with a final 1/0 payout. Polymarket's rules compare the close to the open: close equal to or above open resolves UP, so an exact tie resolves UP; only a close below the open resolves DOWN. 5m, 15m and 4h windows settle on Chainlink's 60-second TWAP data stream (since 2026-08-07; 5m windows used a 30-second TWAP until 2026-08-14), 1h windows on the Binance 1-hour candle (HYPE: the Binance Futures HYPEUSDT contract). If Polymarket has not settled a window shortly after it ends, the recorder stores a provisional outcome from the open and close on Polymarket's crypto-price endpoint, by the same rule, and corrects it if the settled result differs. The order book is never used to decide an outcome.
The recorder sweeps for unresolved windows on boot and then hourly, so a restart or a temporary API failure delays a result but does not lose it. Final traded volume is read from Polymarket at resolution time.
Two different "price to beat" numbers
This is the most important distinction on the site.
- Captured price to beat — our own first Chainlink tick after the window opens. It is available within a second or so of the open, which is why the live strip can show a reference level immediately. It is our observation, not Polymarket's. HYPE has a captured value only from 2026-09-24, when its Chainlink series was added.
- Settlement open — the open price Polymarket publishes on its crypto-price endpoint for that window. On 1h windows (and 5m, 15m and 4h windows before 2026-08-07) it is the number the market resolves against. Since 2026-08-07 5m, 15m and 4h windows settle on a Chainlink TWAP, so it is the closest published reference, and the recorded outcome is Polymarket's settled result.
These two are usually close and sometimes are not. The measurement below is superseded and kept for the record. It was taken on an earlier, smaller sample from the 2-decimal stored copy of each value. The current figure is on the Observatory: a 3.2 bps median 1h offset over the most recent 200 1h windows per market as of 2026-09-24. The offset moves over time (the Observatory's 2026-07-26 build measured 7.67 bps the same way), so quote it with its sample.
Measured over the 1,403 recent resolved windows that have both numbers — HYPE is excluded entirely, since it had no Chainlink feed at the time — the median divergence is 1.13 basis points overall, with a 95th percentile of 440.2 bps. Substituting the captured value for the settlement open flips the sign of the computed move on 18.25% of those rows (256 of 1,403).
| Markets | Median divergence | Rows where the sign flips |
|---|---|---|
| BTC / ETH / BNB — 5m, 15m, 4h | 0.00 – 0.05 bps | 0% |
| SOL — 5m, 15m, 4h | 0.29 – 0.35 bps | 0 – 8% |
| Every 1h market (BTC, ETH, SOL, BNB) | 9.24 – 9.78 bps | 12 – 34% |
| XRP — all timeframes | 5.71 – 25.82 bps | 30 – 88% |
| DOGE — all timeframes | 125.85 – 442.12 bps | 0 – 56% |
The pattern is bimodal and has two distinct causes. On 5m, 15m and 4h windows for BTC, ETH and BNB the divergence is sub-basis-point noise: the Chainlink tick is effectively the API open (measured before 2026-08-07, when these windows still settled on the plain Chainlink stream). On 1h markets there is a systematic offset of a few basis points: Polymarket's hourly open is the Binance 1-hour candle open, not the Chainlink price at the top of the hour that our capture sees. The size of that offset is the number superseded above; the Observatory measures it at a 3.2 bps median, mostly one-sided: the Chainlink reading is above the settlement open in only 6.7% of 1h windows. For XRP and DOGE the dominant effect was storage precision: window close prices were stored at 2 decimals until 2026-07-26, which for DOGE (close ≈ 0.07) cannot represent a normal 5-minute move at all.
Because of this, resolved-window tables on market pages show the settlement open in the "price to beat" column and compute the move against it. The captured Chainlink value is labelled as a reference wherever it appears and is never presented as the settlement price.
The Observatory aggregates publish outcome and calibration statistics over the most recent resolved windows per market, computed by scripts/observatory/build-aggregates.mjs. That script recomputes this offset at full precision from the recorded series rather than from the older 2-decimal stored values, so its number, with its sample date, is the one to cite.
What a dash means
A "—" in a table is deliberate. It means one of:
- No settlement open was recorded for that window (windows from before April 2026 have none).
- No close price was recorded for that window.
- The move is smaller than the precision the close price is stored at — closes recorded before 2026-07-26 are stored at 2 decimals, so on those windows any move under half a cent is the rounding, not the market. Rather than print that number, the move is dashed and the outcome is shown as resolved. This is concentrated in the low-priced assets: for DOGE (close ≈ 0.07) a 2-decimal close cannot represent a normal window move at all, so nearly every older DOGE row is dashed, and many XRP rows are. It does not affect BTC or ETH, whose moves are orders of magnitude larger than the stored precision. Later closes are stored at full precision.
- The sign of the move disagrees with the resolved outcome. Most often this is a 5m, 15m or 4h window since 2026-08-07, which settles on a Chainlink TWAP rather than the published spot open and close. A contradictory row is never printed.
A dash never means "zero" and never means the outcome is in doubt. The outcome column is always the resolved outcome.
Corrections log
#1 — 2026-07-26 · Price to beat in resolved-window tables
Resolved-window tables displayed the captured Chainlink price to beat next to an outcome derived from Polymarket's settlement open, and computed the move from the captured value. Where the two sources diverged, the printed move could disagree with the printed outcome — a row could read "+30" and "DOWN". About 21% of displayed resolved rows were affected (measured over the newest 50 resolved windows per market, 1,400 rows; 18% over a wider 4,928-row sample). The tables now derive the displayed open and the move from the settlement source, and dash the move where stored price precision cannot represent it. Outcomes themselves were always taken from the settlement source and did not change.
As of 2026-07-26 the settlement open is also recorded on the window itself at resolution rather than only re-derived from stored ticks at display time; the displayed values are unchanged in meaning.
#2 — 2026-09-24 · Stale history, outcomes re-checked against Polymarket, Pyth
From 2026-08-21 to 2026-09-24 the resolved-window history on market pages, the dashboard, the API and the MCP server stopped at 2026-08-21: the scheduled job that rebuilt it was timing out on every run. The history is now a live view and is always current.
Stored outcomes were re-reconciled against Polymarket's settled results: 12,745 outcomes corrected and 499 filled (windows that had no outcome). There were three causes. The tie rule was inverted: a close equal to the open was stored DOWN, but Polymarket resolves a tie UP. 1h closes were read before the Binance candle was final. And since 2026-08-07 Polymarket settles 5m, 15m and 4h windows on Chainlink's 60-second TWAP stream (5m used a 30-second TWAP until 2026-08-14), which the spot open and close we compared cannot reproduce. Outcomes are now taken from Polymarket's settled result, with the price comparison used only as a provisional fallback.
Pyth Hermes stopped serving our requests on 2026-08-26 at 16:20 UTC, and the recorder kept writing the last price it had received. Pyth values recorded from 2026-08-26 to 2026-09-24 repeat that price and should be disregarded; they age out under the 90-day retention. A source that has not published for 60 seconds is now recorded as empty rather than as its last value.
#3 — 2026-09-24 · Observatory rebuilt on reconciled outcomes
The Observatory was rebuilt from the outcomes reconciled in #2. Its 2026-07-26 build reported that sides priced at 90% or higher with 60 seconds left lost 2.98% of the time (5.76% on 1h windows); that rate was overstated, by an amount the rebuild does not measure, by stored outcomes that disagreed with Polymarket's settlement, including 1h outcomes resolved from a Binance 1-hour close read before the candle was final. The 2026-09-24 build, on a different, mostly later sample, measures 0.78% (0.86% on 1h). Three other findings of the earlier build do not hold after reconciliation. It found heavy favourites winning slightly less often than priced; the tails now miss the other way (at 60 seconds the top decile, priced at a mean 0.987, resolved UP 99.47% of the time). It found the favourite-loss rate barely moving as the deadline approached; it now falls, from 0.78% at 60 seconds to 0.27% at 10 seconds. And it found the 1h rate roughly five times the 15m rate; it is now 0.86% against 0.85%. The 1h captured-versus-settlement offset does not depend on outcomes and moves over time: the 2026-07-26 build measured a 7.67 bps median on the most recent 200 1h windows per market at that date, and this build measures 3.2 bps over the most recent 200 1h windows per market as of 2026-09-24, the same way.
Related
What is a Polymarket up or down market? · API & MCP reference · All 28 markets