The thesis: a technical signal, used as the entry trigger for selling index options rather than for trading the underlying directly. The instrument: NIFTY index options. The window: 438 trading days, 2025-01-01 to 2026-10-12. The result: the two-sided short structure lost money at zero slippage. That is before a single rupee of transaction cost was added. The decision: we killed it, wrote the number down, and did not rebuild it. That is the whole post, in five sentences, before anything else.
What was actually being tested
Most "backtesting trading strategies" guides on the first page of Google explain the process the same way. Pull historical data. Define entry and exit rules. Run the simulation. Read the equity curve. According to the guides, that is backtesting. What almost none of them show is what happens when the test comes back negative, and the person running it has to act on that number instead of explaining around it. We built a signal-driven option-selling engine specifically to find out. This is the test that killed our own idea.
The design under test was not "does this indicator predict the market." It was narrower and more falsifiable than that. A bounded technical signal, a volatility-normalized forward-move forecast, was used as the entry condition for a short option structure — strangle first, then an iron condor — rather than for trading NIFTY directly. We tested at the structure level because that is where the money actually changes hands in option selling. A signal can be right about direction and still lose on the position if the premium collected doesn't cover the move.
The setup, stated so it can be checked
Instrument: NIFTY index options. Coverage: 438 trading days, 2025-01-01 through 2026-10-12. We deliberately did not re-tune any parameter on the result. We also ran no train/test split on this design. The gate was frozen before the run and never adjusted afterward, specifically so a bad number couldn't be massaged into a better one after the fact. According to our test setup, that gate checked average P&L per lot per day against a minimum threshold, plus a hard per-day loss cap. A structure either cleared both, or it failed.
The headline result: the short strangle lost Rs 498.83 per lot per day, at zero slippage, across all 438 trading days. Zero slippage is not a footnote here. It's the whole point. If a structure is negative before any cost is added, no cost assumption can rescue it. The breakeven slippage for this structure does not exist. It isn't "small." It isn't "within reach of a good broker." There is no non-negative cost you can add that turns this into a winner, because the loss is already there at zero cost. That is a different claim from "the strategy is marginal," and most backtesting guides on this topic never make the distinction.
The defined-risk version lost more, not less
The instinct when a naked short structure loses money is to cap the risk. Buy the wings. Turn the strangle into an iron condor, and trade the defined-risk version instead. We tested that too, on the identical frozen signal, over the same 438-day window, with the same entry trigger. The iron condor lost Rs 1,312.78 per lot per day at zero slippage — more than 2.6 times worse than the naked strangle's loss. Buying protection on a signal with no edge costs money and protects nothing worth protecting. The wings cost more in premium given up than they ever saved in tail risk, because tail risk wasn't the actual problem. Day-to-day bleed was. At full transaction cost, the condor's worst single day lost Rs 55,006.86 per lot against a Rs 25,000 per-lot loss cap. That is a hard gate failure on two separate checks, not one.
The structure sweep: 18 combinations, 0 passed
Before accepting the kill, we ran a bounded structure sweep. Short strike distance at 3, 5, or 7 strikes out-of-the-money. Wing width at 2, 4, or 6 strikes beyond that. Stop-loss at 50% or 100% of entry premium. That's 3 x 3 x 2 = 18 combinations — the whole grid, none dropped, none errored. Every single one failed the same minimum-average-day gate. The best of the 18, short strike 3 with wing 6 and a 100% stop-loss, still lost Rs 6,902 per lot per day at zero slippage. The worst lost Rs 11,559 per lot per day. We have to state the coverage every time this number appears, because it changes what the number means. This sweep was bounded to 40 trading days, not the full 438. It swept the structure's shape over one frozen signal. It is not a search of the signal space. It answers "does a different wrapper fix this signal," not "is there a better signal."
The multiple-testing haircut, with the actual number
Here is the part almost every "beware of overfitting" paragraph on a backtesting guide gestures at, and none of them actually computes. Our structure sweep, plus the signal-tuning that fed into it, amounted to 22 signal variants tested against 18 structure combinations — 396 effective tests. Run that many tests against noisy data, and some will look good by chance alone, even if nothing underlying has edge. The standard correction for this — the deflated Sharpe ratio approach, see Further Reading below — applies a haircut factor to the reported average, sized to how many independent tests were run. For 396 effective tests, that haircut factor is 3.4587. Apply it to the already-best sweep result, Rs 6,902 per lot per day, and the haircut-adjusted figure drops to roughly Rs 8,688 per lot per day. Worse, not better, once the tests are counted honestly. Most backtesting content treats "we corrected for overfitting" as a sentence you write once. We're showing what the correction actually does to one specific number.
Where the idea broke: 0.0844 against 0.4026
The most useful number from this whole exercise explains why the signal failed as an option-selling trigger, despite being a real signal. We measured this across 2,792 entered structures in the full-range condor run. The forecast variable — our forward-move prediction, normalized by volatility — correlated 0.0844 with the actual premium pain the trade experienced. The realized underlying excursion, how far the index actually moved after entry, correlated 0.4026 with that same premium pain. Transmission works fine. A real underlying move does turn into real option losses, at a correlation of 0.40. What doesn't work is the forecast predicting that move tightly enough to matter for a short option position. Premium pain on a short structure comes from three things together: underlying move, the change in implied volatility, and time decay. The forecast variable was built to predict only the first of the three. It correlated 0.4610 with the realized underlying move itself, which is a real, usable relationship. It just isn't the relationship that decides whether a short option position survives.
That distinction is worth stating plainly, because the easy failure here is overstating the opposite conclusion. The signal is not worthless. It carries genuine range information about the underlying, verified under two independent volatility normalizers during an earlier phase of this research. What it does not carry is enough information about volatility and decay to pay for selling options against it. A forecast can be honestly right about one variable and still be the wrong forecast for the trade you built around it.
The funnel: from signal to trade
One more number set matters here, because it shows how much of the signal never even became a trade. Over the test window, the signal fired 19,052 times. Of those, only 2,792 turned into an entered structure at the lowest cost tier. The rest were skipped for specific, loggable reasons: 12,121 were skipped because the position cap was already full, 3,714 were refused because the structure would have entered at a net debit instead of a net credit, and 304 tried to enter at or after squareoff and were rejected on timing. At the highest cost tier, entries dropped further, to 2,836 and then 2,792, as the net-credit filter got stricter about what it would accept. That funnel matters for reading the headline loss number correctly. The Rs 498.83 and Rs 1,312.78 per-day figures are averaged over calendar days, including days where the signal fired but nothing was ultimately tradeable — so the loss is not concentrated in a handful of catastrophic trades. It's spread across a filtered set of entries that individually looked acceptable going in.
Why most “backtesting trading strategies” guides can’t show you this
We read the ranking pages for this exact keyword before writing this one. According to the research behind this post, the deepest of them runs a real single-stock backtest with real figures — an 18.73% annualised return, a 0.697 Sharpe ratio, a -28.24% max drawdown — and gets closer to a soft kill than anyone else on the page: it calls its own result sub-optimal, then reframes that as "scope for improvement" rather than treating it as a decision point. Another page gets within one sentence of our Rs 498.83 number, noting that a fast half-R strategy "might be breakeven or negative after costs," and never computes it. None of the three ranking pages we reviewed carries a multiple-testing haircut figure, and none shows a structure sweep with its coverage stated. That isn't a knock on those guides — teaching the mechanics of backtesting and publishing a specific kill decision are different jobs. This post is written to do the second one.
What we did, and what carries over
We stopped. The thesis — can this signal, sold as options rather than traded directly, produce a structure that clears a minimum-average-day gate without breaching a loss cap — is answered. The answer is negative for the current objective. We named it negative in our own internal documentation. We did not quietly retune the signal and re-run until a sweep cell looked better. We are publishing the number instead of a cleaned-up version of it. According to the FINRA rulemaking record on performance communications cited below, backtested results are treated differently from live results precisely because they are easy to improve after the fact by changing what gets reported. The only defense against that is reporting the losing run too.
Six rules carried over from this specific kill, each tied to a number above:
- Freeze the gate before the run, not after. Our min-avg-day and max-loss-cap thresholds were fixed before the strangle test ran. Nothing was loosened when the number came back negative.
- Test at zero cost before arguing about costs. A structure that loses at zero slippage has no breakeven cost to search for. Skipping this check is how marginal-looking strategies get presented as viable.
- Count your tests. 396 effective tests carried a 3.4587 haircut. If you ran a sweep and didn't count the combinations, you don't know how much of your "best" result is noise.
- Check whether your forecast variable is the variable that actually hurts you. 0.0844 versus 0.4026 is the whole lesson: being right about the underlying is not the same as being right about what stops an option position out.
- State the coverage of every sweep. "18 combinations" means nothing without "bounded to 40 of 438 trading days." Partial coverage dressed up as a full answer is how a weak sweep gets cited as proof.
- Publish the kill. A negative result with the gate, the number, and the decision written down is one asset a competitor can't copy from a process guide, because it requires having actually run the test and having actually stopped.
None of this is a claim that option selling doesn't work, or that Quantzee's broader backtesting framework doesn't work. It's a claim about one specific signal, tested one specific way, over one specific window. The framework did exactly what a backtesting framework is for. It told us the truth about a design we expected to work, before we traded it with real money. If you're building your own evaluation process on your own signal, our backtesting fundamentals glossary entry covers the mechanics we used here — data windows, cost modelling, and gate design — in more depth than this post needs to repeat. For the tooling side of running a sweep like this yourself, our vectorbt glossary entry and our equity curve and drawdown distribution guide cover the simulation layer and the drawdown read respectively.
If you’re testing your own signal against option structures
Three checks from this run are worth borrowing even if your signal, your instrument, and your structure are all different from ours. First, build the zero-slippage case before you build the realistic-cost case. It takes almost no extra work inside most backtesting tools, and it tells you in one run whether you're arguing about a real edge or arguing about whether costs happen to be small enough this time. Second, write down your forecast variable's correlation with the specific loss driver of your structure, not just with the underlying's direction. A signal can be genuinely predictive of price and still be the wrong predictor for a short-volatility position, because a short option loses to vega and theta as much as to delta. Third, log every skipped entry and why it was skipped, the way our 12,121 position-cap skips and 3,714 net-debit refusals were logged here. A backtest that only reports filled trades hides the shape of its own filter, and that shape is often where the real story is.
None of these checks require expensive tooling or a large team. They require deciding what you're willing to see before you run the test, and then actually looking at the number once it's in front of you, even on a day when the number is not the one you were hoping to publish. The gate we froze before this run didn't know, in advance, whether it would pass or fail — that's what made it a real gate rather than a formality. The same discipline is available to anyone testing a signal, on any instrument, with any backtesting software. It's a process decision, not a tooling decision, and it's the one habit most "backtesting trading strategies" guides describe in theory without ever showing it applied to a result that came back negative.
Frequently Asked Questions
Further reading
- Extreme Value Theory and Backtest Overfitting in Finance (Bowdoin College digital collections) — the academic framing behind the multiple-testing correction we applied to our 396-test sweep.
- SEC approval order, FINRA Rule 2210 amendment on performance communications — the regulatory record explaining why backtested and hypothetical performance are treated differently from live results.
- Related on Quantzee: straddle vs. strangle glossary entry and profit factor: the metric most likely to make a bad strategy look good.
