Your Pattern Survived Every Test. Then the Spread Killed It.
A pattern can pass backtesting, survive the blind split, hold up across sessions, and still bleed money live — because of something most traders barely think about until it is too late.
You did everything right. You backtested on real historical data, split it properly, validated on unseen bars, checked it by session, confirmed the win rate was realistic. The pattern passed every filter you threw at it. You went live.
Three weeks later the account is down.
The equity curve is not collapsing — it is just slowly, consistently going the wrong direction. Not a bug. Not a bad streak. Something more structural.
Spread is one of the most common reasons this happens, and it is brutally easy to miss because it is invisible in most backtesting setups.
What spread actually is and why it compounds
The spread is the gap between the price you can buy at and the price you can sell at. If XAUUSD is showing 2650.00 bid and 2650.50 ask, that 0.5 point gap is what you pay to enter any position. You are immediately underwater by the spread the moment a trade opens.
On a single trade, half a point sounds like nothing. On a strategy running 80 trades a month on gold, it is 40 points a month in friction before a single setup plays out. If your pattern generates 35 points net profit per month at zero spread, it loses 5 points per month in reality. You have been paying a tax on every single trade and your backtest never saw it.
This is the version most people know. The part most people don’t think about is what happens to spread in specific conditions — because spread is not a fixed number. It is a living variable that widens exactly when you least want it to.
Spread is not fixed. It is adversarial.
Most backtesting tools either ignore spread entirely or let you set a static value — say 2 points on gold, 1 pip on EURUSD. You enter this number, feel responsible, and move on.
The problem is that real spread does not behave like a fixed number. It is dynamic. It reflects the liquidity conditions at the moment you are trying to trade. And the conditions that create your pattern signals are often the same conditions that widen the spread.
News events are the obvious case. In the 30 seconds around a major release — CPI, NFP, FOMC — spread on gold can go from 0.5 points to 8 or 10 points instantly. If your pattern fires on volatility — a Bollinger Band squeeze breaking out, an RSI extreme that formed during a sharp move — it is likely firing right as spread has blown out. Your backtest assumed 2 points. Reality was 9.
But it is subtler than just news. Spread also widens at session transitions when liquidity is thin. It widens during rollover. It widens during bank holidays when one side of the market is absent. It widens overnight on certain instruments. Every one of these is a moment when your pattern might technically trigger and your actual fill cost is 3x what your backtest assumed.
The deeper issue is that your pattern does not care about spread. It sees a condition and fires. The spread environment at that moment is invisible to it unless you build spread awareness into the logic explicitly.
The instruments where this matters most
Spread damage is not evenly distributed. It is heavily concentrated in specific instruments and trading styles.
Scalping and short timeframes. A pattern on M1 or M5 is working with small target moves — maybe 5 to 15 points. If your spread is 2 points, that is 20-40% of your target gone before the trade starts. Spread doesn’t need to kill every trade. It just needs to make the marginal ones lose instead of scratch, and scratch ones lose instead of win, and the whole distribution shifts negative.
Exotic pairs. EUR/TRY, USD/ZAR, anything with emerging market currencies. Spreads on these pairs are wide at the best of times and can become truly extraordinary during volatility. A pattern that looks clean on these in backtesting is almost certainly being tested with a static spread assumption that bears no resemblance to what you will actually pay.
Crypto CFDs. If your broker offers BTC or ETH as CFDs, the spread on these instruments outside peak hours can be enormous relative to normal price movement. A pattern built on M15 with a 30-point target is not viable if you are paying 12 points to enter.
Gold around US sessions. XAUUSD is sensitive. Spread is tight during London and the NY overlap. After NY closes, it widens meaningfully. A strategy that looks fine on the aggregate might be taking clean trades in London and expensive trades in NY afternoon — and only the first category is actually working.
The commission problem that lives alongside spread
On ECN or raw spread accounts, the quoted spread might look tiny — sometimes near zero. This is not free. The broker charges a per-lot commission on entry and exit instead. On a 0.01 lot gold trade, this might be $0.70 each way, $1.40 round trip. That is a point and a half equivalent on gold.
People see “raw spreads” and feel like they are getting a deal without calculating what the commission adds back in. The total cost is spread plus commission, both directions, every trade. Run 100 trades and the friction is not abstract anymore.
The more insidious version: some brokers offer “no commission” with wider spreads instead. Whether the total cost is lower depends on how long you hold trades. For very short trades, you might prefer paying commission on a tight spread. For longer holds, the wider spread might actually cost less if you are only paying it once. This calculation is instrument and style specific and most people never do it.
What slippage does that spread doesn’t
Even if your spread is exactly what you expected, your fill might not be. Slippage is the difference between the price your bot tried to enter at and the price it actually got. It is distinct from spread and it happens for different reasons.
When your pattern fires, your bot sends an order. The broker executes it at the best available price at that moment. In fast-moving markets, that price may have moved by the time the order is processed. If you are entering a breakout — which many patterns do — the market is moving fast exactly when your signal fires. You reach for 2650 and get filled at 2651.2. That is 1.2 points of slippage on top of spread.
On a small target this is significant. On a 10-point scalp setup, 2+ points of combined spread and slippage means you need price to move 12 points in your direction just to scratch. The whole probability distribution of outcomes shifts.
Slippage is almost impossible to model accurately in a backtest because it depends on your broker’s execution quality, your account type, the time of day, and market conditions at the exact moment of your trade. The best proxy is to be conservative — assume fills are worse than ideal and test whether your pattern still works under that assumption.
How to account for all of this before going live
The honest answer is that you cannot account for it perfectly. But you can build in enough margin that realistic costs don’t flip a profitable strategy into a losing one.
Stress test your pattern with inflated cost assumptions. If your broker quotes 2 points spread on gold, run your backtest assuming 4. If the strategy is still positive with doubled costs, it has a margin of safety. If it barely survives at 2, it will not survive reality.
Separate your results by time of day. Run your backtest and note not just whether a trade won or lost, but when it triggered. If a significant portion of your trades are triggering at times when you know spread is historically wider — news windows, session transitions, rollover — that is a cost you are not accounting for.
Check your broker’s historical spread data. Some brokers provide tick data or historical spread records. If yours does, use it. If not, at minimum check what the spread looks like at different times of day on a demo account and compare it to what your backtest assumed.
Add a spread filter to your bot. This is underused. You can write logic that checks the current spread before placing a trade and skips the entry if spread exceeds a threshold. Something like: if current spread on XAUUSD is greater than 1.5 points, do not enter. This sounds simple but it prevents your bot from filling in bad conditions automatically. During news events, spreads blow out and then normalise — your pattern signal might still be valid 3 minutes later once spread is back to normal.
Track cost per trade in your live log. Log the actual spread at entry for every trade. After a month of live running, compare the average actual cost per trade to what your backtest assumed. If there is a meaningful gap, you have found a real calibration issue.
The deeper point
Spread and cost are not just a tax to pay and accept. They are part of the edge calculation. A pattern with a 54% win rate on 2:1 RR is not automatically profitable — it is profitable at zero cost and becomes less so as friction increases. At some level of spread and slippage, a 54% win rate pattern breaks even. Below that, it loses.
This means the pattern’s actual profitability depends on your specific broker, account type, instrument, and time of execution. Two traders running the same validated pattern can have completely different live results because their cost structures are different.
Most backtesting treats this as a footnote. In practice, it is often the deciding factor between a strategy that works and one that almost works and quietly takes your money instead.