The 10 most common backtesting mistakes
1. Curve-fitting / overfitting
1. Curve-fitting / overfitting
>3 parameters; you tuned until you got the result you wanted; you can’t explain why the tuned parameters work.2. Look-ahead bias
2. Look-ahead bias
+200% annual return with -2% max drawdown is almost certainly look-ahead-biased.Mitigation: the unCoded Backtester handles this carefully — every decision uses only data up to the candle close. But if you’re computing custom indicators or doing post-hoc analysis, the bias can re-emerge.3. Survivorship bias
3. Survivorship bias
BTCUSDT, ETHUSDT, SOLUSDT, BNBUSDT — symbols whose continued existence is high-confidence. Don’t extrapolate from major-symbol backtests to long-tail altcoins.4. Ignoring max drawdown for total return
4. Ignoring max drawdown for total return
+50% total return looks great. The same backtest with -40% max drawdown is terrible — most operators capitulate during a -40% drawdown and crystallize the loss.Symptom: optimizing for total return without checking drawdown. Live operator panic-closes at the bottom and never realizes the “good” return.Mitigation: always read total return AND max drawdown together. Ask “could I emotionally hold through this drawdown for the recovery?” If no, the strategy is wrong for you regardless of total return.5. Fee underestimation
5. Fee underestimation
0.025% instead of 0.075%, or no fees). Reported return is much higher than live would be.Symptom: live performance is 5-10% worse than backtest predicted, attributed to “bad luck” or “different regime” when actually it’s just realistic fees eating P&L.Mitigation: use the realistic fee for your venue. Binance with BNB: 0.075%. Binance without: 0.10%. Coinbase small account: 0.40%-0.60%. Check your venue, your tier.6. Slippage underestimation
6. Slippage underestimation
+30% annual; live produces +22%. Difference is largely slippage on real fills.Mitigation: use a non-zero slippage parameter. For majors at moderate size, 0.05% slippage is reasonable. For altcoins or large size, 0.2% or more.7. Insufficient sample size
7. Insufficient sample size
<20 trades is not statistically meaningful. The result could be coincidence.Symptom: confident decision-making based on 5-10 trades. Live performance diverges wildly from “expectations.”Mitigation: aim for >50 trades in any backtest segment. Lengthen the window or pick a higher-frequency mode if you’re not getting there.8. Single-window testing
8. Single-window testing
9. Wrong fees / fee tier assumptions
9. Wrong fees / fee tier assumptions
10. Not accounting for operator behavior
10. Not accounting for operator behavior
-15% drawdown?” Stress-test your psychology, not just your strategy.More subtle mistakes
11. Backtest data quality issues
11. Backtest data quality issues
12. Time-of-day mismatches
12. Time-of-day mismatches
13. Different exchange behavior than backtest assumes
13. Different exchange behavior than backtest assumes
14. Comparing strategies with different costs as if equivalent
14. Comparing strategies with different costs as if equivalent
15. Not running the full validation pipeline
15. Not running the full validation pipeline
How to avoid these mistakes — the discipline
Define what 'good' looks like before running backtests
Use realistic fees and slippage
Test on multiple windows
Walk-forward when tuning
Sample size matters
>50 trades per segment. Lengthen the window if you’re not getting there.Drawdown over total return
Forward-test on small live capital after backtest
$1,500-$3,000 for 2-4 weeks before scaling up. Real fills, real frictions, real operator emotions.Document everything