# Why do two data feeds give different backtests?

> In spot FX there is no single tape: every feed is one venue's filtered, aggregated history. Where feeds diverge, why results move, and how to diff yours.

- Canonical: https://hadalinstruments.com/research/why-do-two-data-feeds-give-different-backtests/
- Published: 2026-08-02
- Author: Hadal Research
- Answers the question: "why does my backtest give different results with different data feeds"
- Coins the term: **The Two Histories** — What two data feeds give you for the same market: each recording partially an artifact of pipeline decisions, so their disagreement measures how much of a backtest's result depends on the recording rather than the market.

---
## The short answer

Because there is no single history for either feed to be a copy of. Spot FX has no consolidated tape: every provider's file is a record of *one* liquidity pool, sampled one way, cleaned by one set of rules, stamped in one timezone convention. Run the same strategy over two such files and you are not testing one strategy against the market twice — you are testing it against **two histories**, each partially an artifact of decisions made in someone's data pipeline.

The disagreement between your backtests is therefore not a nuisance to be averaged away. It is a *measurement* — of how much of your result depends on the recording rather than the market — and it is one of the cheapest and most informative measurements a strategy developer can take.

  **WHAT THIS IS — AND WHAT IS NOT PUBLISHED.** This article is method: why recordings of the same market legitimately differ and how to locate the disagreement in your own files. **No data vendor is measured, named or ranked here**, and nothing should be inferred about any. Where a specific file needs auditing, that is a measurement — see the close of this piece. Status of any measured claim: `NOT YET PUBLISHED`.

## Prerequisite Knowledge
You need two exports covering the same instrument and the same window — from two providers, or your platform's bundled history beside a downloaded alternative — and the strategy result that differs between them. Failing that, one file and this article's questions still work: most of the checks below interrogate a single file's internal structure.

## Five places the histories fork

### 1. The pool

Each feed records one aggregation of liquidity providers. Different pools see different quotes at the same instant — legitimately, because in a fragmented market there is no one price to record. This is the floor under everything else: even two *perfect* recordings of two pools would differ.

### 2. The sampling

Tick data is not "everything that happened"; it is what survived the provider's sampling policy — every quote change, or only best-bid-offer changes, or a throttled stream, or bars built from any of those. Two files can describe the same pool and still disagree about how many ticks a fast minute contained, which decides what a backtester believes was tradeable inside it.

### 3. The cleaning

Providers filter what they classify as bad ticks, and the classification is a judgement call encoded in a pipeline: one file's removed spike is another file's retained print. The cleaning is invisible in the product — the file simply arrives without the ticks it lost — and [the point-in-time article](/research/why-does-my-backtest-use-data-that-did-not-exist/) covers the quietest version, where gaps are backfilled from a second source with different spreads and nobody is told.

### 4. The clock

Server timezone, daylight-saving convention, and where the weekly boundary falls differ across providers. A mismatched clock convention shifts every session-dependent computation — daily bars, day boundaries for a daily loss limit, the definition of "the news minute" — and produces divergences that look like price disagreements but are actually calendar disagreements.

### 5. The seams

Weekend handling, holiday sessions, and rollover minutes are where files show their manufacturing marks: padded bars where one provider fills a closed session and another leaves a hole, spread conventions across the Sunday open, contract-roll adjustments on anything future-derived. Seams are rarely where you look and reliably where files disagree.

## How to locate the disagreement in ten minutes

Align the two files on a common clock first — otherwise you are diffing calendars, not prices. Then, per session: bar counts, tick counts if you have them, and the spread distribution; then pull the largest price divergences and *timestamp them*. The pattern of the divergence is the finding. Clustered at news minutes: sampling and cleaning differences, the expected shape — and the reason [a perfect news-period backtest is a pipeline claim](/research/the-nfp-range/), not a market claim. Uniform across quiet periods: suspect the clock. Concentrated at weekend seams: session handling. And if your strategy's verdict flips between the files, weigh the third debunked claim above before shopping for a third feed.

The [tick-data provenance](/glossary/tick-data-provenance/) entry defines the recording questions precisely; [point-in-time data](/glossary/point-in-time-data/) and [survivorship bias](/glossary/survivorship-bias/) cover the related ways a history can differ from the past it claims to record.

## The Observable Mechanism
Everything here is computable from files you already hold, in a spreadsheet, without any provider's cooperation. The diff between two histories is one of the few data-quality measurements that requires no reference truth — the disagreement itself is the observable, and its structure tells you which pipeline decisions produced it.

## What This Does Not Establish (The Limits)
This article establishes why recordings legitimately differ — not which of your two files is better, whether either is faithful to the venue you trade on, or whether a specific defect explains a specific result. Structure can prove a file defective; it cannot prove it faithful — agreement between two files is only as strong as their independence, and two feeds sharing an upstream source share its defects invisibly. Fidelity to a venue is measurable only against a capture from that venue, which is a different measurement than any diff between downloads.

## Where this leads

If the question is what a specific file actually contains — its gaps and their pattern, its seams, its look-ahead violations, with a content-hash manifest pinning the audited bytes to the findings — that is the [Data Forensics instrument](/instruments/data-forensics/)'s ground, and the [Dataset Forensics assay](/assays/#dataset-forensics-assay) runs it on your file as a one-off, provenance question included. And if the question is what your *live* feed is doing as it reaches you — the recording you could be making instead of downloading — that capture-side battery belongs to the [Broker-Feed Auditor](/instruments/broker-feed-auditor/), with [its own article](/research/is-my-brokers-feed-honest/) on the method.
---

