1-second aggregates: columns and preview

One parquet table per source and UTC day, built from the raw files of the same day: a row per second, stamped on the collector's receive clock. Every file records in its footer the raw file it was built from and that file's sha256, so an aggregate can be checked against its source.

There are three table shapes: cex_1s for the four exchanges, pm_1s for Polymarket and oracle_1s for Chainlink.

The tables below are drawn from a real free sample: the first rows of each file, as they are in it. Download the sample or see the raw.

Conventions

Time
ts is timestamp[ns, UTC] and marks the start of the bar: bars are left-closed, [ts, ts + 1 s).
The clock
Bars are stamped on the collector's receive clock, not on the venue's. It is the only clock on every message of every venue and it is the same physical clock for all of them, so joining two venues on ts is exact; and it is when the information was actually available to a participant. event_lag_ms returns what this costs: the median of receive time minus venue time over the bar. Subtract it for venue time. A large value means the messages arrived late in a burst.
Sizes
Every column ending in _size, _size_NN, _depth_* or quote_volume is in the quote currency (USDT, USD, USDC), never in the base asset and never in contracts. Base size is recoverable: divide by the price in the same row. volume and taker_buy_volume are in the base asset, as the names usually mean.
Complete calendar
Every second of the day is present: a second in which nothing happened is a row with n_messages = 0. The exception is Polymarket, which has rows only while a market is quoted.
Carried forward, and not
A silent bar keeps the last quote and the last book — the quote is still the standing quote — and says how stale it is in quote_age_ms, book_age_ms and n_messages; filter on those. book_valid is not that filter: it says the book was provably in sync when last updated, not that it was updated recently. Trade columns are never carried: no trade is trades = 0 and a null price.
Nulls
A missing value is a parquet null. There are no NaNs standing in for nulls and no zeros standing in for “unknown”.
Prices are float64
float32 would round at the scale the data measures.
Provenance
The footer carries schema_version, source_file, source_sha256, producer, bucket_rule and clock. The generation time is deliberately absent, so rebuilding from the same input gives the same bytes.

Polymarket

polymarket.<coin>.<market>_<day>.v4.1s.parquet · table pm_1s

One row per second per outcome token, both the Up and the Down token, while the market is quoted — so the table is far shorter than a day (about 270 thousand rows for a 5-minute coin). Prices are probabilities between 0 and 1. Keyed and sorted by (ts, condition_id, asset_id).

Preview

Loading the preview…

Columns (82)

Market

ColumnTypeMeaning
ts timestamp[ns, UTC] Start of the bar, on the collector's receive clock.
condition_id string Market id.
asset_id string The outcome token: a decimal uint256, it is a string and has to stay one.
outcome string What this token pays on: Up or Down.
coin string The coin, e.g. btc.
interval_min int16 Market length in minutes, 5 or 15.
market_start_ts timestamp[ns, UTC] Start of the market's own window.
market_end_ts timestamp[ns, UTC] End of the market's own window.
winning_outcome string The settled outcome, the same on every row of a market. A label from the future — never a feature.
tick_size double Current price step; it changes during a market's life (0.01 to 0.001).
quote_currency string Always USDC.

Quote

ColumnTypeMeaning
bid_price double Best bid at the end of the bar: a probability, 0 to 1.
bid_size double Notional at the best bid, USDC.
ask_price double Best ask.
ask_size double Notional at the best ask.
mid_open double Mid at the start of the second.
mid_high double Highest mid.
mid_low double Lowest mid.
mid_close double Mid at the end of the second.
mid_twap double Time-weighted mid.
spread_twap double Time-weighted spread in probability points — basis points mean nothing near a price of zero.
bbo_count int32 Best-quote updates in the bar.
quote_age_ms int32 Age of the quote at the end of the bar.

Executions

ColumnTypeMeaning
open double First execution price in the bar; null when nothing traded.
high double Highest execution price.
low double Lowest execution price.
close double Last execution price.
vwap double Volume-weighted average execution price.
volume double Shares traded.
quote_volume double Notional traded, USDC.
taker_buy_volume double Shares bought by takers.
taker_buy_quote_volume double The same, USDC.
trades int32 Number of executions.

Order book, at the end of the bar

ColumnTypeMeaning
bid_price_NN / bid_size_NN double The ten best bid levels, best first (00 … 09): price and notional.
ask_price_NN / ask_size_NN double The ten best ask levels.
bid_size_total double The whole bid ladder, summed. The book of a market is small and known entirely.
ask_size_total double The whole ask ladder, summed.
bid_levels int32 Number of price levels on the bid side.
ask_levels int32 Number of price levels on the ask side.

Quality

