← setups · Research, not advice.

Nifty option pricing models vs the real market: which fits best, and do the misfits give a buyer an edge?

Research, not advice. Read-only study; no orders placed. Built 2026-10-17.

Short answer

New: Top option mismatches vs fair value (1-minute) — biggest raw/liquid/tradable gaps vs the SVI smile, where they cluster, how fast they close, buyer test (FAIL).

Follow-up: Mismatch accumulation over hours/days vs multi-day Nifty moves — ML test (GBM, HMM, Isolation Forest, SHAP): direction FAIL, range-only predictor.

Data used

Model accuracy ranking (out of sample)

Three tests: holdout = fit on 100-point strikes, price the 50-point strikes in between at the same time. ahead30 = parameters from 30 min earlier, with the new forward and T. dayfixed = parameters fixed at 10:00 for the rest of the day.

model holdout RMSE pts holdout RMSE IV (vol pts) median abs IV err ahead-30m RMSE pts / IV day-fixed RMSE pts / IV
SVI (raw, per expiry per snapshot) 1.00 0.23 0.07 3.03 / 0.69 6.99 / 2.03
Bates (Heston + Merton jumps) 1.09 0.46 0.07 3.07 / 0.74 7.04 / 1.72
SABR (β=1, Hagan) 1.46 0.54 0.17 3.19 / 0.95 7.16 / 2.27
Heston 1.54 1.78 0.18 3.29 / 2.01 7.51 / 3.20
BSM flat IV 10.33 4.25 1.31 10.55 / 4.34 –

By time to expiry (holdout, IV RMSE): SVI 0.54 / 0.30 / 0.21 / 0.16 vol pts for <1d / 1–2d / 2–4d / >4d. Heston breaks down on expiry day (5.9 vol pts <1d) because it cannot make the steep short-dated wings without jumps. Bates fixes most of that (1.1).

By moneyness, SVI wins every bucket: deep OTM puts 0.29, ATM 0.16, deep OTM calls 0.25 vol pts. 2026 test front week: SVI 0.71 pts / 0.26 vol, Bates 0.95 / 0.46, SABR 1.33 / 0.73, Heston 1.47 / 2.56.

Arbitrage checks (SVI): 0.36% of front/next pairs show a calendar violation on |k| ≤ 4% (next-week total variance below front-week). The Gatheral butterfly condition g(k) ≥ 0 holds on |k| ≤ 8% for 97% of next-week fits and 82% of front-week fits. The failures are almost all in the extrapolated far wings near expiry, beyond the quoted strikes. Median in-sample fit error is 0.12 vol pts.

Pricing lesson: a single BSM IV is off by about 10 premium points. SVI, Bates and SABR fit the weekly chain to about 1 point, roughly the bid/ask and 1-minute staleness noise. Weekly Nifty options are priced very consistently with one smooth smile. Little of the "mispricing" is left to harvest.

Charts

Model accuracy

IV smile fits (one snapshot)

Model vs market premiums over a day

Residual heatmap strike × time, spot overlaid

Outlier timeline vs spot (2026)

Verdicts: 2026 test P&L vs placebo

Move size after signal (volatility clustering)

Clues tested and verdicts

Rules: top/bottom decile thresholds come from train. Direction comes from train (the sign of the excess 15-minute spot move). The horizon (5/15/30/60 min) is picked on tune. 30-minute cooldown. Entry at the next 1-minute close and exit at the close h minutes later, using real front-week ATM CE/PE (or the flagged contract).

Costs: lot 65, 1 pt slippage per side on premium, ₹50 per round trip per leg. Placebo: the same side and same time of day on 10 random days in the same split. Hit rates are spot direction, with Wilson 95% CI. Full grid: clues_continuous.csv, clues_continuous_allh.csv, clues_contract.csv.

