Guides

Why options backtests lie: 7 mistakes

Most bad backtests are not wrong because of the strategy. They are wrong because of what the simulation quietly assumed. Options make this worse: there are several legs, many strikes, expiries that move around holidays, and spreads that cost real money. These are the seven assumptions worth checking first.

Last updated 2026-10-01

1. A notional lot size

Contract sizes differ between underlyings and have changed over time. A simulation that uses a round "one unit" will scale every number incorrectly and hide the effect of rounding to whole lots. Use the real lot size for the underlying and the period.

2. An invented expiry calendar

Weekly and monthly expiries land on specific days and are pulled forward when the usual day is a holiday. If the simulation assumes an expiry on a day that was a holiday, trades that never existed appear in the results. The calendar has to be the real one, including the shifted weeks.

3. Treating a multi-leg structure as one trade

A structure is several orders. If one leg exits on its stop while another stays open, you are holding a different position from the one you designed, with a different risk profile. Price each leg at its own entry and exit, so a partial structure is valued as a partial structure.

4. Ignoring costs and slippage

Show gross profit, charges and the after-charges figure as separate lines. Folding them into one number hides which part of the result is the strategy and which is the friction.

  • Government charges: securities transaction tax, exchange and clearing fees, GST and stamp duty. Rates change, so check the current ones for the period you test.
  • Brokerage: set it to what you actually pay.
  • Slippage: option bid-ask spreads can be wide, especially far from the money and near the open. A strategy that trades often can be consumed by this alone.

5. Look-ahead in entries and exits

If a signal uses a candle that was not yet complete at the entry time, or a stop is assumed to fill at exactly its trigger price on a gap, the test is using information or fills that were not available. Entries should use only completed data, and exits should be evaluated in the order they would really occur.

6. Optimising on the same data you judge on

Every parameter you tune against a window is a degree of freedom the window can fit. Keep unseen data for the verdict, and prefer walk-forward testing, which repeats that discipline across many windows.

7. A result with no trades, or too few

A run that produces zero trades is a signal to investigate the configuration, not a result. A run with a handful of trades cannot support any conclusion. Look at the trade ledger and the reasons for each entry and exit before trusting a summary number.

Common questions

Why does my options backtest look better than live trading?

Common reasons are unrealistic fills (mid-price instead of the real spread), ignored costs, an incorrect expiry calendar, tuning on the same data used to judge the result, and look-ahead in signals. Checking each of these usually explains most of the gap.

Do holidays matter for options backtesting?

Yes. Expiries are moved earlier when the usual expiry day is a holiday. A backtest that ignores this places trades on days that were not valid expiries.

Should costs be shown separately in a backtest?

Yes. Showing gross result, government charges and the after-charges result as separate lines makes it clear how much of the outcome is lost to friction.

Try it on the desk

Build the strategy without code, run it over history, and read the result before any money is involved.