Tick trades — this dataset
Use individual public executions for trade flow, taker-side volume, VWAP, and transaction-level backtests.
Aster Tick Trade Dataset
Aster public trade executions from futures markets, normalized into the same tick schema used across CryptoHFTData venues.
No credit card · The sample is one real hourly Parquet file and needs no API key
Is this the right dataset?
Tick data is an overloaded term. This page owns downloadable execution-level trade history; ticker statistics and L2 order book changes are separate datasets.
Use individual public executions for trade flow, taker-side volume, VWAP, and transaction-level backtests.
Use the ticker dataset for exchange-published rolling price and volume statistics, not individual executions or quotes.
View datasetUse the order book dataset when you need bid/ask depth, spreads, or liquidity replay rather than completed trades.
View datasetSample
The first rows of one real hour: BTCUSDT on Aster Futures, 2026-09-02 at 12:00 UTC. One row per public trade as published by the venue.
aster_futures/2026-09-02/12/BTCUSDT_trades.parquetDownload full file| received_time | event_time | symbol | trade_id | price | quantity | trade_time | is_buyer_maker | order_type |
|---|---|---|---|---|---|---|---|---|
| 1788350400332952238 | 1788350400203 | BTCUSDT | 146317810 | 76792.9 | 0.001 | 1788350400100 | false | MARKET |
| 1788350400333209818 | 1788350400203 | BTCUSDT | 146317811 | 76792.9 | 0.180 | 1788350400100 | false | MARKET |
| 1788350400650294360 | 1788350400521 | BTCUSDT | 146317812 | 76792.8 | 0.322 | 1788350400450 | true | MARKET |
| 1788350400933973929 | 1788350400794 | BTCUSDT | 146317813 | 76792.8 | 0.010 | 1788350400750 | true | MARKET |
| 1788350401113345815 | 1788350400986 | BTCUSDT | 146317814 | 76792.8 | 0.490 | 1788350400950 | true | MARKET |
| 1788350401113426360 | 1788350400986 | BTCUSDT | 146317815 | 76792.8 | 0.005 | 1788350400950 | true | MARKET |
Wire format
Every row starts as a message on the exchange's WebSocket or REST API. Point at a line or a column to see where each value comes from and how we convert it. Our test suite replays these messages through the production pipeline, so the rows shown are the rows you download.
Aster Futures
Exchange sends
WebSocket message · <symbol>@tradereceived 2026-10-05 19:16:13.423571 UTC
{"stream": "btcusdt@trade","data": {"e": "trade","E": 1791227773292,"T": 1791227773250,"s": "BTCUSDT","t": 148500896,"p": "85600.9","q": "0.002","X": "MARKET","m": false}}
You download
Parquet row · trades
Point at a line in the message or a column in the row to trace where each value comes from. Click a column to pin it.
Our tests replay this message through the production pipeline
All Aster Futures mapping rules →Conventions for every exchange are in the wire formats overview. Column types and units for tick trade data are in the schema below.
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 | Tick trade symbols |
|---|---|---|---|---|
| aster_futures | Futures | 2025-09-2913 mo | 663 |
Other exchanges
The same schema on every venue, so switching exchange is a one-argument change.
Or compare every venue on the cross-exchange tick trade overview.
Schema · 9 columns
Every row is one public trade as published by the exchange, with exchange timing, trade ID, exact price and quantity strings, buyer-maker status, and order type. On most venues a row is one execution; OKX history before the 2026-09 data-integrity release aggregates fills per taker order and price.
| Column | Type | Description |
|---|---|---|
| received_time | INT64 | Unix timestamp (nanoseconds) when our system received the trade event |
| event_time | INT64 | Unix timestamp when the exchange generated the event (the time unit changes with the exchange) |
| symbol | STRING | Trading pair symbol (for example, 'BTCUSDT') |
| trade_id | INT64 | Exchange-specific trade identifier. For OKX history before the 2026-09 data-integrity release, it is the last fill ID of an aggregated row (refer to the venue notes) |
| price | STRING | Trade execution price (stored as string for precision) |
| quantity | STRING | Trade size (stored as string for precision). The unit is the base asset on most venues. OKX derivatives use contracts, and BitMEX uses raw instrument units (refer to the venue notes) |
| trade_time | INT64 | Unix timestamp when the trade occurred (the time unit changes with the exchange) |
| is_buyer_maker | BOOLEAN | True if the buyer was the maker (passive side), false if the buyer was the taker |
| order_type | STRING | Type of order that caused this trade (for example, "LIMIT", "MARKET"), if the venue publishes it. Binance spot does not publish an order type. Thus, the column is always "MARKET" there as a placeholder |
Quickstart
The example loads BTCUSDT from Aster 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_trades(
symbol="BTCUSDT",
exchange=chd.exchanges.ASTER_FUTURES,
start_date="2026-09-02",
end_date="2026-09-02",
)
print(df.head())
print(f"Tick trades: {len(df):,}")curl --fail --location \
"https://api.cryptohftdata.com/download?file=aster_futures/2026-09-02/12/BTCUSDT_trades.parquet" \
-o BTCUSDT_trades_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.
Each row is a public tick trade as published by the exchange; trade ID semantics and aggregation behavior vary by venue.
is_buyer_maker identifies the passive side. True means the buyer rested and the seller took liquidity; false means the buyer took liquidity.
received_time is recorded in nanoseconds, while exchange event_time and trade_time units are venue dependent. Inspect and normalize timestamp units before joining feeds.
Prices and quantities are stored as strings to preserve exchange precision; cast to decimals or floats as needed.
OKX trades before the 2026-09 data-integrity release are one row per taker order per price level (fills aggregated by the exchange), not one row per fill; from the release they are one row per fill.
Binance spot publishes no order type on its trade stream, so order_type is always MARKET there as a placeholder.
This page starts on 2025-09-29 based on the earliest stored hourly files for its covered exchange IDs and grows as new hourly files are published.
FAQ
Yes. A free CryptoHFTData account with no credit card gives API access to Aster tick trade 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-09-29, 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}_trades.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_trades() with a symbol, exchange, and date range. It returns a pandas DataFrame.
It identifies the passive side of the trade. True means the buyer's order was resting on the book and the seller took liquidity; false means the buyer was the aggressor.
One free API key covers every exchange and every data type. $0.00.