BankNifty options

Method

Data

NSE's end-of-day F&O bhavcopy, 2011 to present, in two file formats with a changeover on 2024-07-08. Both are parsed into one schema and cross-checked against each other on the sessions where NSE published both.

Earlier data exists back to 2005 but is not used: on 2008-01-15, NSE listed 268 BankNifty option contracts and not one of them traded.

Prices

The underlying forward is recovered from put-call parity on the chain itself rather than taken from a separate price feed, which avoids any dividend or interest assumption. Implied volatility uses Black-76 on that forward, solved by bisection. Contracts that did not trade are excluded — NSE publishes a settlement price for every listed contract, but a price nobody paid is not a market observation.

Median share of the listed chain that actually traded in a session: 26.6%. Mean: 30.4%. Both are low because most listed strikes, on most days, sit too far from the money for anyone to trade them — expected, not a data fault.

0.59660.1073
Share of the listed BankNifty option chain that traded, averaged by month across the full history — lower means most listed contracts sat unpriced that month.

An at-the-money implied volatility could be computed for 40.7% of the 28,343 (date, expiry) rows in the panel; the rest are left null rather than estimated, because a session with too few traded strikes near the money cannot support an honest implied-volatility read.

Interest rate sensitivity

The discount rate (default 6.5%, a single constant) enters only through Black-76's discount factor once the forward is already recovered from put-call parity, so its effect on the implied volatility solved from a given price is expected to be small. Measured directly, not assumed: rebuilding one year (2021) of the panel at rate=4% and rate=8% and comparing every (date, expiry) row's ATM IV against the same rows built at the 6.5% baseline —

A quarter of a vol point at most, against typical ATM IV levels of 15–25 vol points on this index (median ~21.6 in the year checked) — genuinely negligible across the spec's 4%–8% band. atm_straddle is identically unchanged across all three rates (it is the observed market close price, which does not depend on the discount rate at all — only the IV solved from it does); skew_25d has a negligible median shift but a rare larger one, from the discrete nearest-25-delta strike occasionally flipping which strike counts as "nearest" when a small rate change nudges a delta across a near-tie, not a defect.

Testing

Each hypothesis was registered with its expected direction before being run. Patterns were looked for in the earlier years and confirmed on the later ones. Significance uses permutation tests, which assume nothing about the shape of the distribution. Benjamini-Hochberg correction is applied within each family.

Why some ideas were not tested

11 of the 27 pre-registered ideas could not be honestly tested with the methods used here, and are marked Not tested rather than Rejected (1 calendar, 1 expiry, 2 positioning, 7 volatility). Four different problems caused this:

None is a failure of the idea itself. All four are limits of the testing machinery available today, recorded honestly rather than smoothed over — every excluded idea's own exact reason is on its card in the catalogue.

Regimes

BankNifty's expiry rules changed twice — weekly expiries were introduced and later abolished. The boundaries are derived from the data rather than assumed, and every result is reported per regime.

The COVID window

The out-of-sample window (2020 onward) contains March-June 2020, four months unlike any other in this sample (800 of the panel's rows). Every out-of-sample result was re-checked with that window excluded entirely from the out-of-sample side — not down-weighted, removed — and compared verdict by verdict, pattern by pattern, against the result with it included.

All three Confirmed patterns are identical either way. decay_final_three_days, weekly_final_two_days and monthly_final_two_days do not depend on the COVID window at all — none of their own selected events fall inside it, and each one's effect, p-value and verdict are unchanged with it removed. The headline result of this project does not depend on March-June 2020 in any way.

Two patterns move, neither ever Confirmed in either version:

Neither movement changes which patterns are published as Confirmed, and both were already unproven (Candidate, not Confirmed) in the version that includes the COVID window.

Downloads

Every statistic on this site is also written as CSV and parquet, in data/ next to this page:

Both formats carry identical numbers; parquet keeps types and the nested regimes column exactly as this project computed them, CSV opens anywhere. A technical reader can export, chart or re-check any figure on this site without touching the HTML at all.