Methodology & Data Notes for Polymarket Up or Down Markets

Last updated: July 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:

SourceWhat it isCoverage
Binance spotExchange trade price, streamed live.All assets except HYPE
Pyth HermesAggregated oracle price feed.All 7 assets
ChainlinkOn-chain oracle price. First tick after a window opens is our captured price to beat.All assets except HYPE
Polymarket CLOBOrder book — best bid/ask on the UP and DOWN tokens.All 28 markets
Polymarket price-to-beat feedPolymarket's crypto-price endpoint: the window's open and close prices, i.e. what settlement uses.All 28 markets

Per-asset availability is not uniform. HYPE has no Binance spot pair and no Chainlink feed in our configuration, so HYPE charts show fewer series and HYPE rows have no captured Chainlink price at all. 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, 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 and volume are stored per window and are not pruned. The settlement open is not — it is only recoverable from tick history, so it disappears with the 90-day tick retention.

How a window resolves

Resolution is price-based and comes from Polymarket's crypto-price endpoint: the window's close price is compared to its open price. Close strictly above open resolves UP; anything else, including an exact tie, resolves DOWN. The order book is never used to decide an outcome, and Polymarket's closed flag is never used either — it lags actual settlement.

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. No Chainlink feed for HYPE means no captured value for HYPE.
  • Settlement open — the open price Polymarket publishes on its crypto-price endpoint for that window. This is the number the market actually resolves against.

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 figures come from the full-precision recomputation on the Observatory, where the 1h offset is a 7.67 bps median rather than the 9.24 to 9.78 bps quoted here.

Measured over the 1,403 recent resolved windows that have both numbers — HYPE is excluded entirely, since with no Chainlink feed there is nothing to compare — 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).

MarketsMedian divergenceRows where the sign flips
BTC / ETH / BNB — 5m, 15m, 4h0.00 – 0.05 bps0%
SOL — 5m, 15m, 4h0.29 – 0.35 bps0 – 8%
Every 1h market (BTC, ETH, SOL, BNB)9.24 – 9.78 bps12 – 34%
XRP — all timeframes5.71 – 25.82 bps30 – 88%
DOGE — all timeframes125.85 – 442.12 bps0 – 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. On every 1h marketthere is a systematic offset of several basis points: Polymarket's hourly open is not the price at the top of the hour that a Chainlink capture sees. The size of that offset is the number superseded above; the Observatory measures it at a 7.67 bps median, one-sided, with the Chainlink reading below the settlement open. For XRP and DOGE the dominant effect is storage precision: window close prices are stored at 2 decimals, 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 openin 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 same windows, computed by scripts/observatory/build-aggregates.mjs. That script recomputes this offset at full precision from the recorded series rather than from the 2-decimal stored value, so its number is the one to cite.

What a dash means

A "—" in a table is deliberate. It means one of:

  • No settlement open is available for that window (it comes from tick history, which is kept for 90 days).
  • No close price was recorded for that window.
  • The move is smaller than the precision the close price is stored at — closes are stored at 2 decimals, so 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 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.
  • The sign of the move disagrees with the resolved outcome, which means the two numbers did not come from the same snapshot. 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.

Related

What is a Polymarket up or down market? · API & MCP reference · All 28 markets