1. Look-Ahead Bias
Look-ahead bias happens when a backtest uses information that would not have been available at the moment of the decision. Common examples are trading at a bar's close price using a signal calculated from that same close, or using a day's high and low to decide an intraday entry.
An event-driven backtesting engine prevents this by feeding data to the strategy one tick or bar at a time, in order, so the strategy can only see the past.
2. Survivorship Bias
Testing a stock strategy only on companies that exist today silently removes every company that was delisted, merged or went bankrupt. The result looks better than reality because the losers are missing. Index constituents change too, so a test on today's index members is not the same as trading the index as it was.
Point-in-time data, including delisted symbols and historical index membership, is the fix.
3. Ignoring Costs, Taxes and Slippage
High-frequency and intraday strategies can be profitable before costs and unprofitable after them. Brokerage, exchange charges, securities transaction tax, stamp duty and GST add up quickly in the Indian market, and slippage between the signal price and the fill price often matters even more.
A realistic backtest models every cost per trade and applies conservative slippage, especially for less liquid instruments and options away from the money.
4. Overfitting to the Past
With enough parameters, any strategy can be tuned to fit historical data perfectly. That strategy has learned the noise in one data set, not a repeatable edge.
How to guard against overfitting
Out-of-sample testing: Keep a period of data untouched during development and test on it only once, at the end.
Walk-forward analysis: Optimise on one window, test on the next, then roll forward, so results reflect how the strategy would have been re-tuned in practice.
Fewer parameters: Prefer simple rules that work across a range of settings over precise values that only work at one point.
Robustness checks: Test across different instruments, time periods and market regimes.
5. Unrealistic Fills
Assuming every limit order fills the moment price touches it, or that any quantity can be traded at the last price, overstates results. Real markets have queues, limited depth, lot sizes, freeze quantities and circuit limits.
A good engine fills limit orders only when price trades through them, respects lot sizes and quantity limits, and caps position size relative to typical volume.
6. Poor Data Quality
Unadjusted splits and bonuses create fake price gaps, missing bars create false signals, and futures and options need correct expiry roll handling. For options strategies, historical option chain data with accurate strikes, expiries and prices is essential and often the hardest data to get right.
7. Looking Only at Total Return
Total return says nothing about the risk taken to achieve it. Two strategies with the same return can have very different drawdowns and very different chances of surviving a bad month.
Metrics a backtest report should include
Maximum drawdown: The largest peak-to-trough fall, and how long recovery took.
Risk-adjusted return: Sharpe and Sortino ratios, measured against a realistic risk-free rate.
Win rate and payoff ratio: How often trades win, and how large wins are compared with losses.
Trade-level detail: Every trade with entry, exit, costs and reason, so results can be audited.
Monthly returns: A month-by-month breakdown that shows consistency, not just the final number.
8. Conclusion
A backtest should be the most sceptical member of your team. Building one that avoids these mistakes takes careful engineering: event-driven processing, point-in-time data, realistic costs and fills, and honest reporting.
Accel Fintech builds backtesting engines and algo trading platforms for traders, prop desks and brokers. If your backtests and live results do not match, we can review your engine and data pipeline and help close the gap.






