Rolling market statistics
This dataset includes fields such as last price, rolling price change, high/low, and base or quote volume when published by the venue.
Rolling Ticker Statistics Dataset
Exchange-published rolling price and volume statistics normalized across supported spot and derivatives venues. This is ticker history, not best bid/ask quote data.
No credit card · The sample is one real hourly Parquet file and needs no API key
Is this the right dataset?
Use this dataset for historical rolling market statistics. Choose tick trades for executions or reconstruct the L2 order book for best bid, best ask, spread, and depth.
This dataset includes fields such as last price, rolling price change, high/low, and base or quote volume when published by the venue.
A ticker update summarizes market state. It does not identify every execution; use historical tick trades for that job.
View datasetThe normalized ticker schema does not include quote fields. Derive top of book from sequence-safe L2 replay instead.
View datasetSample
The first rows of one real hour: BTCUSDT on Binance Futures, 2026-09-02 at 12:00 UTC. One row per exchange ticker update.
binance_futures/2026-09-02/12/BTCUSDT_ticker.parquetDownload full file| received_time | event_time | symbol | price_change | price_change_percent | weighted_average_price | last_price | last_quantity | open_price | high_price | low_price | base_asset_volume | quote_asset_volume | statistics_open_time | statistics_close_time | first_trade_id | last_trade_id | total_trades |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1788350400703494482 | 1788350400548 | BTCUSDT | -1267.80 | -1.624 | 77270.69 | 76788.60 | 0.044 | 78056.40 | 78396.90 | 76151.90 | 162605.809 | 12564663452.39 | 1788264000000 | 1788350400536 | 8039708740 | 8043601807 | 3876184 |
| 1788350401710400018 | 1788350401453 | BTCUSDT | -1274.10 | -1.632 | 77270.68 | 76782.30 | 0.052 | 78056.40 | 78396.90 | 76151.90 | 162609.355 | 12564935728.32 | 1788264000000 | 1788350401450 | 8039708740 | 8043601954 | 3876331 |
| 1788350402713852147 | 1788350402505 | BTCUSDT | -1279.10 | -1.639 | 77270.68 | 76777.30 | 0.001 | 78056.40 | 78396.90 | 76151.90 | 162611.065 | 12565067022.81 | 1788264000000 | 1788350402502 | 8039708740 | 8043602031 | 3876408 |
| 1788350403709035535 | 1788350403461 | BTCUSDT | -1283.50 | -1.644 | 77270.66 | 76772.90 | 0.345 | 78056.40 | 78396.90 | 76151.90 | 162615.628 | 12565417345.72 | 1788264000000 | 1788350403448 | 8039708740 | 8043602149 | 3876526 |
| 1788350404707551186 | 1788350404521 | BTCUSDT | -1283.90 | -1.645 | 77270.64 | 76772.50 | 0.014 | 78056.40 | 78396.90 | 76151.90 | 162621.512 | 12565869075.70 | 1788264000000 | 1788350404518 | 8039708740 | 8043602187 | 3876564 |
| 1788350405715475933 | 1788350405406 | BTCUSDT | -1283.90 | -1.645 | 77270.64 | 76772.50 | 0.030 | 78056.40 | 78396.90 | 76151.90 | 162621.959 | 12565903393.01 | 1788264000000 | 1788350405402 | 8039708740 | 8043602204 | 3876581 |
Use cases
Coverage
Every venue is stored under its own exchange ID, so spot and derivatives never mix. Bars show each venue's history from its first hourly file to today, or to its last file for a venue that is no longer collected. Symbol counts are live from the symbols API.
| Venue | Exchange ID | Market | History | Ticker symbols |
|---|---|---|---|---|
| binance_futures | Futures | 2025-06-2815 mo | 916 | |
| binance_spot | Spot | 2025-06-2815 mo | 2,031 | |
| bybit | Futures | 2025-06-2815 mo | 1,459 | |
| bybit_spot | Spot | 2025-06-2815 mo | 833 | |
| okx_futures | Futures | 2025-06-2815 mo | 610 | |
| okx_spot | Spot | 2025-06-2815 mo | 1,579 | |
| bitget_futures | Futures | 2025-07-1514 mo | 1,156 | |
| bitget_spot | Spot | 2025-07-1514 mo | 2,854 | |
| kraken_derivatives | Futures | 2025-06-2815 mo | 661 | |
| kraken_spot | Spot | 2025-06-2815 mo | 1,656 | |
| aster_futures | Futures | 2025-09-2912 mo | 629 | |
| bitmex | Futures | 2025-09-29 to 2026-09-2212 mo | 156 | |
| lighter | Perpetuals & Spot | 2025-12-309 mo | 245 |
Schema · 18 columns
Each row is an exchange-published ticker update with rolling price, volume, and trade-count fields when the venue supplies them. Nullable fields reflect venue differences and incremental messages.
| Column | Type | Description |
|---|---|---|
| received_time | INT64 | Unix timestamp (nanoseconds) when our system received the ticker event |
| event_time | INT64 | Unix timestamp (exchange dependent on timescale) when the exchange generated the ticker |
| symbol | STRING | Trading pair symbol (e.g., 'BTCUSDT') |
| price_change | STRINGnullable | Absolute price change over 24h period (stored as string for precision) |
| price_change_percent | STRINGnullable | Price change over the 24h period in percent (-2.07 means -2.07 %). Bybit history before the 2026-09 data-integrity release holds a fraction (-0.0207) |
| weighted_average_price | STRINGnullable | Volume-weighted average price over 24h period |
| last_price | STRINGnullable | Most recent trade price |
| last_quantity | STRINGnullable | Quantity of the most recent trade |
| open_price | STRINGnullable | Opening price at start of 24h period |
| high_price | STRINGnullable | Highest price during 24h period |
| low_price | STRINGnullable | Lowest price during 24h period |
| base_asset_volume | STRINGnullable | Total volume in base asset (e.g., BTC in BTCUSDT). OKX perpetual swap history before the 2026-09 data-integrity release holds contracts (see venue notes) |
| quote_asset_volume | STRINGnullable | Total volume in quote asset (e.g., USDT in BTCUSDT). OKX perpetual swap history before the 2026-09 data-integrity release holds base-coin volume |
| statistics_open_time | INT64nullable | Unix timestamp when the 24h statistics period started |
| statistics_close_time | INT64nullable | Unix timestamp when the 24h statistics period ended |
| first_trade_id | INT64nullable | ID of the first trade in the 24h period |
| last_trade_id | INT64nullable | ID of the last trade in the 24h period |
| total_trades | INT64nullable | Total number of trades executed during 24h period |
Quickstart
The example loads BTCUSDT from Binance Futures for 2026-09-02. Change the symbol, exchange, or dates to pull any other slice of the archive.
pip install cryptohftdataSign up with email or Google, then generate a key from your dashboard. No credit card.
Create accountPaste the snippet, replace YOUR_API_KEY, and you get a pandas DataFrame with the columns listed above.
import cryptohftdata as chd
client = chd.CryptoHFTDataClient(api_key="YOUR_API_KEY")
df = client.get_ticker(
symbol="BTCUSDT",
exchange=chd.exchanges.BINANCE_FUTURES,
start_date="2026-09-02",
end_date="2026-09-02",
)
print(df.head())
print(f"Ticker updates: {len(df):,}")curl --fail --location \
"https://api.cryptohftdata.com/download?file=binance_futures/2026-09-02/12/BTCUSDT_ticker.parquet" \
-o BTCUSDT_ticker_12.parquetCaveats
Exchange feeds differ in subtle ways. These are the details that matter for accurate backtests, replay pipelines, and features. Missing hours and pending corrections for every venue are listed on Known Gaps & Corrections.
Ticker rows are rolling market-statistics updates, not individual trade executions and not fixed-interval bars.
The normalized ticker schema does not include best bid or best ask. Reconstruct the L2 order book when you need top-of-book quotes or spread.
Fields are nullable because venues publish different statistics and some incremental ticker messages omit values that did not change.
Rolling-window definitions, event frequency, volume units, and timestamp units can differ by exchange; do not compare fields across venues without checking semantics.
price_change_percent is in percent. Bybit history before the 2026-09 data-integrity release holds a fraction (-0.0207 for -2.07 %), and OKX perpetual swap volumes before the release hold contracts in base_asset_volume and base coin in quote_asset_volume.
This page starts on 2025-06-28 based on the earliest stored hourly files for its covered exchange IDs and grows as new hourly files are published.
BitMEX (bitmex) is historical only: the exchange has closed and its files end on 2026-09-22.
FAQ
Yes. A free CryptoHFTData account with no credit card gives API access to this ticker data and every other dataset. Individual hourly files can also be downloaded without an API key on the rate-limited free tier.
The earliest hourly files start on 2025-06-28, and new files are added every hour. Start dates differ by venue; the coverage table on this page lists each one.
Each file holds one symbol for one UTC hour, stored as Zstd-compressed Parquet under {exchange_id}/{YYYY-MM-DD}/{HH}/{SYMBOL}_ticker.parquet. Parquet reads directly into pandas, Polars, DuckDB, and Arrow.
Install the SDK with pip install cryptohftdata, create a client with your API key, and call client.get_ticker() with a symbol, exchange, and date range. It returns a pandas DataFrame.
No. The normalized ticker schema carries rolling price and volume statistics only. Reconstruct the L2 order book when you need top-of-book quotes or the spread.
One free API key covers every exchange and every data type. $0.00.