Does a build-up of option mispricings predict multi-day Nifty moves?

Research, not advice. This is a read-only study of historical data. No orders were placed. Built 2026-10-18 (IST). Data runs from 2024-09-27 to 2026-10-01: 498 sessions of real 1-minute Upstox Nifty weekly option chains.

Short answer: mostly FAIL for an option buyer.

What "accumulation" means here

Every 5 minutes, a smooth SVI volatility smile was fitted through the whole front- and next-week chain (from the earlier option-pricing-outliers study). Each option's residual is its market price minus the smile's fair price. One residual on its own closes within minutes. The question here is whether the tilt of the whole chain builds up over hours and days, and whether that build-up tells you where Nifty goes next.

The chart shows a structural break. In train (Sep 2024–Jun 2025) the OI-weighted residuals hovered around 0. From mid-2025 calls and puts at high-OI strikes sit about +0.3 pts rich, around the time of mid-2025 market-structure changes such as the SEBI F&O rules and the move to Tuesday expiries. The cause has not been established. Fixed train thresholds therefore stop firing in 2026, and only within-period ranks or z-scores carry over.

Method

Splits: train 2024-09-27 → 2025-06-30 (186 days), tune 2025-07 → 2025-12 (126), test 2026-01 → 2026-10-01 (186), with the test looked at once. Models: (a) decile and Spearman-IC checks with thresholds set on train, 5-day block-bootstrap CIs and Benjamini–Hochberg control; (b) LightGBM (depth 2, 4 leaves, min 25 per leaf, L2 = 10, 50% feature subsampling), walk-forward with monthly refits, purging of the target horizon plus a 2-day embargo, and the number of rounds chosen on the tune months only; (c) a 3-state GMM and a 3-state Gaussian HMM using forward-filtered probabilities only (no smoothing look-ahead), fitted on train; (d) an Isolation Forest fitted on train; (e) TreeSHAP contributions. Baselines: always-up, prior-day momentum, a vol-only score, a price/vol-only LightGBM (same pipeline without any accumulation features), and a placebo of 30 refits on date-shuffled feature rows. Tests counted: about 484 (320 univariate, 71 partial ICs, 13+24 model fits, 4 regime tests, 52 backtest cells), so at p<0.05 roughly 24 "hits" are expected by chance.

(a) Simple checks: do extreme accumulation deciles lead to drift?

The left panel is the core hypothesis: calls richer than puts over 3 days → Nifty drifts up over the next 3 days. The quintile lines do not agree across periods. The IC with next-day return is −0.09 (train), −0.14 (tune) and +0.13 (test), so the sign flips. The right panel shows the one robust pattern: a cheaper chain comes before a bigger next-day range in every period.

Out of 320 feature×target tests, 58 had test p<0.05 (about 16 expected by chance). After requiring the same sign in train, tune and test plus BH-q<0.05, 11 PASS, and every one is about range/magnitude or breakouts. None is a 1–5-day direction target.