clue best variant (side, h) train n / ₹ (placebo) tune n / ₹ (placebo) test n / ₹ (placebo), t test hit (CI) verdict
C1 residual z ≤ −3 & ≥1 pt cheap vs SVI → buy that option buy, 30m 181 / −267 (−228) 32 / −343 (−163) 14 / −35 (−152), t 0.7 – FAIL
C1 residual z ≤ −2 (looser) buy, 30m 642 / −270 (−195), t −2.3 196 / −213 (−200) 173 / −123 (−175), t 1.1 – FAIL
C2a parity: strike's C−P implies forward ≥3 pts off → buy cheap leg 30m 5362 / −194 (−188) 2599 / −184 (−184) 4796 / −162 (−179), t 2.5 – FAIL (train t −3.4 at 15m, sign flips)
C2b implied forward − spot jumps up (15m) CE 15m 593 / −199 (−222) 224 / −197 (−196) 363 / −138 (−206), t 1.0 51.5% (46–57) FAIL
C3a 25Δ risk reversal change (15m), top PE 5m 466 / −195 (−186) 57 / −103 (−175) 204 / −173 (−190) 47.8% (41–55) FAIL
C3a risk reversal change, bottom CE 5m 490 / −168 (−201) 69 / −165 (−196) 239 / −279 (−171), t −2.1 46.0% (40–52) FAIL
C3b butterfly (curvature) jump, top CE 5m 420 / −212 (−182) 42 / −191 (−198) 199 / −82 (−186), t 1.6 55.3% (48–62) FAIL (train worse than placebo)
C4 ATM IV − 60m realized vol, lowest decile ("cheap vol") → straddle straddle 60m 234 / −535 (−403) 32 / −282 (−433) 80 / −570 (−590) – FAIL
C4 IV − RV, highest decile CE 5m 233 / −145 (−167) 0 384 / −156 (−188) 53.1% (48–58) FAIL
C5 term spread (front − next ATM IV) high → straddle straddle 30m 201 / −447 (−429) 5 / −259 94 / −145 (−389), t 1.1 – FAIL (tune n=5)
C6 ATM IV jump (z>0.42) with spot flat → buy CE CE 15m 225 / −162 (−181) 61 / −228 (−221) 133 / −104 (−167), t 0.5 54.9% (46–63); train 56.4%, tune 55.7% WATCH (direction only), FAIL as trade
C6 IV drop with spot flat → PE PE 30m 219 / −73 (−171) 55 / −30 (−160) 67 / −392 (−76), t −1.6 52.2% FAIL
C7a put-minus-call OI build while IV up PE 30m (bottom) 206 / −36 (−146) 117 / +50 (−162) 299 / −226 (−226) 53.2% (48–59) FAIL (failed in test)
C7b put OI build while IV down – – – 313–327 / −175..−188 (≈ placebo) 46–51% FAIL
C7c total near-ATM OI unwind (bottom) → straddle straddle 30m 440 / −329 (−387) 294 / −342 (−389) 468 / −273 (−348), t 1.9 – FAIL (consistently less bad than placebo, never positive)
C8 OTM calls vs puts richer than 15 min ago 5m 436–455 / −186..−211 +2.3 t in tune 223–265 / −222..−287, t −2.6 45% FAIL (sign flips)
C0 plain 15m ATM IV change – 426–434 / −235..−286 – 163–292 / −174..−201 (≈ placebo) 50–52% FAIL

Why the residual outliers don't pay: cheap-vs-SVI outliers persist. Only 5–18% flip sign within 5 minutes, so they are mostly staleness or illiquidity in that strike, not a temporary mispricing that snaps back. The typical outlier is only 1.3–3.3 premium pts off fair. The round-trip cost on a cheap OTM option is ≈2.8 pts (₹180/lot), which absorbs it. The placebo OTM buy of the same moneyness loses ≈₹175–230 per trade on its own, so gross P&L ≈ 0 and costs decide it.

Magnitude (volatility clustering), PASS as a predictor. In 2026, nearly every extreme reading was followed by bigger-than-average spot moves. Examples: butterfly jump |5m move| 18.9 vs 11.5 pts average; term-spread inversion 19.3 vs 11.5; IV jump with flat spot 24.8 vs 19.6 (15m); "cheap vol" decile 47.8 vs 40.2 (60m). Straddles bought on these signals still lose (−₹145 to −₹570) because the market already marks IV up at those moments. Use it for position sizing and stop width, not as an entry.

Variance risk premium: front-week ATM IV averaged +2.6 / +2.2 / +4.5 vol pts above trailing 60-minute realized vol (train / tune / 2026). Over 30–60 minutes the average straddle buy lost ≈₹370–590 per pair including ≈₹360 in costs and slippage. Gross, buyers lose a little theta on average, and the edge sits with sellers, which is outside Satya's scope.

Rule worth watching (not trading)

"IV pops, spot doesn't move" → lean long. On a 5-minute snapshot of the front-week chain (09:30–14:25): - the SVI-implied ATM IV rises by more than 0.42 × its train-period 5-minute standard deviation, i.e. ΔATM-IV(5m) > ≈0.17 vol pts on the 252-day clock; - while |Δspot over the same 5 min| < half the train median 5-minute move (4.55 pts).

Then the next 15 minutes closed higher 56.4% (train, n=225), 55.7% (tune, n=61), 54.9% (2026 test, n=133, CI 46–63%). Buying ATM CE for 15 minutes still lost −₹162 / −₹228 / −₹104 per trade against a −₹167 placebo. Treat it as a direction filter for other setups, not a standalone buy.

Honest limits

Glossary (plain English)

Files

build_snap.py (snapshots, implied forward, IV), models.py (BSM/SVI/SABR/Heston/Bates-COS), fit.py (fits plus OOS errors), rank.py, signals.py/study.py/study_contract.py (clue tests), charts.py, rank_*.csv, clues_*.csv.