An honest options backtest applies slippage to both sides of every fill, includes full statutory charges and hedge cost inside the simulation, uses a real exchange expiry calendar including holiday shifts, and validates on data that was never used during development. The decisive test is whether in-sample ranking predicts out-of-sample ranking. If it does not, the backtest cannot tell you which strategy to pick, no matter how good the best curve looks.
01What a backtest is for
A backtest is an attempt to answer one question: if I had run these exact rules over this period, without knowing what came next, what would have happened?
Almost every way a backtest goes wrong is a way that the phrase "without knowing what came next" quietly stops being true. Sometimes that is a technical leak, using a value that was not available at decision time. More often it is a human leak: the strategy was adjusted repeatedly until the curve looked good, which means the final rules encode knowledge of the whole period.
Treat the backtest as a filter that rejects strategies, not as a search for the best one. A process that rejects almost everything and occasionally admits something unremarkable is working correctly. A process that keeps producing spectacular results is producing spectacular results.
02Costs, applied per fill
In Indian index options, the transaction cost stack is substantial: brokerage, exchange transaction charges, Securities Transaction Tax, stamp duty, SEBI turnover fees and GST. For a strategy that trades every session, sometimes several times, this is not a rounding error.
The critical detail is where costs are applied. Subtracting an estimated annual cost from an annual gross return is not equivalent to charging each fill as it happens. The per-fill approach compounds correctly, interacts properly with position sizing, and, most importantly, changes which strategies survive selection. A high-frequency variant that looks best gross will often rank poorly net, and you only discover that if costs are inside the simulation.
The same applies to hedge cost. If the live strategy buys a protective option, the backtest must pay for it on every trade. Comparing an unhedged backtest against a hedged live implementation is not a comparison at all.
03Slippage on both sides
Slippage is the gap between the price your model assumed and the price you actually get. It exists on entry and it exists again on exit, and the exit is usually worse, because exits often happen when the market is moving and liquidity is thinner.
Two common shortcuts, both of which flatter results:
- Applying slippage once per round trip rather than once per fill. This halves the true cost.
- Filling at the mid price or the last traded price. Neither is available to you reliably; a market order crosses the spread, and on a wide strike that spread is the dominant cost.
We model 0.2% slippage per fill on Indian index options, on entry and on exit, alongside full statutory charges and hedge cost. Whether 0.2% is right for a given strategy depends on strike liquidity, order type and time of day: a near-the-money weekly strike at 10:00 is a completely different execution problem from a far strike in the closing minutes of expiry. The principle is to choose a figure you would not be embarrassed by if live results came in worse.
04Data quality and expiry calendars
Option backtesting is unusually demanding of data. You need per-strike, per-expiry pricing at the granularity your strategy actually decides at. Testing an intraday strategy on daily closing prices does not approximate the answer; it produces a different answer to a different question.
Specific traps:
- Assumed expiry weekday. Holidays shift expiry. A hard-coded weekday means the backtest trades a contract that did not exist, or misses the one that did. Expiry must come from a maintained exchange calendar.
- Strikes that were never liquid. Historical data may quote a strike that had no real market. A backtest happily fills there; live, you cannot.
- Contract specification changes. Lot sizes and strike intervals have changed over time. Applying today's lot size across a multi-year history misstates every position.
- Stale quotes. An option that has not traded recently may carry a price that no longer reflects anything, particularly at far strikes.
05Walk-forward validation
Splitting history once into a training half and a test half is better than nothing, but it tests a single decision made at a single moment. Walk-forward does better: select on a block of data, evaluate on the block immediately following, roll the window forward, repeat.
This mirrors the real problem. In practice you choose a strategy using everything you know today and run it on data that has not happened yet, then reassess later. Walk-forward simulates that sequence many times over, and a strategy that only worked because of one favourable regime tends to show it.
Walk-forward validation is worthless if you look at the out-of-sample result, adjust the strategy, and run it again. Every such iteration leaks information backwards. The out-of-sample period is spent the first time you use it to make a decision. If you must iterate, hold back a further block that you genuinely do not touch until the very end.
06The overfitting test that matters
Most overfitting discussions stop at "use out-of-sample data." The sharper question is whether your selection criterion has any predictive power at all.
The test: run the full candidate set. Rank every configuration by in-sample performance. Rank the same configurations by out-of-sample performance. Compute the rank correlation between the two lists. That single number tells you whether choosing the best in-sample strategy is better than choosing at random.
On one SENSEX-focused search we ran, the result was stark:
A rank correlation of −0.001 means the in-sample score had no predictive power whatsoever. Picking the top-ranked backtest from 3.2 million candidates would have been statistically equivalent to picking one at random.
The consequence is that the selection method has to change. Instead of choosing by score, the final basket was chosen by structure, which configuration families kept appearing across the surviving set, rather than which single configuration scored highest. Membership frequency across a robust region is a far more durable signal than a peak, because a peak is exactly what noise produces.
07What we rejected, and why
Several filters looked genuinely promising in-sample and were discarded on out-of-sample evidence:
| Filter tested | Outcome |
|---|---|
| VIX threshold for entry | Improved in-sample results; did not hold out-of-sample |
| Out-of-the-money strike shift | Improved in-sample results; did not hold out-of-sample |
| Opening-range ATR filter | Improved in-sample results; did not hold out-of-sample |
| Green-candle break exit | Improved in-sample results; did not hold out-of-sample |
We publish these because rejected experiments are the part of a research process that is almost never shown, and their absence is what makes published backtests untrustworthy. A strategy presented without its siblings tells you nothing about how much searching produced it.
08A checklist for someone else's backtest
Questions worth asking before you believe a curve:
- Are costs and slippage applied per fill, inside the simulation, on both sides?
- What slippage assumption, and does it vary by strike liquidity and time of day?
- Is hedge cost included, and is the backtest hedged the same way the live system is?
- Where did the expiry calendar come from, and does it handle holiday shifts?
- How many configurations were searched before this one was selected?
- Was the out-of-sample period ever used to make a change to the strategy?
- What is the rank correlation between in-sample and out-of-sample performance?
- What was tested and rejected?
- Is this a backtest or a live track record? If backtest, is that stated plainly?
An honest counterparty will answer all nine without discomfort. Difficulty on the last four is the signal you are looking for.
09Questions people ask
What makes an options backtest unreliable?
Costs applied as a lump-sum estimate rather than per fill; slippage on one side or none; an assumed expiry calendar that ignores holiday shifts; and repeated adjustment after seeing out-of-sample results, which converts that period into an in-sample one. Any of these can turn a losing strategy into a beautiful curve.
What is walk-forward validation?
Selecting a strategy on one block of history and evaluating it on the block immediately following, which it has never seen, then rolling the window forward and repeating. It approximates the real situation of choosing a strategy today and running it on data that has not happened yet.
How do you know if a strategy is overfitted?
Rank every candidate in-sample, rank the same candidates out-of-sample, and correlate the two rankings. Near-zero correlation means your selection criterion carries no information and picking the best backtest is equivalent to picking at random. In one search across 3.2 million configurations, that correlation was −0.001.
How much slippage should you assume?
Enough that live results would not surprise you, applied to every entry and every exit. We use 0.2% per fill on Indian index options plus full statutory charges and hedge cost. The right number depends on strike liquidity, order type and time of day.
Is a good backtest evidence a strategy will work?
No. A backtest is evidence a strategy has not yet been ruled out. Live results differ because of execution quality, liquidity, latency and changing market regimes. Backtested performance does not predict live performance, and any figure on this site is backtested unless explicitly stated otherwise.
QuantNifty is an algorithm development and consulting firm. We are not a SEBI-registered Research Analyst, Investment Adviser, Portfolio Manager or Broker. This page is educational and is not investment advice. All performance figures referenced anywhere on this site are backtested, not a live track record, and backtested results do not predict live results. Options trading can lose more than your initial capital. Full risk disclosure is in our Terms.
Want your strategy tested properly?
Slippage on both sides, statutory charges, hedge cost, real expiry calendars and walk-forward validation, including an honest answer when the result is that the edge is not there.
Tell us what you want tested