# Why is my live spread wider than my backtest?

> Usually because the backtest used a spread that never existed. Here is how to find which of the four causes is yours, and what each one costs you.

- Canonical: https://hadalinstruments.com/research/why-is-my-live-spread-wider-than-my-backtest/
- Published: 2026-08-01
- Author: Hadal Research
- Answers the question: "why is my live spread wider than my backtest"
- Coins the term: **The Spread Fiction** — The gap between a backtest's assumed constant spread and any spread that ever existed: the live spread is usually not too wide — the backtested one was narrower than reality ever was, and the gap is the size of that fiction.

---
## The short answer

In most cases the live spread is not wider than it should be. The backtest spread was narrower than anything that ever existed, and the gap you are looking at is the size of that fiction.

There are four causes, they are separable, and they have different remedies. Knowing which one is yours matters more than knowing the total, because three of the four are fixable in your own process and one is not fixable at all.

  **WHAT THIS IS — AND WHAT IS NOT PUBLISHED.** This article is method, not result. **No spread distribution has been measured and published by me**, for any venue, instrument or period. There is no dataset behind this page and no hash; nothing here reports what any broker's spreads actually are. The decomposition below is a procedure you run on your own record. Status: `NOT YET PUBLISHED`.

## Prerequisite Knowledge
You need two records over the same period, at the same resolution: the quotes your terminal actually received, and the fills you actually got. Almost everyone has the second and almost nobody keeps the first, which is why this question usually gets answered with a guess. Without the quote stream you can measure the total shortfall but you cannot attribute it, and an unattributed shortfall tells you only that something is wrong.

## The four causes, in the order they are usually guilty

### 1. The backtest used a constant where a distribution belongs

The constant-spread error is the common case and the largest. A single spread value — whether the broker's advertised typical, the average of the file, or a number chosen because it felt conservative — removes the property that matters most: **spread and volatility are correlated, and so are volatility and your entries.**

If your strategy trades breakouts, news reactions, or anything triggered by movement, its entries are concentrated in precisely the conditions where the spread is widest. Costing those entries at the all-hours average is not an approximation. It is a systematic underestimate whose size scales with how much your strategy depends on movement.

The test is direct: recompute the backtest using the spread that was actually quoted at each entry timestamp, and compare. The difference is what the constant was hiding.

### 2. The historical file's spread column is reconstructed, not recorded

Many historical datasets carry a spread that was never quoted to anyone. Mid-price series get a synthetic spread applied afterwards; gaps get filled by interpolation that smooths away the widest moments; files exported from one account tier get traded by someone on another.

This is a [tick data provenance](/glossary/tick-data-provenance/) problem, and it is checkable. Record your own quote stream for a period, then compare its spread distribution against the same period in your historical file — not the means, the **upper tail**. Reconstruction shows up in the tail, because that is where interpolation does its damage and where the average hides it.

### 3. Your fills are not at the quote you were shown

Distinct from spread, and often mistaken for it. The quote was real; you did not get it. This is [slippage](/glossary/slippage/), and mixing it into the spread question means you will try to fix a routing problem with a cost assumption.

Separate them arithmetically: expected cost at the quoted spread on one side, realised [implementation shortfall](/glossary/implementation-shortfall/) on the other. What remains after subtracting the first from the second is the part the spread never explained.

### 4. Your own size is moving the price

The smallest cause for retail, and the one nobody can remove. If your order consumes more than the top of book, the average price you pay is worse than the quote by construction, and no backtest that fills at a single price models it.

Check by binning realised cost against order size. A flat relationship means size is not your problem. A relationship that steepens past a threshold is your book depth, and it is the one cause on this list with no fix other than trading smaller or slower.

## The Observable Mechanism
Everything above derives from two series you can capture yourself — received quotes with arrival timestamps, and your own fills — plus the historical file you backtested on. The decomposition needs no venue-side data and no privileged access, which is the point: a cost model you cannot check is not a cost model, it is a hope with a number attached.

## A measured floor, and the part of it that is not the spread

The artifact published with this article measures the quoted-spread distribution for
twenty-eight pairs and, for the seven where the commission converts, adds commission to give
a **cost floor** — the minimum move that has to happen before the trade breaks even.

