AymarData
Backtest · Ethereum

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.