AymarData
Backtest · Hyperliquid

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.