Skip to content
ChartTailor
WorkServicesPricingField NotesAbout Start a build
← Field Notes

Why your 90% backtest win rate disappears live

A strategy can test at 90% and still bleed money. The gap between the tester and the market is real and mostly predictable, and it has little to do with the idea itself.

Few things in this job feel as good as a backtest with a 90% win rate, and few things evaporate as reliably the moment real money shows up. It’s almost a rite of passage. The tester tells you you’ve found something, the account tells you you haven’t, and you spend a week trying to work out which one lied.

Neither did, usually. The gap between them is real, it’s mostly predictable, and almost none of it is about your idea. It’s about everything stacked around the idea that the tester quietly gets wrong.

The win rate was never the number that mattered

Ninety percent sounds untouchable until you ask what you win versus what you lose. Nine small wins and one giant loss is a 90% win rate and a losing strategy. The tester prints the headline and lets you bring your own optimism about the rest. So the first thing I look at on any strategy report isn’t the win rate. It’s the average win against the average loss, and the largest single loss against the average win. A high hit rate with a fat tail of losers is a trap with good marketing.

The tester lives in a frictionless world

Left on its defaults, the strategy tester assumes a market that doesn’t exist. You get filled exactly where you asked, instantly, every time, no spread, no slippage. Real fills are worse, and across hundreds of trades those small shortfalls compound straight through your edge.

The fix is to stop letting the tester assume the best. Put the costs in the code:

//@version=6
strategy("Honest test", overlay = true,
     commission_type = strategy.commission.cash_per_order,
     commission_value = 2.0,
     slippage = 3,
     initial_capital = 10000)

slippage is measured in ticks and it’s brutal on fast timeframes. Set it to something realistic for your instrument and watch how many marginal strategies turn red. That’s not the tester being pessimistic. That’s the first honest number you’ve seen.

The fills you saw were coin-flips

Here’s the one that flatters results the most. When a single candle’s high and low both touch your entry and your stop, the tester has to guess which happened first, and by default it just makes an assumption rather than knowing. On paper you got stopped into a winner. Live, the same candle might have stopped you for a loss. Anything that trades off intrabar extremes, tight stops, breakout entries, is especially exposed to this.

TradingView’s bar magnifier helps. It checks a lower timeframe inside each bar to order events more faithfully, and process_orders_on_close removes a different slice of optimism by only acting on the close. Neither makes the tester perfect. They just make it lie to you less.

You fitted the past and called it a strategy

If you nudged the parameters until the equity curve looked beautiful on the data you had, you didn’t find a strategy. You found the settings that best described that exact stretch of history, and the market is under no obligation to repeat it. That’s overfitting, and it’s the quiet reason a flawless backtest so often becomes a thoroughly average live result.

The cheap defence is to hold data back. Tune on one period, then run the untouched settings on a period the strategy has never seen, and on a couple of other instruments. If the edge only exists on the data you optimised, it was never an edge. It was a memory.

What a backtest I’d actually trust looks like

Less impressive, every time. Realistic spread and slippage baked in. Conservative fill assumptions. The same settings holding up across instruments and across time, including data the strategy was never tuned on. It shows a lower win rate and a thinner edge than the fantasy version, and that thinner edge has a chance of still being there next month.

The boring backtest that survives is worth more than the spectacular one that doesn’t, and the entire skill is telling them apart before the market does it for you. The version worth trusting is the one that already admitted what it costs.

The useful version

A high win rate is fragile until you know what it is buying.

Common reasons it disappears live:

  • no slippage or commission in the test;
  • fills assumed inside a bar with no intrabar evidence;
  • alerts firing on forming conditions while the backtest only sees closed bars;
  • parameters tuned to the exact historical sample;
  • the strategy avoids bad sessions in history but trades them live.

A better review than win rate

Before trusting the number, check:

  • average win versus average loss;
  • worst losing streak;
  • performance by session and symbol;
  • results with realistic fees and slippage;
  • results after shifting parameters slightly.

If a 90 percent win rate collapses when slippage is added or one setting moves by two points, it was not an edge. It was a delicate fit to old candles.