Back to Blog

Guides

How to Run a One-Symbol Parity Test Before You Migrate Historical Data

How to Run a One-Symbol Parity Test Before You Migrate Historical Data

Hyperliquid historical-data evaluations get messy when everything changes at once. A one-symbol parity run keeps the decision honest: one market, one historical window, one study you already know will come back, and one ledger that compares native venue pulls against a managed historical surface.

If you have not read the full comparison yet, start with Hyperliquid Historical Data API for Backtesting: Native API vs 0xArchive. This guide stays narrow on purpose. Its job is to help you run the evaluation cleanly before anyone turns it into a migration project.

Short answer: hold one symbol, one window, and one downstream study constant. Compare the exact span returned, timestamp boundaries, gap behavior, and the amount of rerun glue you still own on the second pass. If the managed path produces explainable deltas and less rerun burden, keep evaluating. If it does not, stay native longer.

In 30 Seconds

  • Treat parity as one controlled comparison, not a migration plan.

  • Log the second run separately from the first. That is where hidden work shows up.

  • Keep native venue responses as the dispute fallback even if the managed path wins.

  • Measure explainable deltas and setup burden, not just whether both sides returned rows.


Before you start

  • Inspect the native response caps and rate limits so you know what extra glue the venue path actually requires.

  • Check the matching 0xArchive coverage and route surface before you compare outputs.

  • Read the replay and checkpoint docs first if your study depends on reruns or event-window reconstruction.

Why one symbol is enough to learn something real

Broad tests create their own noise. Add multiple symbols, multiple windows, and multiple downstream transforms and it becomes hard to tell whether the historical surface helped or the setup simply changed. A one-symbol test strips that down to one useful question: does this get you closer to a rerunnable study with fewer hidden moving parts?

The study also has to be something you will rerun. A one-off notebook can hide manual work. A repeated workflow cannot.

What must stay constant

  • Symbol: pick one market only, ideally active enough to expose boundary issues.

  • Window: use the exact same start and end timestamps on both sides.

  • Downstream job: compare the same study output, not two different transforms.

  • Field mapping: agree on which fields matter before you pull data.

  • Anomaly fallback: keep native venue responses as the reference check for suspicious timestamps.

Parity scorecard

Axis

Pass if...

Fail if...

Returned span

The managed and native pulls cover the requested window, and first/last timestamps are explainable.

You are comparing adjacent or clipped windows without noticing.

Boundary deltas

Duplicates, missing edges, or overlap handling are explicitly recorded and understood.

The outputs differ at boundaries and nobody can explain why.

Gap handling

Any missing interval, null run, or coverage hole is logged and checked.

You accept row counts alone as proof that the window is trustworthy.

Second-run glue

The second run clearly reduces paging, dedupe, retries, or replay prep.

The managed path looks cleaner only because you stopped measuring the hard part.

Dispute fallback

Suspicious timestamps can still be compared back to native venue truth quickly.

You lose the native reference and cannot explain anomalies later.

What not to compare first

  • Do not start with multi-symbol tests. They multiply ambiguity before you learn anything.

  • Do not compare transformed strategy outputs before you compare raw historical boundaries.

  • Do not declare a winner from a first-run screenshot. The second run is where rerun tax shows up.

Run order that avoids fake wins

  1. Choose one symbol and one historical window you are likely to revisit.

  2. Write down the exact study output you care about before you pull anything.

  3. Pull the native window first and note every line of glue code you needed.

  4. Pull the matching managed route and compare returned span, boundaries, and obvious gaps.

  5. The native pull remains the dispute fallback even if the managed path wins on convenience.

  6. Rerun the same study a second time from both sides and measure how much setup you had to repeat.

  7. Decide from the ledger, not from how pleasant the first API response felt.

Ledger template

parity_ledger = {
  "symbol": "BTC",
  "window_start": "2026-01-15T00:00:00Z",
  "window_end": "2026-01-16T00:00:00Z",
  "native_first_ts": "...",
  "managed_first_ts": "...",
  "boundary_delta_notes": [],
  "gap_checks_run": 2,
  "second_run_glue_removed": ["paging", "replay_prep"]
}

Evaluation and Decision

  • Stay native longer: deltas are unclear, rerun burden barely changes, or your existing collectors already make this comparison boring.

  • Keep evaluating Build: the managed path shortens the second run, preserves a clean native fallback, and makes replay or checkpoint work easier to reproduce.

  • Escalate to Pro: the first test already shows you need order flow, TP/SL history, or deeper L4 paths. If that is the outcome, use the depth decision framework next.


Final takeaway

One clean ledger will tell you more than a month of migration talk. Hold one symbol and one study constant, measure the second run honestly, and keep native in the loop for disputes.

Start the 14-day Build trial with no credit card and run one parity ledger on a study you already plan to rerun.


Related reads

Sources