All posts
16 August 2026

Why Your EA Backtest Doesn't Match Live Results (And What to Check First)

Your EA backtest and your live account disagree. How much difference is normal, and the order to check things in so you find the cause quickly.

Split graphic contrasting a rising green backtest equity curve labelled +73.42% net profit with a falling red live-results curve labelled -18.73%, torn apart down the middle.

You ran the backtest, it looked good, you put the EA on a live account, and now the two do not agree.

Some difference is guaranteed. A backtest fills every order instantly at the price you asked for, and a live server does not, so live will always come out a little behind. The job is deciding whether what you are looking at is that normal cost, or something in your setup that is genuinely different from what you tested. This post is about the second one. Whether the strategy has an edge at all is a separate question and a separate post.

How much difference is normal

Compare the shape, not the profit. Trade count, win rate, average win, average loss. Those four are what you are checking.

The trade count should be identical. Not close, identical. The same EA reading the same data over the same dates takes the same trades, and if it did not, the EA is leaking somewhere. Most people treat a few missing trades as normal live behaviour. I do not. A trade count that drifts means the logic depends on something that was not in the test, and that is a robustness problem worth finding before anything else on this page.

The other three are allowed to move a little:

  • Win rate within a few points, not identical.
  • Average loss slightly worse live. That is slippage.
  • Average win slightly smaller live. Same reason, other direction.

My own EAs land within 5% of their tested figures on the accounts on the performance page, and I would not act on anything inside that. Outside it, something concrete is different, and the rest of this post is the order I go looking for it in.

The five checks that take two minutes

Almost everybody skips these and goes straight to blaming the strategy. Do them first, because they are free and they are the most common answer.

The symbol is not the same symbol. Brokers add suffixes. EURUSD, EURUSD.raw, EURUSDm, EURUSD.pro. They are not always the same instrument, they do not always carry the same spread, and on some brokers they do not carry the same history. If you tested one and are trading another, stop reading, you have found it.

The settings file is not the same file. Load your live .set into the tester and check the values by eye rather than trusting the filename. Presets drift, and they drift silently across versions: if an input was removed or renamed in a newer build, an old file keeps loading and simply stops carrying that value. Load and re-save any preset after a version change.

The broker’s clock is not your clock. Server time is commonly GMT+2 or GMT+3 and it shifts with daylight saving. Anything that trades a session, a window or a specific hour is exposed to this. Get the offset wrong and the EA runs an hour out for six months before the next transition puts it back and you never find out.

The spread setting in the tester. “Current” spread means the spread at the moment you launched the test, applied across the whole period. On a Sunday evening that can be a very flattering number.

The account type is not the same type. Raw spread plus commission and a standard all-in-spread account produce different results from an identical strategy. So does a cent account — see how a cent account differs from a standard one.

The costs the tester gets wrong

Costs are where most of the honest divergence lives.

  • Commission. Brokers almost always configure this, so it is usually in the test already. What removes it is the tester’s own pips calculation mode, which ignores commission entirely to run faster. People switch it on for speed during optimisation, forget it is on, and end up looking at a strategy that has never paid to trade.
  • Swap. The tester applies today’s swap rate across the whole test, so a year of history gets charged at this week’s rate. On most FX pairs swap is also charged triple once a week to cover the weekend, which quietly punishes anything that holds through it.
  • Slippage. Not modelled at all. Every fill in a backtest happens at the price the EA asked for. Live, it does not, and the gap is worst exactly where it hurts most, on stops and on entries during news.

The three tester modes, and only one of them is real

This is the setting people get wrong most often, because all three produce a result that looks equally convincing.

1 minute OHLC builds every minute from four prices: open, high, low, close. Everything between them is invented, including the order the high and the low happened in. It runs fast, and for an EA that only acts on closed candles of a higher timeframe it is defensible. For anything that reacts inside a candle, it is fiction. A stop and a target that were both touched inside the same minute will be resolved by a guess.

Every tick generates the ticks between those M1 bars using MetaTrader’s own interpolation. It produces a dense, detailed-looking price stream that your broker never quoted. It is better than OHLC and it is still made up.

Every tick based on real ticks downloads the tick history your broker actually recorded and replays it. This is the only mode testing against what happened rather than a reconstruction of it, and it is the one to use before you put money on anything. It is slow, and it needs the data to be there.

Two things worth knowing about that last mode. The tick history is your broker’s, so two brokers will not give you the same test, and some record far fewer price updates than others. And a high modelling quality figure only describes how completely the tester filled in what it was handed. It does not tell you the data was good.

The mechanics of setting this up are already written: how to get proper tick data and how to run the backtest.

Your backtest has no counterparty

This is the part that cannot be fixed by configuring the tester better.

In a backtest every order fills, instantly, at the price you asked for. There is no queue, no rejection, no widening around news, and no decision made by anyone on the other side. Live, all of that exists. Retail accounts are commonly dealt in-house, raw and ECN accounts route out to liquidity providers, and those two produce different fills from the same order.

A useful test: the MT5 tester has a delay setting, and putting a custom delay of 50 to 100 milliseconds on your test will tell you quickly whether your strategy depends on perfect execution. If the results collapse, it was never going to survive a live server, and no amount of better data will change that. If they barely move, execution is not your problem and you can stop looking here.

That test answers the question directly, which is more than any argument about milliseconds will do.

Prop and allocation accounts diverge worse

If your live account is with a prop firm, expect a wider gap than everything above would predict, and expect it for two reasons.

The first is conditions. Funded accounts almost always trade on worse terms than you would get opening an account yourself: wider spreads, higher commission, and fills that are not what a raw account would have given you. The firm is not passing you through to a liquidity provider out of generosity. Run the same strategy on a retail raw account and a funded one and the funded one comes out behind, before anything else is taken into account.

The second is the rules, which change the strategy whether you want them to or not. A daily loss cap can flatten you mid-trade at a point your backtest sailed through. Some firms force positions closed at a set time, ban holding over the weekend, or lock out trading around news. Every one of those removes trades your backtest took, and the trades it removes are not a random sample. They are the volatile ones.

So a system that reconciles cleanly on your own account can still look broken on a funded one, and that is not a fault in the system. Test against the conditions and the rules before you conclude anything.

If you do want to go this route, the one I point people at is Darwinex Zero, because it allocates against a track record rather than running you through a challenge with a daily loss cap attached. It sits on the tools page with the rest.

What I do when mine disagree

I re-run the backtest over exactly the dates I just traded, with the file that is actually on the chart, on the broker I am actually using. Not a longer period, not a cleaner one. The same window.

Then I put the two side by side and look at the four numbers from the top of this post. The trade count first, because that one is not allowed to move. Nearly every time, the answer is in the five checks, and it is usually something dull like a suffix or a preset.

If you want to run that comparison against a system whose live results are already public, every EA here is free and the accounts they run on are verified on Myfxbook.

A backtest is a measurement, and measurements can be taken badly. Check the instrument before you throw out the result.


Trading carries risk. Nothing here is financial advice, and a backtest that reconciles with live results is evidence that your testing is sound, not evidence that the strategy will keep working.

Some of the links in this post are affiliate links. If you open an account through one, I may receive a commission at no extra cost to you — that is what pays for the Expert Advisors being free. It never changes what I recommend. See the disclosure.

Get the Expert Advisors free

Every EA on this site is free to use. Open an account with one of the partner brokers, request a licence, and it is yours — with a verified live track record you can check before you commit anything.