| pair | median spread | commission, round trip | cost floor |
|---|---|---|---|
| EURUSD | 0.1 | 0.6 | **0.7** |
| AUDUSD | 0.1 | 0.6 | **0.7** |
| NZDUSD | 0.1 | 0.6 | **0.7** |
| USDCHF | 0.3 | 0.481 | **0.78** |
| GBPUSD | 0.2 | 0.6 | **0.8** |
| USDCAD | 0.2 | 0.826 | **1.03** |
| USDJPY | 0.1 | 0.954 | **1.05** |

*Pips. Commission from a named raw/ECN schedule, supplied by me.*

**On every one of the seven, the commission is larger than the median spread — on EURUSD by
six times.** If you are arguing with your backtest about a tenth of a pip of spread while the
commission line is six tenths, the spread was never the main term. That is worth knowing
before you spend an afternoon tuning the assumption that matters least.

Read the account type before transferring this to your own: on a commission-free account the
same cost reappears inside a wider spread, so the floor is comparable while its composition is
not. The pairs, not the totals, are what transfer.

Three limits, all of them in the file rather than in this paragraph. **Twenty-one of the
twenty-eight pairs have no cost floor at all** — they are crosses whose commission is quoted
per USD notional, and converting it needs a third USD leg this lane does not hold, so each
reads `NOT YET COMPUTED` rather than carrying a guess. **Zero-spread and crossed ticks are
counted and excluded, never averaged in**, which makes every floor above conservative in a
stated direction: folding them back would lower it, never raise it. And the floor is a
threshold, not a prediction — it states what a move must beat, and nothing on that face
implies a move that beats it exists.

## What the decomposition is worth

A strategy that survives realistic costs and one that survives an average is not the same strategy, and the difference is not marginal. The category of system most damaged by this is the one that trades often for small edges, because cost error compounds with trade count while edge does not.

The uncomfortable version: a great many strategies are profitable under a constant spread and unprofitable under the distribution that actually occurred. Discovering which one yours is costs a few hours of recomputation. Discovering it live costs whatever you funded the account with.

## What This Does Not Establish (The Limits)
This decomposition establishes what your costs were over your sample, at your sizes, on your venue, in the conditions that happened to occur. It does not establish what they will be — a period without a liquidity event is not evidence that liquidity events will not happen, and the widest spreads in any record are usually a small number of moments that dominate the tail. It also says nothing about whether your edge is real: a strategy correctly costed is still a strategy that may have been fitted to noise, and that is a separate question with its own [tests](/research/how-to-test-a-backtest-for-overfitting/).

## Where this leads

Costing entries at the spread that was actually quoted, and attributing the remainder honestly, is what the [Feed &amp; Execution](/suites/feed/) instruments do as a matter of routine rather than as an investigation you mount after a bad month. The [spread regime](/glossary/spread-regime/) and [execution cost](/glossary/execution-cost/) definitions are in the glossary if you want the terms used precisely, and [why backtests fail in live trading](/research/why-do-backtests-fail-in-live-trading/) covers the failures that survive after the cost model is fixed.
## The artifact

- SHA256: d8ca13284c6bff925a2d7de72f39b22614eba9c56be6edce04fb1d5681fc8678
- Download: https://hadalinstruments.com/data/cost-horizon.json
- Measurement technique: Quoted-spread distribution per pair — median, tenth and ninetieth percentile, and the live reading with its percentile against that distribution — across twenty-eight FX pairs, each with the tick count behind it. Zero-spread and crossed ticks are counted separately and excluded from the distribution rather than averaged into it. Where the commission schedule converts (the seven USD majors) a round-trip commission in pips is added to the spread to give a cost floor; for the twenty-one crosses that conversion needs a third USD leg this lane does not hold, so the floor renders NOT YET COMPUTED rather than being estimated.

---

## Claims examined

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

> "I used a realistic fixed spread in the backtest, so my costs are covered." — our reading: Misleading

A fixed spread is not conservative — it is wrong in a direction that flatters you. Real spreads are wide exactly when the market moves, which is exactly when most strategies trade. Averaging that away does not add a safety margin; it removes the correlation between cost and activity, which is where the cost actually lives. A fixed spread set at the average understates true cost for any strategy whose entries cluster in fast conditions, and almost all of them do.

**What is true:** A live spread is a distribution with regimes — it widens at news, rollover and thin sessions — and a backtest is honest about costs only when it prices each trade at the spread that prevailed at that trade's moment.

Evidence: https://hadalinstruments.com/research/why-is-my-live-spread-wider-than-my-backtest/#claim-4de36840

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

> "My backtest data came from my broker, so its spreads are my spreads." — our reading: Unproven