feature target ic_train ic_tune ic_test ic_test_lo ic_test_hi p_test q_test verdict
ce_px_r3 rng1 -0.080 -0.172 -0.487 -0.604 -0.311 0.000 0.000 PASS
ce_px_r3 absr1 -0.104 -0.133 -0.233 -0.419 -0.015 0.022 0.136 WATCH
pe_px_r3 rng1 -0.180 -0.062 -0.457 -0.618 -0.266 0.000 0.000 PASS
pe_px_r3 absr1 -0.213 -0.106 -0.245 -0.423 -0.053 0.009 0.067 WATCH
ce_pxpar_r3 rng1 -0.097 -0.184 -0.497 -0.612 -0.337 0.000 0.000 PASS
ce_pxpar_r3 absr1 -0.141 -0.163 -0.233 -0.402 -0.050 0.014 0.094 WATCH
pe_pxpar_r3 rng1 -0.133 -0.058 -0.443 -0.592 -0.232 0.000 0.000 PASS
pe_pxpar_r3 absr1 -0.170 -0.117 -0.276 -0.433 -0.079 0.005 0.043 PASS
onesided_ce absr1 0.024 0.072 0.229 0.038 0.389 0.012 0.081 WATCH
onesided_ce_r3 rng1 0.024 0.122 0.469 0.286 0.585 0.000 0.000 PASS
onesided_ce_r3 absr1 0.021 0.127 0.234 0.047 0.381 0.007 0.052 WATCH
ivrv5 rng1 0.116 0.016 0.423 0.227 0.601 0.000 0.000 PASS
ivrv5 absr1 0.200 0.018 0.314 0.129 0.475 0.000 0.004 PASS
ivrv5 fh_best_move 0.047 0.093 0.230 0.059 0.379 0.007 0.051 WATCH
stress rng1 0.005 0.016 0.363 0.182 0.526 0.000 0.000 PASS
n_trad_cheap_minus_rich r1 0.063 0.112 0.165 0.019 0.306 0.018 0.112 WATCH
n_trad_cheap_minus_rich bo_up 0.039 0.181 0.186 0.024 0.292 0.007 0.051 WATCH
n_trad_cheap_minus_rich bo_dn -0.064 -0.019 -0.159 -0.282 -0.014 0.027 0.158 WATCH
maxoi_tot_dist rng1 0.061 0.094 0.195 0.040 0.345 0.015 0.098 WATCH
maxpain_dist rng1 0.127 0.230 0.205 0.034 0.358 0.010 0.070 WATCH
maxpain_dist bo_up -0.259 -0.233 -0.157 -0.283 -0.011 0.029 0.165 WATCH
maxpain_dist bo_dn 0.111 0.179 0.144 -0.001 0.258 0.032 0.182 WATCH
pcr bo_up 0.276 0.256 0.258 0.112 0.382 0.000 0.005 PASS
pcr bo_dn -0.204 -0.213 -0.229 -0.331 -0.109 0.000 0.001 PASS

