Built and verified 19 August 2026 · account (client code withheld)
A working model for an options seller, with every claim tested against data it has never seen. It does not forecast the market — we tested that and it fails. It prices the risk of a strike, which is a question the data can actually answer.
Option prices come from NSE's own daily settlement archive. Checked against 66,419 of our real fills: 99.97% of contracts found, and 100% of fill prices inside that day's traded range. The archive's index level matches an independent source to 0.000%. Every model number below is out-of-sample.
claims, not opinions
does 5% mean 5%?
A probability model is only useful if its numbers mean what they say. Each dot is one probability band; the dashed line is perfect calibration. Dot size is the number of observations.
| Model said | Actually happened | Checks |
|---|---|---|
| under 1% | 1.07% | 469 |
| 1–2% | 2.79% | 682 |
| 2–5% | 4.66% | 1,415 |
| 5–10% | 7.76% | 2,165 |
| 10–20% | 14.78% | 3,376 |
| over 20% | 47.86% | 12,165 |
One correction was necessary and is built in. The raw model understated the far-out-of-the-money tail by up to 1.8× — it said 1.5% where reality was 3.0%. For a seller that is the dangerous direction to be wrong in: it is how a ₹5 call becomes a ₹260 call. The correction is measured from the data, not guessed, and after it every band lands within 0.2 points.
Two things we will not overclaim. India VIX on its own scores marginally better than the model (Brier 0.18967 against 0.19128) — the market's own estimate is hard to beat, and the model earns its place through calibration and the tail correction rather than by outsmarting the market. And blending the two adds nothing measurable.
the variance risk premium
Buyers of protection persistently overpay. This is the engine under his whole strategy, and it exists whether or not anybody can predict direction.
| Horizon | Premium | Positive on | t-statistic |
|---|---|---|---|
| 5 days | +2.83 vol pts | 82.0% of days | 8.8 |
| 10 days | +2.58 | 82.2% | 5.6 |
| 21 days | +2.29 | 82.1% | 3.1 |
| 42 days | +1.98 | 81.2% | 1.7 |
Realised volatility here uses the Yang-Zhang estimator, which counts overnight gaps and the intraday range. That matters: the simpler close-to-close measure ignores both, understates how much the market actually moved, and so flatters the premium — by 0.7 vol points at the 5-day horizon. The figures above are the conservative ones. t-statistics are deflated for overlapping windows, which otherwise overstate significance enormously.
The edge holds in every volatility regime, and is richest when volatility is already high (+4.84 points in the top VIX quintile, positive 89% of the time) — consistent with the backtest finding that the most volatile expiries earned the most. Fear is when protection is overpriced.
And here is the other half, which matters more. In March 2020 implied volatility was 23 while realised came in at 86 — a −63 volatility point stretch. A persistent edge with a violent left tail is exactly why position sizing matters more than strike selection. The premium is collected in small amounts and lost in large ones.
474 expiries, 11.6 years, real prices
Short strangles on NIFTY, entered four sessions before expiry, held to settlement, priced at NSE's own settlement figures, with his measured all-in cost of 0.21% of turnover. One lot per leg throughout, so the columns compare like with like.
| Sold | Premium taken | Net P&L | Kept | Win rate | Worst expiry | Sharpe |
|---|---|---|---|---|---|---|
| 0.5% out | ₹17.6 L | ₹2,18,259 | 12.4% | 61% | −₹63,272 | 1.27 |
| 1.0% out | ₹11.7 L | ₹1,74,740 | 15.0% | 67% | −₹61,949 | 1.18 |
| 2.0% out | ₹5.3 L | ₹1,67,331 | 31.3% | 86% | −₹55,097 | 1.69 |
| 3.0% out | ₹2.7 L | ₹1,15,865 | 42.6% | 93% | −₹46,596 | 1.83 |
| 4.0% out | ₹1.6 L | ₹1,13,879 | 69.4% | 99% | −₹32,895 | 2.69 |
The careful conclusion, and not the one we expected. Selling further out does not make more money — paired across the same 167 expiries, the difference between 1% and 3% out is not statistically distinguishable (t = 0.56). It makes the same money at less than half the risk: standard deviation per expiry falls from ₹12,572 to ₹5,403 and Sharpe roughly doubles. That is a risk result, not a return result, and saying otherwise would be selling you something.
This is independent confirmation. The tradebook said the same thing across 8,826 of his own positions; this says it again on market data that has nothing to do with him.
tested today, on 167 real expiries
His book is deliberately lopsided — 67.5% of the premium he sells is calls. That is what exposes him to the one thing nobody can forecast. So we tested the alternative directly: sell the call and the put at the same distance.
| Book | Net P&L | Win rate | Worst expiry | Depends on direction | Depends on size of move |
|---|---|---|---|---|---|
| Call-heavy (his style) | ₹1,52,392 | 83% | −₹62,748 | −0.475 | −0.668 |
| Balanced 2% / 2% | ₹1,67,331 | 86% | −₹55,097 | −0.142 | −0.696 |
| Balanced 3% / 3% | ₹1,15,865 | 93% | −₹46,596 | −0.196 | −0.539 |
Balancing the book earns 10% more, loses less on its worst day, and cuts dependence on market direction by 70% (−0.475 to −0.142) while dependence on the size of the move is untouched. That matters because size is the part that is forecastable and direction is the part that is not.
This is the single change with the best evidence behind it: it improves return and risk and removes the exposure that caused three of his four worst days.
and how not to
The intuitive rule — “sit out when volatility is expected to be high” — is wrong, and we can show it costs money.
| Expiries grouped by forecast | Net P&L | Average | Win rate |
|---|---|---|---|
| Calm forecast | ₹24,878 | ₹541 | 89% |
| Middle | ₹51,686 | ₹1,149 | 84% |
| Volatile forecast | ₹90,767 | ₹1,973 | 85% |
The expiries the model flags as most volatile are the ones that made the most money. When volatility is expected to be high, options are priced richer — and the seller is paid for it. Skipping them would have thrown away 30% of the profit.
| Rule | Net P&L | Worst expiry | Volatility of returns | Sharpe |
|---|---|---|---|---|
| Take everything, flat size | ₹1,67,331 | −₹55,097 | ₹8,471 | 1.69 |
| Take everything, size by forecast | ₹1,39,534 | −₹31,444 | ₹6,225 | 1.92 |
| Skip the most volatile quarter | ₹1,16,445 | −₹26,000 | ₹5,213 | 2.20 |
Volatility is a sizing signal for an option seller, not a go/no-go signal. Sizing by the forecast keeps 83% of the profit while cutting the worst expiry by 43%. Skipping keeps only 70%. Neither is free — every route to lower risk costs return, and anyone who tells you otherwise is selling something.
new finding · confirmed against published research
A landmark study of the variance premium (Dew-Becker, Giglio, Le & Rodriguez, Journal of Financial Economics, 2017) found the entire premium sits at the front of the curve — and is statistically zero beyond three months. We tested that on NIFTY, on real settlement prices, using independent trades only (one per expiry).
| Expiry sold | Trades | Avg days | Premium kept | Win rate | Sharpe | Worst trade |
|---|---|---|---|---|---|---|
| Front — this week | 138 | 7 | 64.6% | 94% | 3.78 | −₹621 |
| Near — 10–35 days | 137 | 16 | 42.0% | 85% | 3.66 | −₹723 |
| Mid — 36–70 days | 32 | 63 | 25.7% | 66% | 1.41 | −₹1,682 |
| Far — 71–200 days | 28 | 107 | 10.9% | 61% | 0.54 | −₹2,345 |
Selling 3% out of the money, the share of premium that survives to expiry falls from 64.6% on the front expiry to 10.9% on a far one. Sharpe drops seven-fold and the worst trade nearly quadruples. Selling a distant expiry means holding four times the risk to keep a sixth of the premium.
This is a tenor rule, not a timing rule. It needs no forecast, no volatility view and no market call — only a decision about which expiry to sell. It is the rare case where independent academic work and this account's own market data point the same way.
Two honest caveats. The mid and far buckets rest on 32 and 28 independent trades — suggestive, not settled. And the Sharpe figures above are already deflated: an earlier version using overlapping daily entries reported roughly double these numbers, because 646 entries shared only 167 genuinely independent expiries.
including COVID — and it changes one conclusion
The backtest above covered 167 expiries from 2024. Extending NSE's archive back to 2015 gives 474 expiries across 11.6 years — and includes March 2020, which the shorter window did not. Every trade is priced at one unit, because NIFTY's lot size changed four times in this period and rupee totals would measure exchange policy rather than strategy.
| Sold | Avg premium | Premium kept | Win rate | Worst expiry | …as a multiple of premium |
|---|---|---|---|---|---|
| 1% out | ₹127.1 | 8.2% | 67% | −₹1,386 | −11× |
| 2% out | ₹64.0 | 19.4% | 83% | −₹1,346 | −21× |
| 3% out | ₹35.3 | 28.6% | 91% | −₹1,284 | −36× |
| 4% out | ₹22.5 | 37.3% | 97% | −₹1,165 | −52× |
The moneyness gradient holds over the full 11.6 years: selling further out keeps more of the premium (8.2% → 37.3%) and wins far more often (67% → 97%). That is now confirmed three separate ways — across 8,826 of his own positions, across 167 recent expiries, and across 474 expiries spanning two crashes.
On the shorter 2024–26 window we reported that selling further out delivered “the same money at less than half the risk.” Over the full record that is too generous. The worst expiry barely improves as you move out (−₹1,386 → −₹1,165, about 16%) while the premium collected falls 5.6-fold (₹127 → ₹22). Measured against what you actually take in, the tail gets worse: from 11× the average premium to 52×. The 2024–26 window simply contained no crash. This is the picking-up-pennies shape, and it is the honest version.
The practical reading is unchanged but better founded: sell further out for the higher hit rate, and control the tail with position size, not with strike distance. Distance buys you frequency; only size buys you survival.
| Year (3% out) | Premium kept | Year | Premium kept |
|---|---|---|---|
| 2015 | 37.8% | 2021 | 16.6% |
| 2016 | 32.9% | 2022 | 47.6% |
| 2017 | 99.8% | 2023 | 63.0% |
| 2018 | 94.6% | 2024 | 74.5% |
| 2019 | 83.5% | 2025 | −6.2% |
| 2020 | −19.8% | 2026 | 69.3% |
Ten profitable years out of twelve. The two losses are 2020 and 2025, and the single worst expiry in the whole record is 12 March 2020 — which lost 36 times the premium it collected. An option seller should expect a losing year roughly one year in six, and should size so that year is survivable rather than terminal.
All free. No paid data feed, no credentials, no subscription.
$ python3 strike_advisor.py --spot 24450 --dte 4 --vix 12.5 --ladder
distance strike chance it is reached
1.0% CE 24,694 45.0%
2.0% CE 24,939 12.1%
3.0% CE 25,184 3.9% <- calibrated, tail-corrected
3.0% PE 23,716 6.1% <- puts riskier than calls, as reality shows
$ python3 strike_advisor.py --spot 24450 --dte 4 --strike 24800 --premium 12 --qty 3750
chance it is reached 27.1%
premium collected Rs 45,000
EXPECTED VALUE -Rs 38,592
you break even if the breach chance is under 14.6% (model says 27.1%)
-> NEGATIVE EDGE
strike_advisor.py
Probability a strike is reached, and whether the premium covers it.
backtest.py
Any short-premium rule replayed on 167 real expiries.
fetch_chain.py
NSE's daily option chain, free. 647 sessions pulled so far.
verify_chain.py
Refuses to trust the chain until fills match. Currently 100%.