'Backtests vs live results. What am I missing?' is one of the most useful questions an automated trader can ask. The frustrating part is that several completely different problems can create the same symptom: the strategy looked convincing in historical testing and then behaved differently when money was involved.
Treating every divergence as 'the strategy stopped working' can send you in the wrong direction. The cause may be the strategy. It may also be execution, data, implementation, broker mechanics or ordinary statistical noise. A good diagnostic process separates those possibilities before anyone starts changing parameters.
Two closely related parts of this decision are Trading Costs: How Spread, Slippage and Commission Quietly Destroy a Backtest and Has My Trading Strategy Stopped Working? How to Think About Strategy Decay.
1. The live market charges you differently
Historical tests often use clean prices and simplified fills. Live execution introduces spread variation, slippage, commission, financing, rejection risk and broker-specific order rules. A strategy with a thin gross edge can look healthy in a tester and weak in live trading simply because the execution model was too generous.
2. Your broker is part of the experiment
Different brokers can have different symbol specifications, trading sessions, spreads, stop-distance rules, minimum lot sizes, financing, price histories and even naming conventions. These differences can alter entries, position sizes and exits.
If the same strategy behaves differently across brokers, the question is not automatically which broker is 'better'. The first job is to identify which assumptions in the strategy are broker-sensitive.
3. The live code may not be the code you tested
This is surprisingly common when a strategy has an MQL5 implementation and a separate Python research version. A tiny difference in indicator calculation, bar alignment, timezone handling or stop logic can turn two apparently equivalent systems into different strategies.
QuantWeaver treats port fidelity as evidence. Signal-by-signal and trade-by-trade parity matters because a Python backtest is irrelevant if it is testing logic that the live platform does not actually execute.
4. Historical timing can be cleaner than live timing
Backtests can hide latency and ordering problems. In live trading, the signal arrives, the order is created, the broker receives it, the market moves and the fill occurs. A strategy that depends on precise short-lived conditions can be much more sensitive to that sequence than an end-of-bar report suggests.
5. The market state changed
A strategy can be implemented correctly and still struggle when the market moves into a state that is hostile to its mechanism. Trend continuation can bleed in persistent chop. Mean reversion can suffer when an apparent overextension becomes a genuine repricing.
This is why QuantWeaver's research process distinguishes the source of direction from context. A regime or session can help explain when a mechanism should strengthen or weaken, but context should not be allowed to invent a trade by itself.
6. The backtest was fitted more tightly than you realised
Sometimes the live divergence is simply the bill arriving for overfitting. The system was tuned to historical noise, and fresh data stopped cooperating. The warning signs include unstable parameter choices, performance concentrated in one period, large in-sample versus out-of-sample degradation and repeated changes to the testing framework until a pleasing result appears.
7. Live underperformance can still be normal
A losing week or month does not prove that an edge is dead. Strategies have distributions, and live performance can wander within those distributions for uncomfortable periods. The right comparison is not 'live is down while backtest was up'. It is whether live behaviour has moved materially outside what the historical evidence said was plausible.
That requires enough live observations and a defined monitoring envelope. Changing the system after every short run of bad luck is another form of overfitting, this time performed in real time.
Diagnose before you optimize
When live and historical results diverge, the most dangerous response is to start adjusting whatever parameter is easiest to reach. That can improve the next backtest while making the underlying diagnosis harder.A proper investigation should establish which version was tested, which version traded, what data and broker rules were used, whether fills were realistic, whether the market state changed and whether the difference is statistically meaningful. Only then does modification become a sensible conversation.