Hyperliquid Backtest Data: Perp Trades & Order Books
Backtest Hyperliquid perps with AymarData’s live-recorded files — list daily Parquet shards over REST and load trades locally.
Hyperliquid is recorded forward-only from 2026-10-01 (~4.40M messages as of 2026-10-25). Daily trade Parquet files are available through GET /v1/files while REST market-id coverage expands.
Use the free sample below for schema familiarisation, then pull full-day shards with your API key.
Inputs
What you need to backtest Hyperliquid properly
What a serious backtest needs beyond candles.
Trade + L2 history
Prefer bulk trades (and book tables when listed for your date) via /v1/files for multi-hour research.
Funding when testing carry
Instrument pages document funding fields; join funding events to the trade tape on timestamp.
Cross-venue basis
Compare with Binance perps on overlapping clocks — see the Hyperliquid guide and BTC perp data page.
Coverage
Live Hyperliquid coverage
Per-coin pages under /data/hyperliquid/* show weighted event counts from the same totals.
Messages recorded
~4.40M
Live since 2026-10-01
Days covered
25
Forward-only
Avg events/day
176,000
As of
2026-10-25
Code
End-to-end Hyperliquid backtest prep (REST + requests)
Lists Hyperliquid files for a date and downloads a trades Parquet shard. Working against api.aymardata.com.
import os
import requests
API = "https://api.aymardata.com/v1"
KEY = os.environ["AYMARDATA_API_KEY"] # export AYMARDATA_API_KEY=ad_live_…
H = {"Authorization": f"Bearer {KEY}", "User-Agent": "aymardata-backtest/1.0"}
# Hyperliquid L2/trade REST market ids are rolling out; bulk files are live.
# This end-to-end example lists trade Parquet files for a day and downloads one.
def list_files(source: str, date: str):
r = requests.get(
f"{API}/files",
headers=H,
params={"source": source, "date": date},
timeout=60,
)
r.raise_for_status()
return r.json()["data"]
DATE = "2026-10-24"
files = list_files("hyperliquid", DATE)
trades = [f for f in files if "/table=trades/" in f["path"]]
print(f"hyperliquid files={len(files)} trade_shards={len(trades)}")
if not trades:
raise SystemExit("no trade files for date")
shard = trades[0]
print("downloading", shard["path"], "bytes", shard.get("bytes"))
blob = requests.get(shard["url"], timeout=120)
blob.raise_for_status()
out = f"/tmp/hl-{DATE}-trades.parquet"
open(out, "wb").write(blob.content)
print("saved", out, "size", len(blob.content))
# Optional: inspect with pyarrow / pandas when installed
try:
import pyarrow.parquet as pq
table = pq.read_table(out)
print("columns", table.column_names)
print(table.slice(0, 3).to_pydict())
except Exception as e:
print("parquet inspect skipped:", e)
API base https://api.aymardata.com. Set AYMARDATA_API_KEY from your dashboard. Examples use requests. Any P&L, win-rate, or edge figure derived from these snippets is illustrative output — not a real result.
Free samples
Download sample CSV / Parquet
No key required — small files for schema and local smoke tests.
FAQ
Common questions
Why files instead of /v1/trades in the example?
Hyperliquid trade shards are live on /v1/files today. Use files for research loops; switch to /v1/trades when your market id is listed by /v1/markets.
Is history backfilled?
No — recording is forward-only from 2026-10-01.
Related
Data pages and guides
Catalog leaves for schema and samples; guides for longer walkthroughs.
Run your first backtest with real ticks
Get a key, paste the snippet above, then expand to the full catalog.
Educational content, not trading or investment advice. Past data doesn't predict future results.