BankNifty options

← All patterns

Volatility

Whether implied volatility, once unusually high or low relative to its own recent history, tends to return toward normal.

9 ideas registered in this family: 1 confirmed, 1 rejected, 7 excluded.

vrp positive on average (implied volatility)+3.1%skew inverted precedes iv rise (implied volatility)+2.8%
Each bar is that one pattern's own measured change, labelled with what was measured — never a portfolio return — so only compare bars that share the same label; green rose, red fell.

vrp positive on average Confirmed

What was actually tested (written down before the result was seen)Implied volatility tends to exceed the market's own trailing 20-session realised volatility, so options are priced above the volatility the market has recently been showing, on average.

This repeats, and it kept repeating on data it was not found on.

Happened 3,741 times in 16 years — about 240 times a year.

It worked 829 times out of 1,608.

It held up on the years used to find it, and then held up again on later years it had never been tested against.

Only 47.6% of the option contracts involved had a usable, screened price on the days this happened, so this rests on a thin slice of the market.

priorhigher familyvolatility
n (in-sample)2,133 n (out-of-sample)1,608
effect IS2.3% effect OOS3.1%
baseline IS-0.0% baseline OOS0.0%
went predicted direction (IS)51.9% went predicted direction (OOS)51.6%
p (IS)<0.001 p (OOS)<0.001
q-value (BH)q = <0.001 chain coverage47.6%
95% CI (OOS, excess over baseline) [2.2%, 4.1%]
regimeneffectmatched
R11,2591.3%49.8%
R22,0673.7%53.6%
R34201.5%48.6%

verdict reason: significant in and out of sample; awaiting FDR

skew inverted precedes iv rise Rejected

What was actually tested (written down before the result was seen)Negative put skew -- calls dearer than puts, unusual for an index -- precedes a rise in implied volatility.

This shows up in the data -- but in the opposite direction from what was predicted.

Happened 209 times in 16 years — about 13 times a year.

It went the expected way 53 times out of 118.

This is not a case of no evidence: the data shows a real, statistically decisive effect, consistently across regimes -- but in the opposite direction from what was predicted before the data was checked. A pre-registered prediction that turns out backwards is rejected on its own declared terms, however strong the underlying effect. What was actually found: out-of-sample effect +0.0280 (baseline +0.0294, excess -0.0014) contradicts the declared prior 'higher'

This has been seen only 2 times in the current era, since weekly expiries were abolished, too few to know whether it still holds now that weekly expiries are gone.

The range of plausible values includes zero, which means the effect could be real or could be nothing at all.

Only 32.1% of the option contracts involved had a usable, screened price on the days this happened, so this rests on a thin slice of the market.

priorhigher familyvolatility
n (in-sample)91 n (out-of-sample)118
effect IS8.6% effect OOS2.8%
baseline IS2.1% baseline OOS2.9%
went predicted direction (IS)58.2% went predicted direction (OOS)44.9%
p (IS)<0.001 p (OOS)0.9296
q-value (BH)q = 0.9296 chain coverage32.1%
95% CI (OOS, excess over baseline) [-4.3%, 5.5%]
regimeneffectmatched
R1423.0%50.0%
R21665.8%50.0%
R329.3%100.0%

verdict reason: out-of-sample effect +0.0280 (baseline +0.0294, excess -0.0014) contradicts the declared prior 'higher'

iv reverts from high rank Excluded

What was actually tested (written down before the result was seen)When the nearest-listed contract's (7-45 DTE) ATM implied volatility is in the top decile of its own trailing year -- a single representative contract, not a blend across whatever else is listed that day -- it falls over the following week.

This was not tested.

Not tested. This is not a rejection — the statistics needed to test it honestly are not available, so it was never run against the data. Reason on record: selects on atm_iv's own trailing-year rank (top decile) and then measures atm_iv's own subsequent change: the event is chosen because a quantity is unusually high, and the same quantity's subsequent change is then measured. An unusually extreme value tends to be followed by a less extreme one purely by chance, so this design finds an apparent effect even in data with no relationship at all. Testing it honestly needs a null that reproduces that tendency, which this harness does not implement. Not tested -- not rejected on evidence.

No hit rate, frequency or range is given for this row because none was ever computed — treat every number here as absent, never as zero.

prior (as registered)lower familyvolatility

No effect size, hit rate, p-value or confidence interval is shown here because none was ever computed — this hypothesis was not run, not run-and-rejected. Every number that would normally sit in this box is absent, never zero.

iv reverts from low rank Excluded

What was actually tested (written down before the result was seen)When the nearest-listed contract's (7-45 DTE) ATM implied volatility is in the bottom decile of its own trailing year -- a single representative contract, not a blend across whatever else is listed that day -- it rises over the following week.

This was not tested.

Not tested. This is not a rejection — the statistics needed to test it honestly are not available, so it was never run against the data. Reason on record: selects on atm_iv's own trailing-year rank (bottom decile) and then measures atm_iv's own subsequent change: the event is chosen because a quantity is unusually low, and the same quantity's subsequent change is then measured. An unusually extreme value tends to be followed by a less extreme one purely by chance, so this design finds an apparent effect even in data with no relationship at all. Testing it honestly needs a null that reproduces that tendency, which this harness does not implement. Not tested -- not rejected on evidence.

No hit rate, frequency or range is given for this row because none was ever computed — treat every number here as absent, never as zero.

prior (as registered)higher familyvolatility

No effect size, hit rate, p-value or confidence interval is shown here because none was ever computed — this hypothesis was not run, not run-and-rejected. Every number that would normally sit in this box is absent, never zero.