## Claims examined

### Claim 01 — canonical: https://hadalinstruments.com/refutations/#claim-fbf6f23f

> "My broker's historical data is the real market — it came from my broker." — our reading: False

Your broker's history is one venue's filtered view of a fragmented market, further shaped by aggregation, bad-tick cleaning, and session handling before it reached your download. In spot FX no consolidated tape exists for it to be a copy of. That does not make it worthless — for backtesting a strategy you will trade at that venue, the venue's own history is the most relevant one available. It makes it one history among several, with edits you were not shown.

**What is true:** In spot FX every feed is a record of one liquidity pool under one pipeline's sampling, cleaning and clock conventions; the most a file can be is faithful to its venue, and faithfulness is provable only against a capture from that venue.

Evidence: https://hadalinstruments.com/research/why-do-two-data-feeds-give-different-backtests/#claim-fbf6f23f

### Claim 02 — canonical: https://hadalinstruments.com/refutations/#claim-be93862c

> "The more expensive data feed is the more accurate one." — our reading: Unproven

Price tracks coverage, depth and convenience — more pairs, more years, nicer formats — none of which is fidelity to the venue you actually trade on. Accuracy is not a property a feed has in isolation; it is a relation between a recording and a venue. A dear institutional feed can be an excellent record of liquidity you will never be quoted, while your own venue's rougher export is the truer description of the prices your orders would have met.

**What is true:** Accuracy is a relation between a recording and a venue, not a property a feed owns: for backtesting a strategy you will trade at one venue, that venue's own history — defects known — is the relevant record at any price.

Evidence: https://hadalinstruments.com/research/why-do-two-data-feeds-give-different-backtests/#claim-be93862c

### Claim 03 — canonical: https://hadalinstruments.com/refutations/#claim-afd9f76f

> "Small differences between feeds can't change a backtest's conclusion." — our reading: False

Feed differences are not spread evenly through time — they cluster at news, at rollover, in thin sessions — which is exactly where many strategies concentrate their activity, so a small average difference becomes a large difference on precisely the bars that decide the result. A strategy whose verdict flips between feeds has revealed something important: its edge lives inside the disagreement between recordings, which is to say inside measurement noise, and no feed choice can rescue that.

**What is true:** Feed differences cluster at news, rollover and thin sessions — exactly where many strategies act — so a strategy whose verdict flips between feeds has located its edge inside recording noise, and that flip is itself the measurement.

Evidence: https://hadalinstruments.com/research/why-do-two-data-feeds-give-different-backtests/#claim-afd9f76f

## Cite This Article

APA BibTeX HTML

Hadal Research. (2026). Why do two data feeds give different backtests?. Hadal Research. https://hadalinstruments.com/research/why-do-two-data-feeds-give-different-backtests/ Version 5762f56, 2026-08-29.

@misc{hadal_2026_why-do-two-data-feeds-give-different-backtests,
author = {Hadal Research},
title = {Why do two data feeds give different backtests?},
year = {2026},
url = {https://hadalinstruments.com/research/why-do-two-data-feeds-give-different-backtests/},
howpublished = {Hadal Research},
version = {5762f56},
note = {Published: 2026-08-02; version dated 2026-08-29}
}

Source: Hadal Research, Why do two data feeds give different backtests?. <a href='https://hadalinstruments.com/research/why-do-two-data-feeds-give-different-backtests/' rel='canonical'>Original Research</a>

Copy Citation

**Version 5762f56** identifies the commit that last changed this page in Hadal's content repository. That repository is not public, so the identifier does not resolve externally — it is published so a citation pins one specific state rather than a moving page. To obtain the exact version cited, use the [press and research route](https://hadalinstruments.com/press/).

## Explore further

### Instruments

- [Broker Feed Auditor](https://hadalinstruments.com/instruments/broker-feed-auditor/)
- [Data Forensics](https://hadalinstruments.com/instruments/data-forensics/)

### Concepts

- [Point-in-Time Data](https://hadalinstruments.com/glossary/point-in-time-data/)
- [Survivorship Bias](https://hadalinstruments.com/glossary/survivorship-bias/)
- [Tick Data Provenance](https://hadalinstruments.com/glossary/tick-data-provenance/)

### Research

- [How much does the range actually widen at NFP?](https://hadalinstruments.com/research/the-nfp-range/) What 1,820 scheduled-release windows across 28 pairs were measured for — and why the range-expansion factors stay unpublished until their artifact ships.
- [Does my backtest have survivorship bias?](https://hadalinstruments.com/research/does-my-backtest-have-survivorship-bias/) Asked as: does my backtest have survivorship bias
- [Why does my backtest use data that did not exist?](https://hadalinstruments.com/research/why-does-my-backtest-use-data-that-did-not-exist/) Asked as: why does my backtest use data that did not exist yet

[All Hadal research](https://hadalinstruments.com/research/)[This article as plain markdown](https://hadalinstruments.com/research/why-do-two-data-feeds-give-different-backtests.md)

---

## Raw artifact — NOT PUBLISHED FOR THIS PAGE

No downloadable artifact ships with this page. Eight published measurements do, each content-hashed so a reader can verify the figures independently. Where a measurement is published here without one, that is a gap rather than a policy, and it is stated rather than left to be noticed.

[Measurements that ship their data](https://hadalinstruments.com/research/)
