
On 2026-08-07 Polymarket’s crypto up/down markets stop settling on a closing snapshot and start settling on a time-weighted average price. This dataset is the real June 2026 order flow — every book actually observed — re-priced and re-labelled as if that rule had already been in force. It lets you backtest the new regime on history that never traded under it.
The order flow is untouched. The settlement value it is priced against is not.
The market resolves on the underlying price at a single instant — the close. One print decides the cycle, and the last seconds carry all the settlement risk.
The market resolves on the average price over the final 30 seconds. Single prints stop deciding cycles, and 6.2% of June 2026’s 5-minute cycles resolve to the other side.
Every Up/Down level, re-quoted against the TWAP settlement value at 1-second cadence. price_shift ships alongside, so subtracting it recovers the original observed book exactly.
Each cycle resolves under the snapshot rule and the TWAP rule, so you can isolate the cycles the change actually flips instead of guessing at them.
Labels from Polymarket's own RTDS settlement feed, plus Binance spot as *_binance columns and a source_disagrees flag on every cycle where the two differ.
This is simulated counterfactual data. It is honest about what it can and cannot tell you, and so are we.
price_shift recovers the original exactly.Polymarket published the TWAP window lengths (30s for 5-minute markets). It did not publish the window edge: Chainlink states it does not publish the custom feed’s sampling boundaries, weighting, rounding or missing-input behaviour, and warns against reproducing the value without a spec. We assume the last 30 seconds strictly before close. Whether the market open also becomes an average is unstated; we assume a single snapshot at open, unchanged — if it averages too, the winner-change rate rises materially. Both assumptions are recorded in every manifest, and the generator that produced this dataset ships inside the ZIP so you can re-run it under your own.
Same treatment, other cycle and month. Each is sold separately.
Every row is one outcome token per second — the 19 standard order-book columns, plus price_shift (the probability-units shift applied to that row; subtract it to recover the original observed price exactly):
| Field | Type | Description |
|---|---|---|
time | timestamp | Snapshot time (UTC, 1-second cadence) |
slug | str | Market cycle slug (e.g. btc-updown-5m-…) |
outcome | str | "Up" or "Down" |
market_id | str | Polymarket market (condition) id |
asset_id | str | CLOB token id for this outcome |
bids | list<{price,size}> | Full bid book, best first |
asks | list<{price,size}> | Full ask book, best first |
best_bid | float | Top-of-book bid |
best_ask | float | Top-of-book ask |
mid_price | float | (best_bid + best_ask) / 2 |
spread | float | best_ask − best_bid |
n_bids | int | Bid level count |
n_asks | int | Ask level count |
top_bid_size | float | Size at best bid |
top_ask_size | float | Size at best ask |
sum_bid_size | float | Total size across bid levels |
sum_ask_size | float | Total size across ask levels |
microprice | float | Size-weighted mid price |
ob_imbalance | float | Bid/ask depth imbalance |
One row per cycle, in resolution/<COIN>.parquet. This is where both settlement rules and both price sources sit side by side:
| Field | Type | Description |
|---|---|---|
coin | str | Underlying (BTC/ETH/SOL/XRP/BNB/DOGE) |
day | date | UTC day the cycle belongs to |
ts | int | Cycle open timestamp |
open | float | Opening reference price (RTDS settlement feed) |
close_snapshot | float | Closing price under the OLD snapshot rule |
twap_close | float | Closing price under the NEW TWAP rule |
winner_snapshot | str | Up / Down under the snapshot rule |
winner_twap | str | Up / Down under the TWAP rule |
winner_changed | bool | True where the two rules disagree |
move_bp | float | Cycle move in bp, snapshot rule |
move_bp_twap | float | Cycle move in bp, TWAP rule |
open_binance | float | Opening price from Binance spot (alternate source) |
close_snapshot_binance | float | Snapshot close, Binance spot |
twap_close_binance | float | TWAP close, Binance spot |
winner_snapshot_binance | str? | Snapshot winner per Binance; null where Binance has no data |
winner_twap_binance | str? | TWAP winner per Binance; null where Binance has no data |
source_disagrees | bool | True where RTDS and Binance disagree on winner_twap |