skew extreme reverts Excluded

What was actually tested (written down before the result was seen)When 25-delta put skew exceeds twice its trailing six-month median, it narrows over the following fortnight.

This was not tested.

Not tested. This is not a rejection — the statistics needed to test it honestly are not available, so it was never run against the data. Reason on record: selects on skew_25d's own value against its own trailing rolling median and then measures skew_25d's own subsequent change: the event is chosen because a quantity is unusually far from its own recent typical level, and the same quantity's subsequent change is then measured. An unusually extreme value tends to be followed by a less extreme one purely by chance, so this design finds an apparent effect even in data with no relationship at all. Testing it honestly needs a null that reproduces that tendency, which this harness does not implement. Not tested -- not rejected on evidence.

No hit rate, frequency or range is given for this row because none was ever computed — treat every number here as absent, never as zero.

prior (as registered)lower familyvolatility

No effect size, hit rate, p-value or confidence interval is shown here because none was ever computed — this hypothesis was not run, not run-and-rejected. Every number that would normally sit in this box is absent, never zero.

straddle cheap after low iv Excluded

What was actually tested (written down before the result was seen)A straddle bought when the nearest-listed contract's (7-45 DTE) implied volatility sits in the bottom decile of its own trailing year -- a single representative contract, not a blend -- gains value over the following week.

This was not tested.

Not tested. This is not a rejection — the statistics needed to test it honestly are not available, so it was never run against the data. Reason on record: selects on atm_iv's own trailing-year rank and measures atm_straddle: the two are formally different quantities, but not empirically different ones -- in the 7-45 DTE band this pattern selects on, period-over-period fractional change in atm_straddle correlates 0.876 with fractional change in atm_iv, because an ATM straddle's price at this tenor is dominated by vega exposure to implied volatility. Selecting on an unusually low atm_iv reading and then measuring atm_straddle's own subsequent change is therefore almost the same test as selecting on and measuring atm_iv itself: an unusually extreme value tends to be followed by a less extreme one purely by chance, so this design finds an apparent effect even in data with no relationship at all. Testing it honestly needs a null that reproduces that tendency, which this harness does not implement. Not tested -- not rejected on evidence.

No hit rate, frequency or range is given for this row because none was ever computed — treat every number here as absent, never as zero.

prior (as registered)higher familyvolatility

No effect size, hit rate, p-value or confidence interval is shown here because none was ever computed — this hypothesis was not run, not run-and-rejected. Every number that would normally sit in this box is absent, never zero.

term inversion precedes iv fall Excluded

What was actually tested (written down before the result was seen)When near-dated implied volatility exceeds far-dated by more than 3 points, the near-dated figure falls back.

This was not tested.

Not tested. This is not a rejection — the statistics needed to test it honestly are not available, so it was never run against the data. Reason on record: uses a same-date cross-sectional aggregate (the far expiry's implied volatility on the same session), and the lookahead guard truncates by row position, so it cannot distinguish 'the session was split in half' from 'the detector read the future'. Untestable under the current guard, therefore not tested -- not rejected on evidence.

No hit rate, frequency or range is given for this row because none was ever computed — treat every number here as absent, never as zero.

prior (as registered)lower familyvolatility

No effect size, hit rate, p-value or confidence interval is shown here because none was ever computed — this hypothesis was not run, not run-and-rejected. Every number that would normally sit in this box is absent, never zero.

vrp extreme reverts Excluded

What was actually tested (written down before the result was seen)When implied volatility exceeds realised by more than 8 points, the gap closes over the following fortnight.

This was not tested.

Not tested. This is not a rejection — the statistics needed to test it honestly are not available, so it was never run against the data. Reason on record: selects on vrp (= atm_iv - rv_cc_20) exceeding 0.08 and then measures atm_iv's own subsequent change: vrp is not a different quantity from the outcome, it contains it, so an extreme vrp reading is partly an extreme atm_iv reading. An unusually extreme value tends to be followed by a less extreme one purely by chance, so this design finds an apparent effect even in data with no relationship at all. Testing it honestly needs a null that reproduces that tendency, which this harness does not implement. Not tested -- not rejected on evidence.

No hit rate, frequency or range is given for this row because none was ever computed — treat every number here as absent, never as zero.

prior (as registered)lower familyvolatility

No effect size, hit rate, p-value or confidence interval is shown here because none was ever computed — this hypothesis was not run, not run-and-rejected. Every number that would normally sit in this box is absent, never zero.

vrp negative precedes iv rise Excluded

What was actually tested (written down before the result was seen)When realised volatility exceeds implied -- the market underpricing movement that already happened -- implied volatility rises to catch up.

This was not tested.

Not tested. This is not a rejection — the statistics needed to test it honestly are not available, so it was never run against the data. Reason on record: selects on vrp (= atm_iv - rv_cc_20) being negative and then measures atm_iv's own subsequent change: vrp is not a different quantity from the outcome, it contains it, so a negative-vrp reading is partly a low-atm_iv reading. An unusually extreme value tends to be followed by a less extreme one purely by chance, so this design finds an apparent effect even in data with no relationship at all. Testing it honestly needs a null that reproduces that tendency, which this harness does not implement. Not tested -- not rejected on evidence.

No hit rate, frequency or range is given for this row because none was ever computed — treat every number here as absent, never as zero.

prior (as registered)higher familyvolatility

No effect size, hit rate, p-value or confidence interval is shown here because none was ever computed — this hypothesis was not run, not run-and-rejected. Every number that would normally sit in this box is absent, never zero.