A Polymarket five-minute contract settles at a fixed moment. In the seconds before it does, the price behaves exactly as you would expect: it converges on the outcome, and by the last few seconds it reads 0.99. A price series shows a market that has made up its mind and is perfectly liquid.
The order book shows something else. Across 80 resolved BTC contracts, 94% of snapshots in the final ten seconds have nothing resting on one side. The price says 0.99. There is no 0.99 to trade against.
One contract, second by second
This is the Up token of a single BTC five-minute market through its last twenty seconds. Bid, ask, and the size resting at the best ask:
time bid ask ask size state
09:19:40 0.970 0.980 113.8 two-sided
09:19:41 0.980 0.990 1685.0 two-sided
09:19:42 0.970 0.980 118.7 two-sided
09:19:43 0.970 0.980 118.5 two-sided
09:19:44 0.950 0.960 109.0 two-sided
09:19:45 0.960 0.970 96.9 two-sided
09:19:46 0.980 0.990 674.0 two-sided
09:19:47 0.990 — — bids only — nothing to buy
09:19:48 0.990 — — bids only — nothing to buy
09:19:49 0.980 0.990 80.0 two-sided
09:19:50 0.990 — — bids only — nothing to buy
09:19:51 0.990 — — bids only — nothing to buy
09:19:52 0.990 — — bids only — nothing to buy
09:19:53 0.990 — — bids only — nothing to buy
09:19:54 0.990 — — bids only — nothing to buy
09:19:55 0.990 — — bids only — nothing to buy
09:19:56 0.990 — — bids only — nothing to buy
09:19:57 0.990 — — bids only — nothing to buy
09:19:58 0.990 — — bids only — nothing to buy
09:19:59 0.990 — — bids only — nothing to buyFor the first seven seconds it is an ordinary market: a one-cent spread, a hundred or more shares at the top of book, twice briefly six hundred and sixteen hundred. Then at 09:19:47 the ask side empties. It returns once, for one second, with 80 shares — not even enough to fill a 100-share order. From 09:19:50 it is gone for good.
The bid holds at 0.990 throughout. Somebody is still willing to buy. Nobody is willing to sell, because selling a contract at 0.99 that is about to pay 1.00 is simply a loss. The market has not become volatile or disorderly. It has become certain, and certainty is the end of trading.
How common is it
We took 80 resolved BTC five-minute contracts and read every one-second order book snapshot in their final minute — 9,600 snapshots — counting how many had an empty bid or ask side:
seconds to close snapshots one-sided
0–9s 1440 94.0%
10–19s 1600 79.1%
20–29s 1600 73.8%
30–39s 1600 64.6%
40–49s 1600 53.4%
50–59s 1600 39.7%
final 60s 9600 66.4%The gradient is the point. A minute out, two markets in five are already one-sided. Ten seconds out, nineteen in twenty are. Liquidity does not collapse at the bell; it drains steadily across the last minute, and the closer to settlement the less there is to trade against.
Why the price series cannot tell you this
A price is a single number. It says where the market is, not whether you could act on it. Two things are invisible in a price series and both matter here:
- Whether anything is resting at all. A last-trade or midpoint value exists whether or not there is an order behind it. In the table above the price reads 0.990 for thirteen consecutive seconds during which no purchase was possible.
- How much size is there. At 09:19:49 the ask reappeared at 0.990 with 80 shares. A 100-share order would have filled 80 and left the rest unfilled at any price.
Polymarket serves its own price history down to one-minute buckets, free, and it is good data — we say so on the Polymarket API pricing page. But a one-minute bucket contains this entire episode as a single value. The ten seconds where the market stopped functioning are not merely averaged away; at that resolution they never existed.
What this changes about a backtest
Any strategy that trades into settlement is affected, and the direction of the error is always the same: the backtest is optimistic.
- Entries that could not have happened. A rule that buys at 0.99 in the final ten seconds will fill in a price-based simulation and would not have filled in reality, 94% of the time.
- Exits that could not have happened. The mirror case is worse, because it is a position you cannot close. The bid persisted in our example, so selling was possible — but that is not guaranteed, and which side empties first depends on which way the contract is resolving.
- Returns computed at a price nobody offered. Marking a position at the last price is reasonable in a liquid market and meaningless in a market with an empty side.
The practical guard is dull but effective: before treating a fill as possible, check that the relevant side of the book is populated and holds the size you need. What an L2 snapshot contains goes through the fields.
Check it yourself
The dataset behind this is published openly, so the figure above is not something you need to take on trust. 897,192 snapshots across 805 resolved markets, CC BY 4.0, with a DOI:
import pandas as pd
df = pd.read_parquet("updown_5m.parquet")
# A snapshot is untradeable in one direction if either side is empty.
df["one_sided"] = (df.bid_prices.str.len() == 0) | (df.ask_prices.str.len() == 0)
final = df[df.seconds_to_close <= 60]
print(final.groupby(final.seconds_to_close // 10 * 10).one_sided.mean())It is on Zenodo with no signup, and mirrored on Hugging Face and Kaggle — all of them are listed here. The numbers in this post come from a sample of 80 contracts rather than the full dataset, so expect small differences; the gradient holds.
The shorter version
A five-minute prediction market spends its last few seconds with a price and no market. That is not a data defect and it is not disorder — it is what certainty looks like in an order book. It is also invisible at one-minute resolution, which is where most historical prediction market data lives, and it makes any backtest that trades into settlement read better than it should.