Ethereum Backtest Data: Tick-Level Order Books & Trades
Backtest ETH with Polymarket eth-updown windows: reconstructed L2 books, trades and settlements over REST — built for short-horizon research.
Ethereum Up/Down markets reprice every few minutes when spot moves through the strike. Tick-level books let you measure how fast implied probability tracks ETH and how spreads and fees change around the move.
AymarData’s Polymarket corpus (~207.0M messages since 2025-06-01) includes ETH families at 5m through 24h. Use the ETH instrument pages for per-family event rates.
Inputs
What you need to backtest Ethereum properly
What a serious backtest needs beyond candles.
ETH Up/Down L2 + outcome
Always pass outcome=up or outcome=down. Reconstruct the book at a decision timestamp inside the window with /v1/book.
Trade tape inside the window
Use /v1/trades to see whether your entry coincided with aggressive flow into Up or Down.
Settlement
Score P&L with /v1/settlement. Skip unresolved windows rather than inventing outcomes.
Enough independent windows
15m ETH windows give 96 samples/day — enough for a week-scale study. Prefer family eth-updown-15m before jumping to 5m microstructure.
Coverage
Live Ethereum coverage
Per-family ETH event counts live on each /data/polymarket/eth-updown-* page (weighted from PUBLIC_TOTALS).
Polymarket platform total
~207.0M
Includes ETH Up/Down · from 2025-06-01
ETH 15m family share
See data page
/data/polymarket/eth-updown-15m
Update model
Tick stream
Books + trades as they occur
As of
2026-10-25
Code
End-to-end Ethereum backtest (REST + requests)
Screens eth-updown-15m windows for cheap Up mids and records ask fills. Export AYMARDATA_API_KEY first.
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"}
def list_windows(q="eth-updown-15m", interval="15m", limit=30):
r = requests.get(
f"{API}/markets",
headers=H,
params={"source": "polymarket", "q": q, "interval": interval, "limit": limit},
timeout=30,
)
r.raise_for_status()
seen, out = set(), []
for row in r.json()["data"]:
if row["market"] in seen:
continue
seen.add(row["market"])
out.append(row)
return out
def book(market, at, outcome="up"):
r = requests.get(
f"{API}/book",
headers=H,
params={"source": "polymarket", "market": market, "outcome": outcome, "at": at, "depth": 5},
timeout=30,
)
r.raise_for_status()
return r.json()
def trades(market, start, end, outcome="up"):
r = requests.get(
f"{API}/trades",
headers=H,
params={
"source": "polymarket",
"market": market,
"outcome": outcome,
"start": start,
"end": end,
"limit": 100,
},
timeout=30,
)
r.raise_for_status()
return r.json()["data"]
results = []
for w in list_windows():
market, hist = w["market"], w.get("history_from")
if not hist:
continue
snap = book(market, hist)
bids, asks = snap.get("bids") or [], snap.get("asks") or []
if not bids or not asks:
continue
mid = (bids[0]["price"] + asks[0]["price"]) / 2
# Cheap Up early in the window → long; use ask as fill
if mid < 0.42:
fill = asks[0]["price"]
tape = trades(market, hist, hist) # may be empty near open; still validates the call
results.append({"market": market, "mid": mid, "fill": fill, "n_trades": len(tape)})
# Counts only — label any P&L/win-rate/edge you add:
# "Illustrative output — not a real result"
print(f"eth_signals={len(results)} sample={results[:3]}")
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
Does this page cover ETH perpetuals too?
The working example focuses on Polymarket ETH Up/Down, where REST books and settlements are densest today. Cross-link Binance ETH pages as those markets appear in your plan’s catalog.
Which interval should I start with?
eth-updown-15m — enough path inside the window and 96 windows per day for statistical power.
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.