NoticePolymarket 5-minute and 15-minute Up/Down markets all settle on the 60-second TWAP, so the 30-second TWAP stream (twap30s) stops being collected and published from 2026-10-20 (UTC). Files already published are not affected.
Guide

Which price decides a Polymarket 5-minute market, and what the wrong one does to a backtest

A backtest of Polymarket crypto Up/Down markets has to grade every market: did Up or Down win? The obvious way is to compare the Chainlink BTC/USD price at the close with the price to beat. That is not the price these markets settle on, and on a close call the difference decides the result.

We graded the BTC 5-minute markets of the free sample day (2026-09-08) three ways, then asked a second question: how many seconds before the close could you have known the answer?

The stream each market names

A market line carries its settlement configuration in raw.cryptoMarketConfig. On the sample day, all 274 BTC 5-minute markets with a strike had twapLookbackSeconds of 60: it settles on the Chainlink 60-second TWAP, comparing the last TWAP value inside the market window with strike_value. The rule, and how it has changed over time, is on How a market settles; read it off each market rather than off the date.

Graded that way, 271 markets matched the outcome_prices Polymarket published, with none differing. Three more had no TWAP tick inside their window in the sample and were left out.

grading at the close against strike_value
  official  271/271 match outcome  (0 differ; skipped: no tick 3, closing tick unusable 0)
  prices    259/271 match outcome  (12 differ; skipped: no tick 0, closing tick unusable 0)
  twap30s   263/271 match outcome  (8 differ; skipped: no tick 0, closing tick unusable 0)
  |settlement close - strike| in USD: median 42.98, under $5: 25, under $20: 81 of 271
  flipped by prices: settlement-vs-strike gap median 5.25 USD, max 18.10
  flipped by twap30s: settlement-vs-strike gap median 3.38 USD, max 18.10

k seconds before the close, using only what had been RECEIVED by then:
  k=60  settle: 231/270  85.6%   prices: 248/270  91.9%   mid: 251/270  93.0%
  k=30  settle: 246/270  91.1%   prices: 259/270  95.9%   mid: 266/270  98.5%
  k=10  settle: 261/270  96.7%   prices: 262/270  97.0%   mid: 269/270  99.6%
  k=5   settle: 263/270  97.4%   prices: 259/270  95.9%   mid: 270/270 100.0%
  k=2   settle: 266/270  98.5%   prices: 259/270  95.9%   mid: 270/270 100.0%

Abridged output of the analysis; every figure on this page comes from it.

Grade with the wrong price and some results flip

Keeping the strike and the window the same and only swapping the stream:

The flipped markets were close calls. With the instantaneous price, the settlement close of a flipped market sat a median $5.25 from the strike and never more than $18.10. That is not a rare situation: 25 of the 271 markets closed within $5 of the strike and 81 within $20, against a median distance of $42.98. If a strategy concentrates on markets trading close to the strike, grading on the wrong stream can change its backtest by more than the market-level rate suggests; check its own fills market by market.

  • Instantaneous Chainlink price: 12 of 271 outcomes flipped, 4.4%.
  • 30-second TWAP: 8 of 271 flipped, 3.0%. It sits in the same archive as the 60-second stream, so it is an easy one to pick up by mistake.

How early could you have known?

Next, k seconds before each close, we took the latest value that had been received by then (by recv_ms, not by the timestamp the feed stamps on itself, so nothing that arrived later leaks in) and checked whether it already pointed at the final result. For the two Chainlink streams that means its side of the strike; for the order book, whether the Up token's mid was above 0.5. Out of 270 markets with data at every cutoff:

The TWAP lags. A minute out, its value mostly describes the minute before, so it is the weakest of the three early on and only pulls ahead of the instantaneous price in the last few seconds, as it closes in on the number that will settle.

The instantaneous price is the better forecaster early and the worse one at the end, because it is not what settles: it sat at 95.9% from five seconds out while the TWAP kept improving.

At each cutoff measured here, the Up mid picked the winner more often than either feed: the quotes already leaned the way the TWAP would land. This table measures direction only, not the price you would have paid, so a near-expiry strategy still has to be backtested against the prices that were on the book at the time rather than an assumed fair value.

  • 60s before the close: settlement TWAP 85.6%, instantaneous price 91.9%, Up mid 93.0%.
  • 30s: TWAP 91.1%, instantaneous 95.9%, mid 98.5%.
  • 10s: TWAP 96.7%, instantaneous 97.0%, mid 99.6%.
  • 5s and 2s: TWAP 97.4% then 98.5%, instantaneous 95.9% at both, mid on the winning side in all 270 markets at both.

A checklist for grading Up/Down markets

  • Read the stream off the market. twapLookbackSeconds on each market line, not a rule keyed on the date.
  • Compare fixed-point integers. full_accuracy_value against strike_value, both at 1e18, with greater-than-or-equal meaning Up.
  • Take the closing tick by timestamp. Frames are archived as they were received, so the last row of a file is not necessarily the last tick.
  • Gate early signals by receive time. A tick stamped before your decision time may have arrived after it.
  • Price near-expiry trades against the book. The mid picked the winner most of the time at the cutoffs measured here, which says nothing about profit: backtest the fill price, the markets where the direction was wrong, and the fees together.

Reproducing this

The figures come from the free sample day, 2026-09-08: BTC 5-minute markets, the three Chainlink streams and the best bid/ask file, with no key or signup, under CC BY 4.0, and also on Kaggle and Hugging Face. The sample day changes from time to time, so a newer one prints different numbers.

The grading step is the recompute script on How a market settles; point the file it reads for the 60-second stream at the instantaneous or 30-second file to see the flips. For the early-knowledge figures, keep only rows whose recv_ms is at or before the cutoff, then take the latest of those by its own timestamp.

To run a strategy over these markets with the grading done for you, use the hosted backtester, or pip install outcometick and replay the sample locally.

Related