Backtesting, and the four ways it lies to you
A good-looking backtest is the default rather than a discovery, because four errors reliably produce one: look-ahead bias, survivorship bias, overfitting, and ignoring costs, and a result that has not been checked against all four says almost nothing about the future.
Backtesting runs a strategy against historical data to see how it would have done. It is essential and it is also the single easiest place in trading to fool yourself.
Look-ahead bias
Using information the strategy could not have had at that moment. It creeps in subtly: a daily close used for an intraday decision, an index membership list as it stands today, a data point revised after the fact. It is the most common and the most flattering error, because the strategy is effectively being told the answer.
Survivorship bias
Testing against instruments that still exist. Every asset that went to zero, delisted or was quietly removed is absent from your history, so the backtest measures how a strategy did among the winners. In crypto, where the failure rate is high and delisting is common, this is enormous and largely invisible.
Overfitting
Tuning parameters until the past looks good. Any sufficiently flexible strategy can be fitted to any history, and the more you tune, the more you are describing what happened rather than what tends to happen. The tell is a strategy that degrades sharply when a parameter moves slightly: real edges are not that delicate.
Ignoring costs
Fees, spread, slippage, and the fact that your own order moves the price. A strategy trading frequently on small edges is almost always profitable before costs and unprofitable after, and the gap is widest in exactly the thin markets that show the best backtests. Modelling the spread is not a refinement, it is the difference between a result and a fantasy.
What a backtest is actually good for
Rejecting strategies, not selecting them. A strategy that fails a backtest is genuinely dead; a strategy that passes one has merely not been eliminated yet. Treating it as a filter rather than a forecast is the honest use, and it is why forward-testing on live data with real costs matters more than another decade of history.
Live, right now, on this page
| Market | Price | Funding | 24h volume |
|---|---|---|---|
| BTC | $78,492.50 | -0.0002% | $483,871,545 |
| ETH | $2,416.95 | 0.0012% | $278,636,031 |
| SOL | $101.53 | 0.0013% | $76,202,922 |
| HYPE | $82.70 | 0.0013% | $8,995,529 |
Read from a live market as this page rendered, through a public endpoint that needs no key. Read at 2026-09-03 13:07 UTC; accurate as of that time and not afterwards.
Describe something and watch it get built.
Open the builder, or start from a working app and change it.