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

Demo fills are simulated: no spread paid, no slippage, no requotes. What changes at a live venue, and how to measure the gap on your own account.

The short answer

Because a demo account is frictionless and a live account is not. The demo fill is a bookkeeping entry: the simulator grants your order at the price on screen, instantly, in any size, every time. The live fill is a transaction: it pays the spread, moves with the queue, arrives late by your round-trip latency, and sometimes does not happen at all. An expert advisor tuned on the frictionless account has been optimised for a market that does not exist — and the tighter its margins, the more of its measured edge was actually the absence of friction.

This is a different failure from a backtest that lies about the past — that one is reconstruction debt, and it has its own article. A demo runs on the real, current feed in real time. What it simulates is not the market; it is your effect on the market, and that is exactly the part that costs money.

WHAT THIS IS — AND WHAT IS NOT PUBLISHED. This article is method: what a demo fill omits and how to measure the omission on your own account. No broker is measured, named or ranked here, no gap statistics are published, and none should be inferred. Where your own gap needs measuring, that is a measurement — see the close of this piece. Status of any measured claim: NOT YET PUBLISHED.

Prerequisite Knowledge

You need a period where the same system ran on both account types at the same broker — even a short live run at minimum size is enough to start — and both platforms’ statement exports. The comparison is between fills, not between profits: a week of fills carries the cost structure; a week of profit carries mostly noise.

The four frictions a demo fill omits

1. The spread you actually pay

The demo books your entry at the quoted price; the live account crosses a spread to get in and crosses it again to get out. On a quiet major pair this looks small until you multiply it by every round trip your system takes — high-frequency entry logic that thrives on demo is often nothing but spread cost wearing a strategy’s clothes. And the live spread is not one number: it has regimes, and it widens at precisely the moments — news, rollover, thin sessions — when many systems fire. That structure has its own article.

2. Slippage, and where it leans

A live market order is matched against available depth. When depth is thin or the price is moving, the fill walks — and it walks against you more often than for you, because your order is likelier to be chasing exactly when everyone else’s is. The average slippage number flatters; the distribution’s tail, sitting on the trades where the market was moving hardest, is where the money went. A demo has no depth to walk, so its slippage is exactly zero, on every trade, forever.

3. Rejections, requotes, and the fills that never happened

On demo, every order is accepted. Live venues can requote, reject, or partially fill — and those events are not uniformly distributed either: they cluster in fast markets, which is to say on the trades your backtest probably counted as its best. A system whose edge lives in volatile moments meets its rejection rate exactly where it planned its profits. The fill ratio is a measurable property of your account, and demo reports it as perfect by construction.

4. Latency between decision and deal

Your EA decides on a price that is already old by the time the order reaches the venue and returns. On demo the round trip is a function call. Live, the staleness of the price you acted on is a real interval — and for reactive systems, the price at decision and the price at execution are systematically different in fast conditions, in the unhelpful direction.

How to measure your own gap

Run the same system on both account types simultaneously, live at minimum size, for long enough to collect a few dozen trades. Export both statements and compare per signal, not per period: entry price against entry price, exit against exit. The differences decompose into the four frictions above — spread paid, slippage per fill, orders present on one statement and absent from the other, and timing offsets. What you have built is a measured cost distribution for your own account, and the question “does my edge survive it” stops being a feeling. The glossary defines each component precisely, including requotes and the fill ratio.

The Observable Mechanism

Everything here is computable from two statement exports you can produce yourself, in any spreadsheet. No broker-side data, no special access, no permission. The gap between your demo and live fills is one of the few things in retail trading you can measure completely from your own side of the account — which makes trading without measuring it a choice.

What This Does Not Establish (The Limits)

This article establishes what a demo omits — not the size of any particular broker’s gap, whether a specific venue’s demo environment matches its live one, or whether your strategy survives your costs. Those are measurements against particular accounts and particular fills. A short live sample also bounds what the comparison can claim: a few dozen trades characterise the typical friction well and the tail poorly, and the tail is where the worst of it lives. The honest reading of a small sample is a lower bound on the gap, not the gap.

Where this leads

If the question is whether the feed itself behaves consistently — cadence, staleness, spread regimes on your own capture — that is the Broker-Feed Auditor’s battery, and the Feed Fidelity assay runs its client-side subset on a log you export, once, without installing anything. If the question is what execution is actually costing you — shortfall decomposed into spread, slippage and timing, with the distribution rather than the average — that is the Execution-Cost Auditor’s ground, and the Execution-Cost assay answers it from the statement you already hold.

Claims examined

Claim 01§ claim-d0484e14

Demo and live show the same prices, so the results should transfer.

My reading: False

Identical quotes do not produce identical fills. A demo order is granted at the displayed price by a simulator with no liquidity to find; a live order must be matched against depth that thins exactly when your system most wants to trade. Two accounts can watch the same feed all day and book materially different trades from the same signals, because the price you see and the price you deal are different quantities — and only one of them exists on demo.

Claim 02§ claim-a91f9987

My broker rigged the demo to flatter me into depositing.

My reading: Not measurable

Intent is not measurable from the client's side of the account, and the gap does not need a villain: a simulator with no spread cost, no slippage and no rejections flatters every strategy automatically, without anyone deciding it should. What is measurable is the size and structure of your own demo-to-live gap — and a measured gap is actionable regardless of why it exists, which is more than any theory about motive can offer.

Claim 03§ claim-516cf46e

Three profitable months on demo validate the strategy.

My reading: False

Three months on demo validate the strategy under execution conditions that do not exist. The signal logic was tested; the cost model was absent. Whether the edge survives the real cost distribution — spread actually paid, slippage in the tail, orders that come back rejected at the worst moments — is precisely the part demo cannot test, and for tight-margin systems it is routinely the whole difference between the two account curves.

Each claim above has a permanent address — the § link — whose canonical home is the refutation index, where it carries its variant phrasings and the true proposition stated on its own feet; this article is the evidence behind it. If a claim's text ever changes, it becomes a new claim at a new address, and the old one stops resolving rather than silently meaning something else.

Cite This Article

Hadal Research. (2026). Why does my EA work on demo but not live?. Hadal Research. https://hadalinstruments.com/research/why-does-my-ea-work-on-demo-but-not-live/ Version 3c10f7e, 2026-08-03.

Version 3c10f7e 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.

Explore further

Research

All Hadal researchThis article as plain markdown

---