ColumnTypeMeaning
n_messages int32 Messages for this token in the bar.
book_updates int32 Changes to resting orders — not trades: it counts orders placed and pulled without trading.
event_lag_ms int32 Median of receive time minus the venue's time.
book_age_ms int32 Time since the last book update at the end of the bar.
book_valid bool The replayed book was in sync.

Left out on purpose

Notes

Binance

binance.<coin>_<day>.v4.1s.parquet · table cex_1s

One row per second per instrument — spot and perpetual as separate rows, a complete calendar of 86,400 seconds each, so 172,800 rows a day. Keyed and sorted by (ts, symbol, instrument_class).

Preview

Loading the preview…

Columns (83)

Identity

ColumnTypeMeaning
ts timestamp[ns, UTC] Start of the bar, on the collector's receive clock.
exchange string binance, bybit, okx or coinbase.
symbol string The venue's own name: BTCUSDT, BTC-USDT-SWAP, BTC-USD.
instrument_class string spot or perp. Binance and Bybit call both their spot pair and their perpetual BTCUSDT, so symbol alone is not a key.
base string The base asset, e.g. BTC.
quote_currency string USDT or USD. Treated as the same 1.0; no conversion is applied.
contract_size double Base asset per contract: 1.0, except on OKX swaps (see the OKX notes).
size_unit string Always quote_notional: every *_size* column is in the quote currency.

Quote

ColumnTypeMeaning
bid_price double Best bid at the end of the bar.
bid_size double Notional standing at the best bid, quote currency.
ask_price double Best ask at the end of the bar.
ask_size double Notional standing at the best ask.
mid_open double Mid price at the start of the second.
mid_high double Highest mid within the second.
mid_low double Lowest mid within the second.
mid_close double Mid price at the end of the second.
mid_twap double Time-weighted mid over the second: keeps the shape of the second that the last value loses.
spread_twap_bps double Time-weighted spread, basis points.
bbo_count int32 Best-quote updates in the bar.
quote_age_ms int32 Age of the quote at the end of the bar: tells a quiet market from a dead feed.

Trades

ColumnTypeMeaning
open double First trade price in the bar. Null when nothing traded — the previous close is not carried forward.
high double Highest trade price.
low double Lowest trade price.
close double Last trade price.
vwap double Volume-weighted average trade price.
volume double Traded volume in the base asset.
quote_volume double Traded volume in the quote currency. Not derivable from volume exactly, so both are kept.
taker_buy_volume double The part of volume where the taker bought, base asset.
taker_buy_quote_volume double The same, quote currency.
trades int32 Number of trades. 0 when none.
taker_side_inferred bool true on Coinbase only: the taker side is derived there, not given by the protocol.

Order book, at the end of the bar

The book is replayed from the raw messages. Depth is computed on the whole replayed book, not on the ten levels.

ColumnTypeMeaning
bid_price_NN / bid_size_NN double The ten best bid levels, best first (00 … 09): price, and notional at the level in the quote currency.
ask_price_NN / ask_size_NN double The ten best ask levels, the same.
bid_depth_1bps double Notional resting within 1 basis point of the mid, bid side.
bid_depth_2bps double Within 2 basis points.
bid_depth_5bps double Within 5 basis points.
ask_depth_1bps double Within 1 basis point of the mid, ask side.
ask_depth_2bps double Within 2 basis points.
ask_depth_5bps double Within 5 basis points.
book_span_bps double How far the maintained book reaches, the narrower side. Read every depth column against it: a venue that keeps few levels cannot have depth beyond its reach, and that is a limit of the subscription, not a thin market.

Quality

ColumnTypeMeaning
n_messages int32 Messages of any kind for this instrument in the bar. 0 means silence.
event_lag_ms int32 Median of receive time minus the venue's time over the bar's messages; null if none carried a venue clock.
sequence_gaps int32 Sequence discontinuities detected in the bar.
book_valid bool The replayed book was provably in sync when last updated. Read it with book_age_ms.
book_age_ms int32 Time since the last depth update, at the end of the bar.

Notes

Bybit

bybit.<coin>_<day>.v4.1s.parquet · table cex_1s

The same table as Binance: spot and perpetual as separate rows, 172,800 rows a day.

Preview

Loading the preview…

Columns (83)

The same table as Binance — 83 columns, listed there. What differs is in the notes below.

OKX

okx.<coin>_<day>.v4.1s.parquet · table cex_1s

The same table: spot and swap as separate rows, 172,800 rows a day.

Preview

Loading the preview…

Columns (83)

The same table as Binance — 83 columns, listed there. What differs is in the notes below.

Notes

Coinbase

coinbase.<coin>_<day>.v4.1s.parquet · table cex_1s

The same table, spot only: 86,400 rows a day. There is no BNB file.

Preview

Loading the preview…

Columns (83)

The same table as Binance — 83 columns, listed there. What differs is in the notes below.

Notes

Limits worth knowing