Incremental check (partial ICs). The target is first residualised on a train-fitted baseline: vol (ATM IV, 5-day RV, today's range, 5-day range) for magnitude targets, and price location (close-in-range, 1- and 5-day return, range, gap) for direction and breakout targets. Survivors:

kind feature target ic_train ic_tune ic_test lo hi p q verdict
partial_vs_vol ce_px_r3 rng1 -0.090 -0.217 -0.441 -0.562 -0.259 0.000 0.000 PASS
partial_vs_vol pe_px_r3 rng1 -0.216 -0.076 -0.386 -0.526 -0.192 0.000 0.000 PASS
partial_vs_vol ce_pxpar_r3 rng1 -0.113 -0.230 -0.444 -0.565 -0.253 0.000 0.000 PASS
partial_vs_vol pe_pxpar_r3 rng1 -0.156 -0.071 -0.368 -0.504 -0.178 0.000 0.000 PASS
partial_vs_vol onesided_ce rng1 0.000 0.079 0.403 0.253 0.531 0.000 0.000 PASS
partial_vs_vol onesided_ce_r3 rng1 0.039 0.138 0.413 0.232 0.539 0.000 0.000 PASS
partial_vs_vol maxoi_tot_dist rng1 0.083 0.085 0.191 0.001 0.341 0.022 0.066 WATCH
partial_vs_vol maxpain_dist rng1 0.144 0.201 0.163 0.001 0.286 0.027 0.072 WATCH
partial_vs_vol ce_px_r3 fh_best_move -0.115 -0.024 -0.373 -0.509 -0.245 0.000 0.000 PASS
partial_vs_vol ce_pxpar_r3 fh_best_move -0.137 -0.007 -0.329 -0.461 -0.216 0.000 0.000 PASS
partial_vs_price pcr bo_up -0.053 -0.212 -0.195 -0.362 -0.021 0.024 0.066 WATCH
partial_vs_price maxpain_dist bo_up 0.169 0.194 0.207 0.045 0.348 0.006 0.020 PASS
partial_vs_price maxoi_tot_dist bo_up 0.128 0.294 0.233 0.089 0.373 0.002 0.009 PASS
partial_vs_price onesided_ce_r3 bo_dn 0.095 0.029 0.181 0.035 0.297 0.006 0.020 PASS
partial_vs_price n_trad_cheap_minus_rich r1 0.050 0.153 0.140 -0.002 0.266 0.041 0.101 WATCH

(b) Gradient-boosted trees, purged walk-forward. Verdicts (2026 test vs baselines)

target (metric) tune (walk-fwd) 2026 test test CI lo test CI hi placebo mean placebo 95th momentum baseline vol-only baseline price/vol-only LGBM test full − price/vol (95% CI) verdict
next-day up (AUC) 0.522 0.479 0.398 0.574 0.513 0.567 0.447 – 0.562 -0.095 [-0.166, -0.036] FAIL
next 2-day up (AUC) 0.460 0.407 0.313 0.489 0.511 0.612 0.490 – – – FAIL
next 3-day up (AUC) 0.479 0.451 0.359 0.556 0.509 0.604 0.486 – 0.510 -0.112 [-0.229, +0.007] FAIL
next 5-day up (AUC) 0.521 0.513 0.399 0.625 0.505 0.595 0.481 – – – FAIL
close > prior high (AUC) 0.664 0.685 0.585 0.771 0.516 0.615 – – 0.658 +0.025 [-0.014, +0.074] WATCH
close < prior low (AUC) 0.682 0.641 0.537 0.729 0.494 0.570 – – 0.653 -0.051 [-0.097, -0.008] FAIL
1st-hour CE beats PE (AUC) 0.521 0.446 0.369 0.530 0.495 0.546 0.516 – 0.450 +0.006 [-0.093, +0.098] FAIL
next-day return (Spearman) 0.021 0.030 -0.103 0.177 -0.001 0.096 -0.063 – – – FAIL
3-day return (Spearman) 0.023 -0.200 -0.376 0.007 0.029 0.152 -0.068 – – – FAIL
5-day return (Spearman) 0.080 -0.125 -0.369 0.128 0.000 0.162 -0.027 – – – FAIL
|next-day move| (Spearman) 0.128 0.228 0.060 0.382 0.032 0.208 – 0.330 0.220 -0.036 [-0.133, +0.047] FAIL (vol already explains it)
next-day range (Spearman) 0.164 0.373 0.154 0.517 0.017 0.256 – 0.558 0.478 -0.105 [-0.225, -0.016] FAIL (worse than vol-only)
best ATM 1st-hr move (Spearman) -0.090 0.168 0.014 0.321 -0.040 0.167 – 0.258 0.200 +0.013 [-0.135, +0.156] FAIL

AUC 0.5 = coin flip. 2026 base rates: up days 46%, so always-up was right 46% of the time; close above the prior high 24%. The breakout models beat the shuffled-date placebo, but the price/vol-only model does about as well, so the "edge" is price location, not accumulation.

(e) Which features matter (SHAP)

For range, the top features are smile-shape changes (25Δ RR and butterfly drift), 2-day put residuals and ATM IV, which are mostly volatility information. For breakouts it is overwhelmingly clv (where today closed in its range), then put residuals, PCR and IV−RV. For next-day direction the importances are spread thin across noise-level features, as expected when nothing predicts.

(c) Regimes: calm / accumulation / stress

States are named by their mean stress. GMM centres (z-scores): {"stress": {"calm": -0.99, "accumulation": 0.06, "stress": 0.58}, "pers_any_oish_r3": {"calm": -0.11, "accumulation": 2.33, "stress": -0.86}, "atm_nx": {"calm": -0.85, "accumulation": -0.54, "stress": 3.04}, "ivrv5": {"calm": -0.27, "accumulation": 0.12, "stress": 2.56}, "acc_mag": {"calm": -0.26, "accumulation": 1.28, "stress": -0.45}}. "Accumulation" = high OI share at persistently mispriced strikes with low IV. In 2026 the regimes separate the next-day range clearly (Kruskal p: GMM 1.9e-07, HMM 9.4e-10) but not the direction (p 0.45 / 0.47). Accumulation days come before the quietest next sessions; stress days come before the widest.

model split state n r1 up1 absr1 rng1 r5 fh_best
gmm test accumulation 55 0.043 0.436 0.523 0.821 -0.333 14.592
gmm test calm 86 -0.167 0.477 0.609 0.950 -0.601 23.275
gmm test stress 45 -0.061 0.467 1.086 1.311 -0.121 37.073
gmm train accumulation 48 0.096 0.479 0.770 1.185 0.288 37.301
gmm train calm 124 -0.101 0.419 0.581 1.042 -0.312 32.971
gmm train stress 12 0.678 0.750 0.932 1.004 2.572 19.631
gmm tune accumulation 31 0.004 0.419 0.400 0.692 0.119 27.176
gmm tune calm 95 0.023 0.516 0.422 0.708 0.114 22.276
hmm test accumulation 93 -0.086 0.462 0.526 0.789 -0.324 18.312
hmm test calm 31 -0.178 0.452 0.742 1.199 -1.013 25.022
hmm test stress 62 -0.020 0.468 0.937 1.215 -0.244 32.185
hmm train accumulation 84 -0.073 0.405 0.642 1.151 -0.204 33.559
hmm train calm 69 -0.058 0.449 0.575 0.975 -0.311 30.363
hmm train stress 31 0.333 0.613 0.859 1.101 1.439 38.512
hmm tune accumulation 72 0.002 0.472 0.441 0.720 -0.080 26.663
hmm tune calm 50 0.037 0.520 0.392 0.692 0.345 19.703
hmm tune stress 4 0.089 0.500 0.280 0.565 0.754 12.790

(d) Anomaly days for eyeballing (Isolation Forest, top 25)

Manipulation-like (flag) = one-sidedness ≥ train 90th percentile, OI build at persistent strikes ≥ train 67th percentile, and a mispricing streak ≥ 3 days. This is a pattern flag for a human to inspect, not evidence of manipulation. The red line in each mini chart marks the anomaly day; the chart shows Nifty daily closes from 5 sessions before to 5 after.

date period anomaly pct manip-like CE one-sided PE one-sided OI build at persistent strikes max streak (days) CE−PE 3d DTE next-day % next 3d % next 5d % next-day range % next-day best ATM 1st-hr move (pts) chart (D−5…D+5)
2024-12-31 train 1.000 YES -0.168 -0.077 0.043 5 -0.348 2 0.379 1.349 0.109 1.098 3.150
2025-01-01 train 0.998 YES -0.099 -0.097 0.055 6 -0.065 1 1.708 -0.545 -0.352 2.000 12.190
2025-06-03 train 0.996 YES -0.203 -0.030 0.066 4 0.359 2 0.299 1.865 2.229 0.464 -19.850
2025-05-08 train 0.994 YES -0.123 -0.053 0.152 3 0.097 0 -0.973 1.247 3.089 0.941 -17.460
2025-12-05 tune 0.992 YES -0.152 -0.077 0.053 8 -0.065 2 -0.936 -1.672 -0.512 1.094 20.050
2026-08-10 test 0.990 YES -0.141 -0.008 0.079 9 -0.380 1 -0.457 -0.767 -1.212 0.600 11.550
2026-08-07 test 0.988 YES -0.141 -0.054 0.050 8 -0.243 2 0.054 -0.550 -0.836 0.447 -1.350
2025-12-11 tune 0.986 YES -0.187 -0.110 0.039 7 -0.272 3 0.557 -0.182 -0.320 0.460 8.650
2026-07-02 test 0.984 YES -0.106 -0.136 0.061 5 0.504 3 0.429 0.774 -0.770 0.521 5.300
2025-12-03 tune 0.982 YES -0.142 -0.071 0.087 6 -0.258 4 0.123 -0.201 -0.937 0.613 54.050
2026-07-30 test 0.980 YES -0.115 -0.113 0.054 4 -0.298 3 0.288 1.302 1.387 0.534 12.150
2026-01-01 test 0.978 -0.060 0.019 0.110 6 -0.247 3 0.745 0.132 -1.043 0.848 61.100
2025-11-28 tune 0.976 YES -0.111 -0.111 0.026 6 -0.288 2 -0.109 -0.841 -0.107 0.769 5.000
2025-12-24 tune 0.974 0.030 0.017 0.130 6 -0.003 3 -0.360 -0.657 -0.005 0.519 6.000
2025-07-17 tune 0.972 YES -0.161 -0.062 0.191 3 0.060 0 -0.567 -0.178 -0.230 0.900 55.250
2025-12-31 tune 0.970 YES -0.104 0.028 0.139 5 -0.221 4 -0.006 0.392 0.004 0.322 16.100
2026-08-06 test 0.968 YES -0.130 -0.114 0.019 7 -0.087 3 -0.266 -0.669 -0.980 0.437 8.300
2025-12-08 tune 0.966 YES -0.071 -0.082 0.030 9 -0.186 1 -0.352 -0.133 0.313 0.754 25.700
2025-12-15 tune 0.964 0.005 -0.002 0.105 5 0.100 1 -0.627 -0.765 0.570 0.563 19.200
2025-11-21 tune 0.962 YES -0.106 -0.063 0.026 5 -0.007 2 -0.464 0.534 0.538 0.885 7.050
2025-11-24 tune 0.960 0.081 -0.049 0.066 4 0.045 1 -0.321 1.060 0.893 0.675 48.950
2025-11-19 tune 0.958 YES -0.143 -0.117 0.067 3 -0.030 4 0.554 -0.421 0.577 0.704 4.700
2025-12-10 tune 0.956 YES -0.063 -0.103 0.082 6 -0.391 4 0.603 1.049 0.307 0.892 48.950
2025-12-04 tune 0.954 YES -0.138 -0.045 0.027 7 -0.191 3 0.611 -0.676 -0.457 0.835 44.550
2025-12-17 tune 0.952 -0.002 -0.039 0.104 6 0.061 4 -0.024 1.312 1.231 0.682 4.500

What followed (means):

set split n r1 absr1 r3 abs_r3 rng1 up1 fh_best
top5pct_anomaly train 4 0.353 0.840 0.979 1.251 1.126 0.750 -5.493
top5pct_anomaly tune 15 -0.088 0.414 -0.092 0.672 0.711 0.333 24.580
top5pct_anomaly test 6 0.132 0.373 0.037 0.699 0.564 0.667 16.175
top5pct_anomaly all 25 0.036 0.473 0.110 0.771 0.742 0.480 17.751
manip_like train 9 0.049 0.491 0.587 0.941 1.057 0.444 29.298
manip_like tune 21 -0.032 0.370 -0.219 0.677 0.681 0.429 19.048
manip_like test 34 0.033 0.515 -0.099 0.903 0.716 0.559 16.418
manip_like all 64 0.014 0.464 -0.042 0.834 0.753 0.500 19.092
all train 186 -0.006 0.654 -0.034 1.202 1.076 0.452 33.357
all tune 126 0.019 0.417 0.072 0.785 0.704 0.492 23.491
all test 186 -0.079 0.699 -0.243 1.205 0.999 0.462 24.050
all all 498 -0.027 0.611 -0.085 1.097 0.953 0.466 27.338

Direction of one-sidedness vs the next 3-day return on manipulation-like days, Spearman by period: {"test": 0.35, "train": -0.52, "tune": 0.5}. The sign flips, so it is FAIL.

Top manipulation-like days:

date split onesided_ce onesided_pe pers_oibuild pers_maxstreak r1 r3 r5 rng1 chart
2024-12-31 train -0.168 -0.077 0.043 5 0.379 1.349 0.109 1.098
2025-01-01 train -0.099 -0.097 0.055 6 1.708 -0.545 -0.352 2.000
2025-06-03 train -0.203 -0.030 0.066 4 0.299 1.865 2.229 0.464
2025-05-08 train -0.123 -0.053 0.152 3 -0.973 1.247 3.089 0.941
2025-12-05 tune -0.152 -0.077 0.053 8 -0.936 -1.672 -0.512 1.094
2026-08-10 test -0.141 -0.008 0.079 9 -0.457 -0.767 -1.212 0.600
2026-08-07 test -0.141 -0.054 0.050 8 0.054 -0.550 -0.836 0.447
2025-12-11 tune -0.187 -0.110 0.039 7 0.557 -0.182 -0.320 0.460
2026-07-02 test -0.106 -0.136 0.061 5 0.429 0.774 -0.770 0.521
2025-12-03 tune -0.142 -0.071 0.087 6 0.123 -0.201 -0.937 0.613
2026-07-30 test -0.115 -0.113 0.054 4 0.288 1.302 1.387 0.534
2025-11-28 tune -0.111 -0.111 0.026 6 -0.109 -0.841 -0.107 0.769
2025-07-17 tune -0.161 -0.062 0.191 3 -0.567 -0.178 -0.230 0.900
2025-12-31 tune -0.104 0.028 0.139 5 -0.006 0.392 0.004 0.322
2026-08-06 test -0.130 -0.114 0.019 7 -0.266 -0.669 -0.980 0.437

Expiry pinning: does expiry close sit at the max-OI strike?

split dte n dist_maxoi dist_maxpain dist_spot maxoi_closer_rate maxpain_closer_rate p_wilcoxon
train 1 38 1.152 0.758 0.665 0.316 0.316 0.004
train 2 38 1.855 0.894 0.813 0.132 0.421 0.000
train 3 38 1.788 1.304 1.299 0.342 0.474 0.038
tune 1 27 0.649 0.544 0.346 0.333 0.333 0.025
tune 2 27 0.632 0.627 0.606 0.556 0.481 0.859
tune 3 25 0.825 0.700 0.710 0.400 0.560 0.275
test 1 39 1.009 0.734 0.739 0.359 0.513 0.012
test 2 40 1.249 1.087 1.052 0.400 0.350 0.307
test 3 39 1.559 1.102 1.024 0.410 0.487 0.012

Distances are in % of spot, from the close of day D (1–3 trading days before expiry) to the expiry close. The max-OI strike is usually farther from the expiry close than today's spot (Wilcoxon p<0.05 against it in 6 of 9 cells), and max pain is about the same as spot. FAIL: no exploitable pin.

Buy-side rules (real 1-minute premiums, after costs)

Entry is the next session's 09:16 1-minute close of the ATM strike. Exit is 10:15 ("1h") or 15:25 ("close"). Two instruments: the front-week contract, and the nearest contract with ≥4 trading days left. Costs: lot 65, 1 pt slippage per side, ₹50 per round trip per leg. Thresholds come from train. Rule A had zero 2026 trades because of the level shift, so a trailing-120-day-rank version (A2) was added afterwards and is labelled post-hoc. E uses the 2026 Jan–Feb predictions to set its threshold and trades Mar–Oct only.

rule instrument exit trades avg ₹/trade CI lo CI hi win rate total ₹
A_cheap_accum_straddle front-week ATM 1h 0 – – – – –
A_cheap_accum_straddle front-week ATM close 0 – – – – –
A_cheap_accum_straddle next(>=4d) ATM 1h 0 – – – – –
A_cheap_accum_straddle next(>=4d) ATM close 0 – – – – –
A2_cheap_accum_trailing120rank_straddle(post-hoc) front-week ATM 1h 36 -784.757 -1,386.646 -195.676 0.306 -28,251.250
A2_cheap_accum_trailing120rank_straddle(post-hoc) front-week ATM close 36 -1,937.153 -3,636.005 -266.292 0.222 -69,737.500
A2_cheap_accum_trailing120rank_straddle(post-hoc) next(>=4d) ATM 1h 34 -263.838 -821.505 365.465 0.294 -8,970.500
A2_cheap_accum_trailing120rank_straddle(post-hoc) next(>=4d) ATM close 34 -894.338 -1,957.922 369.811 0.324 -30,407.500
A0_vol_baseline_straddle front-week ATM 1h 80 -447.945 -726.975 -168.883 0.300 -35,835.600
A0_vol_baseline_straddle front-week ATM close 80 -831.364 -1,686.238 66.625 0.312 -66,509.100
A0_vol_baseline_straddle next(>=4d) ATM 1h 78 -495.867 -854.710 -146.694 0.308 -38,677.600
A0_vol_baseline_straddle next(>=4d) ATM close 78 -1,037.492 -1,604.670 -493.847 0.321 -80,924.350
A00_every_day_straddle front-week ATM 1h 185 -513.980 -689.219 -341.518 0.303 -95,086.250
A00_every_day_straddle front-week ATM close 185 -666.421 -1,261.090 -23.488 0.297 -123,287.800
A00_every_day_straddle next(>=4d) ATM 1h 183 -439.861 -595.307 -272.674 0.284 -80,494.600
A00_every_day_straddle next(>=4d) ATM close 183 -604.993 -997.583 -175.024 0.311 -110,713.750
B_maxOI_above_buy_CE front-week ATM 1h 24 349.615 -620.517 1,318.280 0.500 8,390.750
B_maxOI_above_buy_CE front-week ATM close 24 69.708 -2,346.910 2,509.751 0.542 1,673.000
B_maxOI_above_buy_CE next(>=4d) ATM 1h 24 459.438 -421.279 1,291.197 0.542 11,026.500
B_maxOI_above_buy_CE next(>=4d) ATM close 24 575.625 -1,896.193 2,865.277 0.667 13,815.000
B_maxOI_below_buy_PE front-week ATM 1h 39 -30.250 -726.860 808.223 0.410 -1,179.750
B_maxOI_below_buy_PE front-week ATM close 39 751.917 -1,067.901 2,945.162 0.385 29,324.750
B_maxOI_below_buy_PE next(>=4d) ATM 1h 39 59.917 -684.292 934.279 0.462 2,336.750
B_maxOI_below_buy_PE next(>=4d) ATM close 39 847.417 -891.438 2,788.188 0.487 33,049.250
B00_every_day_CE front-week ATM 1h 185 -246.103 -549.195 47.565 0.405 -45,529.100
B00_every_day_CE front-week ATM close 185 -602.511 -1,271.000 33.779 0.384 -111,464.450
B00_every_day_CE next(>=4d) ATM 1h 183 -224.608 -533.223 73.112 0.426 -41,103.350
B00_every_day_CE next(>=4d) ATM close 183 -487.773 -1,095.468 178.332 0.426 -89,262.500
B00_every_day_PE front-week ATM 1h 185 -267.876 -568.557 34.159 0.389 -49,557.150
B00_every_day_PE front-week ATM close 185 -63.910 -862.212 834.181 0.368 -11,823.350
B00_every_day_PE next(>=4d) ATM 1h 183 -215.253 -527.267 127.897 0.415 -39,391.250
B00_every_day_PE next(>=4d) ATM close 183 -117.220 -892.329 648.926 0.404 -21,451.250
C_more_cheap_gaps_buy_CE front-week ATM 1h 20 -376.950 -1,215.812 609.888 0.400 -7,539.000
C_more_cheap_gaps_buy_CE front-week ATM close 20 -664.087 -2,347.640 1,335.520 0.300 -13,281.750
C_more_cheap_gaps_buy_CE next(>=4d) ATM 1h 20 -325.925 -1,130.158 639.719 0.400 -6,518.500
C_more_cheap_gaps_buy_CE next(>=4d) ATM close 20 -342.045 -1,963.550 1,578.778 0.350 -6,840.900
E_gbm_breakout_up_buy_CE(Mar-Oct26) front-week ATM 1h 63 -134.964 -597.466 337.497 0.397 -8,502.750
E_gbm_breakout_up_buy_CE(Mar-Oct26) front-week ATM close 63 -344.502 -1,473.838 866.183 0.397 -21,703.600
E_gbm_breakout_up_buy_CE(Mar-Oct26) next(>=4d) ATM 1h 62 -186.081 -638.317 272.451 0.387 -11,537.000
E_gbm_breakout_up_buy_CE(Mar-Oct26) next(>=4d) ATM close 62 -315.347 -1,371.353 772.314 0.452 -19,551.500
E_gbm_breakout_dn_buy_PE(Mar-Oct26) front-week ATM 1h 59 -570.661 -956.900 -103.558 0.339 -33,669.000
E_gbm_breakout_dn_buy_PE(Mar-Oct26) front-week ATM close 59 -576.158 -1,782.624 881.326 0.288 -33,993.350
E_gbm_breakout_dn_buy_PE(Mar-Oct26) next(>=4d) ATM 1h 58 -650.118 -1,127.714 -159.884 0.345 -37,706.850
E_gbm_breakout_dn_buy_PE(Mar-Oct26) next(>=4d) ATM close 58 -889.733 -2,102.720 379.755 0.310 -51,604.500
D_manip_like_follow_CE front-week ATM 1h 8 -176.750 -1,201.384 922.156 0.625 -1,414.000
D_manip_like_follow_CE front-week ATM close 8 486.250 -2,743.468 3,747.848 0.500 3,890.000
D_manip_like_follow_CE next(>=4d) ATM 1h 8 -237.281 -1,462.887 1,022.957 0.625 -1,898.250
D_manip_like_follow_CE next(>=4d) ATM close 8 222.594 -3,276.062 3,671.159 0.500 1,780.750
D_manip_like_follow_PE front-week ATM 1h 26 -286.375 -834.756 295.756 0.385 -7,445.750
D_manip_like_follow_PE front-week ATM close 26 -538.750 -1,704.763 751.738 0.231 -14,007.500
D_manip_like_follow_PE next(>=4d) ATM 1h 26 -276.225 -838.212 348.925 0.423 -7,181.850
D_manip_like_follow_PE next(>=4d) ATM close 26 -480.100 -1,589.142 793.356 0.269 -12,482.600

Across all periods (front-week):

rule exit split n avg win
A2_cheap_accum_trailing120rank_straddle(post-hoc) 1h train 29 -1,391.752 0.207
A2_cheap_accum_trailing120rank_straddle(post-hoc) 1h tune 4 -120.313 0.500
A2_cheap_accum_trailing120rank_straddle(post-hoc) 1h test 36 -784.757 0.306
A2_cheap_accum_trailing120rank_straddle(post-hoc) close train 29 -1,417.819 0.379
A2_cheap_accum_trailing120rank_straddle(post-hoc) close tune 4 669.437 0.750
A2_cheap_accum_trailing120rank_straddle(post-hoc) close test 36 -1,937.153 0.222
A00_every_day_straddle 1h train 181 -693.062 0.282
A00_every_day_straddle 1h tune 125 -251.341 0.320
A00_every_day_straddle 1h test 185 -513.980 0.303
A00_every_day_straddle close train 181 -971.650 0.337
A00_every_day_straddle close tune 125 -846.548 0.272
A00_every_day_straddle close test 185 -666.421 0.297
B_maxOI_above_buy_CE 1h train 38 -676.053 0.474
B_maxOI_above_buy_CE 1h tune 0 – –
B_maxOI_above_buy_CE 1h test 24 349.615 0.500
B_maxOI_above_buy_CE close train 38 -673.487 0.368
B_maxOI_above_buy_CE close tune 0 – –
B_maxOI_above_buy_CE close test 24 69.708 0.542
B_maxOI_below_buy_PE 1h train 38 -179.795 0.395
B_maxOI_below_buy_PE 1h tune 24 -195.952 0.458
B_maxOI_below_buy_PE 1h test 39 -30.250 0.410
B_maxOI_below_buy_PE close train 38 -148.509 0.342
B_maxOI_below_buy_PE close tune 24 941.683 0.542
B_maxOI_below_buy_PE close test 39 751.917 0.385
C_more_cheap_gaps_buy_CE 1h train 20 -2,271.408 0.250
C_more_cheap_gaps_buy_CE 1h tune 21 -679.262 0.333
C_more_cheap_gaps_buy_CE 1h test 20 -376.950 0.400
C_more_cheap_gaps_buy_CE close train 20 -405.030 0.350
C_more_cheap_gaps_buy_CE close tune 21 -1,478.143 0.286
C_more_cheap_gaps_buy_CE close test 20 -664.087 0.300
D_manip_like_follow_PE 1h train 7 -297.000 0.429
D_manip_like_follow_PE 1h tune 15 -262.117 0.467
D_manip_like_follow_PE 1h test 26 -286.375 0.385
D_manip_like_follow_PE close train 7 -3,047.429 0.143
D_manip_like_follow_PE close tune 15 269.583 0.467
D_manip_like_follow_PE close test 26 -538.750 0.231

Range-based straddles lost more than straddles bought every day (A2: −₹785 per trade at 1h in 2026 vs −₹514 every day) because the extra movement is already in the premium. The max-OI "pull" rule B was positive in 2026 but negative in train, with confidence intervals spanning roughly ±₹2,000. That is FAIL, not an edge.

Verdict summary

HypothesisVerdictKey number (2026 test)
Accumulation predicts 1–5 day directionFAILLGBM AUC up1 0.48, up3 0.45, up5 0.51 vs placebo ≈0.51; 1/128 univariate p<0.05
Accumulation predicts next-day range / |move|PASS (predictor)Partial IC of chain cheapness vs range −0.44 [−0.56, −0.26], same sign in train, tune and test; tree model no better than price/vol-only
Breakout above prior high / below prior lowWATCH/ FAIL: AUC 0.69 / 0.64, but price/vol-only gives 0.66 / 0.65
Next-day first-hour best side (CE vs PE)FAILAUC 0.45
Expiry pin to max-OI strikeFAILMax-OI nearer than spot in 36/40/41% (DTE 1/2/3)
Regimes (HMM/GMM)PASS for range/ FAIL for direction: range p≈1e-7–1e-9; direction p≈0.45
Manipulation-like days → directionFAILSign flips between periods; followed by quieter days
Any buy-side rule after costsFAILAll 2026 rules negative or inconsistent across periods

Limits

Files: RESULTS.md, univariate.csv, partial_ic.csv, gbm_results.csv, gbm_incremental.csv, regimes.csv, anomaly_days.csv, pinning.csv, backtest.csv, shap_mean_abs.csv. Research, not advice.