Historical files sold or exported by a broker are frequently reconstructed rather than recorded — resampled from mid, gap-filled, or carrying the spread of a different account tier from the one you trade. Unless the file states its provenance and you have verified it against quotes your own terminal received, the spread column is an assumption wearing the costume of a measurement.

**What is true:** The spread that prices your fills is the one quoted to your account type at your moment of trading; a historical file carries whatever spread convention its pipeline recorded, and the two match only when a capture from your own account proves they do.

Evidence: https://hadalinstruments.com/research/why-is-my-live-spread-wider-than-my-backtest/#claim-e0ac3a45

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

> "The difference is slippage, not spread." — our reading: Unproven

Spread and slippage are separable and worth separating, because they have different causes and different fixes. Spread is the cost of crossing at the instant you cross; slippage is the difference between the price you expected and the price you got. Attributing the whole shortfall to one of them without decomposing it means whichever fix you attempt will be aimed at the wrong half.

**What is true:** Spread cost and slippage are separable quantities: spread is measurable from the quoted bid-ask at dispatch, slippage from the gap between the quoted price and the fill — decompose the two before naming either as the culprit.

Evidence: https://hadalinstruments.com/research/why-is-my-live-spread-wider-than-my-backtest/#claim-7dcb0cac

## Cite This Article

APA BibTeX HTML

Hadal Research. (2026). Why is my live spread wider than my backtest?. Hadal Research. https://hadalinstruments.com/research/why-is-my-live-spread-wider-than-my-backtest/ (SHA-256: d8ca13284c6bff925a2d7de72f39b22614eba9c56be6edce04fb1d5681fc8678) Version 5762f56, 2026-08-29.

@misc{hadal_2026_why-is-my-live-spread-wider-than-my-backtest,
author = {Hadal Research},
title = {Why is my live spread wider than my backtest?},
year = {2026},
url = {https://hadalinstruments.com/research/why-is-my-live-spread-wider-than-my-backtest/},
howpublished = {Hadal Research},
version = {5762f56},
note = {Published: 2026-08-01; version dated 2026-08-29, Data Hash (SHA-256): d8ca13284c6bff925a2d7de72f39b22614eba9c56be6edce04fb1d5681fc8678}
}

Source: Hadal Research, Why is my live spread wider than my backtest? (Hash: d8ca13284c6bff925a2d7de72f39b22614eba9c56be6edce04fb1d5681fc8678). <a href='https://hadalinstruments.com/research/why-is-my-live-spread-wider-than-my-backtest/' 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/)
- [Execution Cost Auditor](https://hadalinstruments.com/instruments/execution-cost-auditor/)
- [Overfit Auditor](https://hadalinstruments.com/instruments/overfit-auditor/)

### Concepts

- [Execution Cost](https://hadalinstruments.com/glossary/execution-cost/)
- [Implementation Shortfall](https://hadalinstruments.com/glossary/implementation-shortfall/)
- [Slippage](https://hadalinstruments.com/glossary/slippage/)
- [Spread Regime](https://hadalinstruments.com/glossary/spread-regime/)
- [Spread Widening](https://hadalinstruments.com/glossary/spread-widening/)
- [Tick Data Provenance](https://hadalinstruments.com/glossary/tick-data-provenance/)

### Research

- [Why did my broker charge me so much in swaps?](https://hadalinstruments.com/research/why-did-my-broker-charge-me-so-much-in-swaps/) Asked as: why did my broker charge me so much in swaps
- [Why does my EA work on demo but not live?](https://hadalinstruments.com/research/why-does-my-ea-work-on-demo-but-not-live/) Asked as: why does my ea work on demo but not on a live account
- [How do I test a backtest for overfitting?](https://hadalinstruments.com/research/how-to-test-a-backtest-for-overfitting/) Asked as: how to test a backtest for overfitting

[All Hadal research](https://hadalinstruments.com/research/)[This article as plain markdown](https://hadalinstruments.com/research/why-is-my-live-spread-wider-than-my-backtest.md)

---

## Raw artifact — PUBLISHED

The figures on this page recompute from the file below. It is the measurement's own output, content-hashed, so you can verify that what you downloaded is what was measured — and that it has not changed since.

sha256 d8ca13284c6bff925a2d7de72f39b22614eba9c56be6edce04fb1d5681fc8678

[Download the artifact](https://hadalinstruments.com/data/cost-horizon.json)
