Why Your Backtest Doesn't Match Your Live Trading
Slippage gets the blame, but that's an algo problem. If you backtest by hand, the gap is usually execution — and it's measurable.
Most explanations for this blame slippage, spread and execution delay. Those are real — but they mainly matter for automated strategies. If you backtest by hand and your live results look worse, the cause is usually simpler and less comfortable: you didn’t trade the same way. The good news is that this is measurable, and the measurement tells you which part to fix.
The standard answer, and who it applies to
Search this question and you’ll find the same list on nearly every result, written for algorithmic traders:
- Slippage — your fill isn’t the price you modelled
- Spread — often modelled as fixed, when it widens at exactly the worst moments
- Execution delay — a gap between signal, transmission and fill
- Data reconstruction — historical data approximates how price moved within each bar
- Repainting indicators — indicators whose past values change as new bars arrive will produce spectacular backtests and terrible live results
- Overfitting — a strategy tuned so tightly to historical data that it captured noise instead of a pattern
Every item on that list is genuine. If you run an EA or a coded system, start there — they’ll explain most of your gap.
But notice what they have in common: they’re all infrastructure problems. They assume the trades themselves were identical, and only the fills differed. For a discretionary trader, that assumption is almost never true.
The cause nobody writes about
One line appears in this research and then gets dropped: backtests assume perfect discipline, while live trading does not. In testing, your rules get followed automatically. Live, they have to be followed under pressure.
That is the whole problem, and it’s the least-covered explanation of the lot — because the tools writing these articles can’t measure it.
Here’s what it looks like in practice:
- You skip trades live that you took in testing. The setup appears, it looks uglier in real time than it did in review, and you wait for the next one. Your live strategy is now a subset of your tested strategy — and there’s no reason the subset shares its edge.
- You take trades live that you’d have passed on. Quiet session, nothing happening, and a marginal setup starts to look acceptable.
- You move stops. In the backtest the stop was a number. Live, it’s money, and it’s moving.
- You close early. The winner reaches 1.2R, the trade has been open a while, and certainty feels better than expectancy.
- You size by feel. Bigger after wins, smaller after losses — which systematically shrinks the trades most likely to work and inflates the ones least likely to.
- You were quietly selective while testing. Marginal setups in a backtest get resolved with a glance at what happened next. That’s not a rule; it’s hindsight with extra steps.
Every one of these produces the same symptom — live underperforming the test — and none of them are fixed by modelling spread more accurately.
Why most traders can’t tell which is happening
The usual diagnosis compares a backtest summary against a live summary: “the backtest made 14R, I’m down 2R.” That tells you a gap exists. It tells you nothing about where it came from, so the conclusion defaults to “the strategy doesn’t work” — and a perfectly good strategy gets abandoned because of an execution problem, or a broken one gets kept because the trader blames their own discipline.
The two failure modes look identical at the summary level and completely different one layer down.
How to actually diagnose it
Run the same metrics over both sets of trades and compare them directly. Each comparison points at a specific cause:
| What you compare | What a gap means |
|---|---|
| Trade frequency | Far fewer trades live → you’re skipping setups. Far more → you’re taking trades that weren’t in the plan. |
| Planned vs realized R:R | Realized below planned → you’re closing early or moving stops. The single most diagnostic number here. |
| Position sizing consistency | Uniform in testing, scattered live → sizing by emotion. |
| Average R | Similar frequency but lower R → management, not selection. |
| Checklist adherence | Rules ticked in testing, skipped live → you know the rules and aren’t applying them under pressure. |
| Cost of untaken setups | High live, low in testing → hesitation is your leak, and this quantifies it. |
| Breakdown by session and hour | Different distributions → you’re literally trading at different times than you tested. |
The logic is simple: a strategy problem shows up as similar behaviour producing worse outcomes. An execution problem shows up as different behaviour. Once you can see which, you know whether to change the strategy or change yourself.
What makes this comparison possible
The reason this analysis is rare is that it requires backtest trades and live trades to be measured identically. If your backtest lives in a spreadsheet and your live trades are in a journal app, the numbers aren’t comparable — different definitions, different assumptions, different rounding.
In BacktestFlow, both run through the same statistics engine. A backtested trade and a journaled live trade are the same kind of object, so every metric in the table above can be read on either side and put next to each other. The full metric list applies to both, including planned-vs-realized R:R, position sizing consistency, checklist adherence and cost of untaken setups.
Today that comparison is something you do by filtering to each source and reading the same cards. An automated side-by-side — a Reality Gap Report — is on the roadmap but not yet shipped, so the honest position is that the tool gives you comparable numbers and you draw the conclusion.
It’s also worth removing the causes you can control while testing. Manual backtesting done properly means future price is never visible, sizing follows a fixed rule, and every close is journaled before the replay continues — so the backtest is measuring the trader you actually are rather than an idealised one.
Before you conclude the strategy is broken
One caution, which connects to a different problem entirely: make sure the gap is real before diagnosing it.
Twenty live trades against a 300-trade backtest is not evidence of divergence — it’s a small sample doing what small samples do. Confidence intervals at that size are wide enough to swallow most apparent differences. How many trades you actually need covers the maths, but the short version: give the comparison enough data to mean something before you act on it.
The short version
Slippage, spread and execution delay are real, and they explain most of the gap for automated systems. If you trade discretionarily, the larger cause is usually that your live trades and your backtested trades are not the same trades. Compare frequency, planned-vs-realized R:R, sizing consistency and checklist adherence across both, and the answer stops being a mystery — different behaviour means execution, similar behaviour with worse results means strategy.
This article is educational and is not financial advice. Trading involves risk, and past performance — including backtested performance — does not guarantee future results.
Frequently asked questions
Why don't my backtest results match my live trading?
For automated strategies the usual causes are technical: slippage, spread, execution delay, and the fact that historical data is a reconstruction of how price moved. For discretionary traders who backtest manually, the dominant cause is usually execution — you took different trades, sized them differently, or managed them differently under real pressure. Both are real, but they need completely different fixes.
Is it normal for live results to be worse than backtest results?
Some degradation is expected and healthy to plan for, because costs and imperfect fills are real. A small, stable gap suggests friction. A large gap, or one that keeps widening, usually points to either an overfitted strategy or an execution problem rather than trading costs.
How do I know whether the problem is my strategy or my execution?
Compare the two sets of trades using the same metrics. If your live trade frequency is much lower than your backtest, you are skipping setups. If your realized risk-to-reward is below your planned risk-to-reward, you are closing early. If position sizing is inconsistent live but uniform in testing, sizing is the leak. A strategy problem shows up as similar behaviour producing worse outcomes; an execution problem shows up as different behaviour.
What is the reality gap in trading?
The reality gap is the difference between how a strategy performs when tested and how it performs when you actually trade it. It combines trading costs, imperfect fills, and — usually the largest component for discretionary traders — the difference between decisions made calmly in review and decisions made under live pressure.
How can I make my backtest more realistic?
Do not let future price be visible at any point, size every position by a fixed rule rather than by feel, record every trade including the ones you passed on, and journal each close before moving on. A backtest that lets you skip the uncomfortable parts is measuring an idealised trader, not you.