8 popular Nifty intraday option-buying strategies: honest backtest, by period and by market regime

Built 2026-10-27 20:34 IST. Research only, not advice. Read-only data, no orders. Option buyer only (long = buy ATM CE, short = buy ATM PE, nearest weekly with DTE≥1). REAL costs ≈2 pts per round trip. Everything below was pre-declared in PREREG.md (19:20 IST, before any 2026 number). Regime addendum after Satya's 19:17 IST question: “could it be each strategy works for certain periods”.

Short answer.
  1. None of the 8 popular setups is a proven option-buying edge. On the 2024–25 train, all 8 lost money (−2.9 to −19.7 pts per trade). In 2026, 5 of 8 are slightly positive (best: Narrow-CPR +4.8, Supertrend+VWAP +4.4 pts per trade). None is significant: the smallest BH q is 0.67.
  2. Yes, they do work in some periods and not others, and the main driver is the year itself. The rolling-expectancy and month heatmaps show long on/off stretches. Example: ORB15 on spot was +7.0 in 2024, −5.0 in 2025 and +1.0 in 2026. Only 2–4 of 9 option quarters were positive for any strategy. Much of 2026's improvement comes from October 2026 alone (13 sessions): every strategy was positive that month (+1.7 to +53 pts per trade). For Jan–Sep 2026 only P4 (+1.8), P5 (+3.7) and P7 (+0.4) were positive, and P1 was −5.5. One good month is a period effect, not an edge.
  3. Can you tell the good periods in advance? Mostly no. We screened 8 ex-ante regime labels (23 buckets: VIX, 20/50-DMA trend, efficiency ratio, prior-day range, NR7, gap size, expiry position, FII index-futures long %), 713 bucket results in all. Each strategy's “good regime” was chosen on older data by a fixed rule and applied unchanged to the next period, giving 32 out-of-sample tests. 0 of 32 survive BH (best q=0.30). The “recent-performance switch” (trade only if the last 20 trades were net positive) was no better than always-on in 11 of 16 cases.
  4. One lead worth watching: breakouts after an NR7 day (yesterday's range was the narrowest of the last 7). It was picked on train, independently, for P2, P3 and P4, and in 2026 it gave +23 to +28 pts per trade (n=15–29, raw p 0.025–0.10). But it is the same ~20–30 days for all three. On spot it helped in 4 of 5 years and reversed in 2024 (−10.6 vs +8.5). It goes on the forward-watch list, not the trade list.
  5. Combining strategies does not raise the odds (Combinations section). The 8 are not independent: when ORB15 fires, ORB5 fires the same way on 89% of those days, and the gap fade is the ORB15 trade 90% of the time. “≥2 agree” and “≥3 agree” did not beat random (2026: −1.3 and +1.3 pts per trade; train −6.6 and −11.0). The best train pair, PDH/PDL breakout + narrow CPR, made +19.8 per trade in 2026 (n=25, p=0.05), but q=0.13 and it falls to +2.8 without its best 3 trades. 0 of 11 combos count.
  6. Premium-support (“black box”) entries on the option chart do not work either (Premium support section). 4 pre-registered variants × 2 exits: all 8 lost money on train and all 8 lost in 2026 (−1.8 to −15.1 pts per trade), most of them worse than random entries at the same minute. They are negative even before charges, so the earlier harsh-cost result was not a cost artefact.
  7. The trader's discretion could not be reverse-engineered (Trader discretion section). All 218 usable log entries were replayed on real 1m bars. The logged 78% win rate becomes 27% on the real bars, and the Black Box calls (14 of 15 logged wins) become 1 of 15. A tree and a logistic on 17 entry-time features did no better than chance on held-out months (AUC 0.46 and 0.55). The pre-registered filter that came out (enter before 09:52 IST) failed the held-out test (lift 0.41) and 2024–26 history (0 of 4 count). The only robust pattern is that he trades early in the day.
  8. The trader's live YouTube calls, scored from the streams, are not an edge either (YouTube live calls section). 58 fresh calls in 31 sessions; 29 scorable on real 1m bars: +3.1 net pts per trade, win 41%, p=0.31, -4.7 without the best 3. His self-reported log matches only grp mode n ... peak_min_med sig_time_med tv_med 0 NIFTY_raw counter 13.0 ... 15.0 300.0 0.800 1 NIFTY_raw neutral 14.0 ... 12.0 304.5 0.475 2 NIFTY_raw with 14.0 ... 3.0 322.0 0.370 3 SENSEX_raw neutral 1.0 ... 41.0 327.0 0.560 4 SENSEX_raw with 1.0 ... 3.0 339.0 -0.720 5 SENSEX_scaled counter 11.0 ... 7.0 323.0 2.990 6 SENSEX_scaled neutral 22.0 ... 4.0 329.0 2.905 7 SENSEX_scaled with 24.0 ... 11.5 312.5 0.390 [8 rows x 10 columns] of 34 stream calls in the same window.
  9. Expiry-day cheap (~20) counter-trend options do jump 2×–3× fairly often, but buying them loses (Expiry cheap counter-trend section). Nifty 40% / Sensex 38% of signals later printed ≥2× and 21% / 19% ≥3×. A random minute or the with-trend option does about as well, and 83% / 95% settle at ≈0. All 6 pre-registered buyer tests lose in 2026; 0 count.
  10. The ~20 premium level is not special (Why 20? section). Across levels 5–100, the chance of 2×/3×, of expiring ≈0, and the expectancy all change smoothly; 20 sits on the curve (0 of 18 outlier checks). It does not hold better than 17/18/22/23. “Holds at 20 then breaks out” was +9.3 on Nifty in 2026 but −8.5 on train, p=0.29: noise. 0 of 12 count.
  11. “20 without time value” (ITM by ~20, delta ≈1) has no edge. It is rare: 41 Nifty events in 109 expiries, mostly after 14:30. It expires near zero far less often than the OTM-20 (34% vs 76%), with the same chance of doubling (39% vs 40%), but it is just a late spot bet that also loses before costs. 0 of 18 rows count.

Summary table · Works in which regime? · By period · Rules · Method and limits · Combinations · Premium support · Trader discretion · YouTube live calls · Expiry cheap counter-trend · Why 20? · 20 without time value

1. Summary (primary exit: structural stop, trail 50% of peak after 2R, time exit 15:14; REAL cost)

StrategyTrain Oct-24–Dec-25
n / net pts per trade
Test 2026
n / net pts
2026 win%2026 ₹ total (1 lot)Pctile vs random entriesp (2026)BH q (8)Spot net pts per trade
2022 / 23 / 24 / 25 / 26
Positive quarters
spot · options
Works in which regime?
P1 ORB15 breakout277 / -8.2181 / -3.233%-37,935540.770.77+3.6 / -6.5 / +7.0 / -5.0 / +1.010/20 · 2/9No stable regime. No filter qualified on the 2024–25 options train. On spot, the walk-forward picked a different label each year (expiry → prior-day range), and the OOS edge was not significant.
P2 ORB5 first 5-min candle281 / -4.8189 / -0.034%-508690.500.67+2.5 / -5.4 / +1.7 / -1.9 / +7.08/20 · 2/9Lead: after an NR7 day. Chosen on train (+2.1, n=42). 2026: +28.3 pts (n=29, p=0.025, beats 99% of random subsets), but BH q=0.35. Not proven. On spot, the walk-forward kept picking expiry days, which flipped sign year to year.
P3 Prior-day high/low breakout128 / -2.974 / +0.938%4,293690.420.67-6.8 / -0.1 / +8.2 / +3.2 / +7.911/20 · 3/9Lead: after an NR7 day (2026 +23.0, n=15, p=0.10, q=0.39). On spot, the filter flipped between FII-long and prior-day-range labels. Not proven.
P4 Narrow-CPR breakout + VWAP77 / -10.151 / +4.839%15,849890.240.67– / – / +34.1 / -11.1 / +22.14/9 · 2/9Lead: NR7 / compressed prior day (options 2026 +23.7, n=18; spot 2026 +33, n=28, p=0.009, q=0.30). Only one OOS year exists (no VWAP data before Oct-2024). Not proven.
P5 Supertrend(10,3) flip + VWAP165 / -5.6128 / +4.444%36,828920.170.67– / – / -4.0 / -0.2 / +16.97/10 · 4/9Mid efficiency-ratio days (0.2–0.4) chosen on train. 2026 +11.9 (n=33, p=0.13). Not proven. The meta-switch hurt.
P6 EMA 9/21 cross + VWAP202 / -4.4152 / +0.838%8,346750.420.67– / – / +21.4 / -1.6 / +9.08/10 · 4/9No. The train-chosen filter (compressed prior day) went negative in 2026 (−3.2).
P7 RSI(14) 30/70 reversal222 / -3.0160 / +0.528%5,558950.450.67-6.4 / -0.9 / -9.2 / -4.0 / +3.18/20 · 4/9No. The train-chosen filter (compressed prior day) was −8.0 in 2026, worse than always-on. On spot, no filter qualified in 2025–26.
P8 Gap fade (gap-fill)46 / -19.739 / -3.128%-7,977550.620.71-4.0 / -16.7 / +16.9 / -36.2 / -2.37/20 · 2/9No. No filter qualified on train. The M20 switch was +26 in 2026, but on only 8 trades.

Percentile vs random: 2026 mean compared with 2000 sets of random-day entries at the same minute, direction and R, with the same exit (50 = no better than random). Spot net = index points minus 1 pt. VWAP-based P4–P6 start Oct-2024 because futures volume is missing before that. Positive quarters: spot 2022–26 · options Q4-2024–Q4-2026.

2. Works in which regime?

How it was tested (pre-declared). Every label is known before 09:15. Rule: on the training window, keep the buckets of one label where the strategy averaged above 0 (with at least 10 option trades or 15 spot trades per bucket). Pick the label with the highest training total. Apply it unchanged to the next period. Options: train Oct-2024–Dec-2025 → test 2026. Spot: expanding walk-forward (train 2022..Y → test Y+1; OOS 2023–2026; the requested 2017 start is impossible because no intraday data before 2022 exists). Meta-switch M20: trade only if the strategy's last 20 completed trades summed above 0. BH over the declared family of 32 tests. A regime edge counts only if q<0.10, the OOS filtered mean beats always-on, and it beats ≥90% of random same-size subsets.

Overfitting disclosure. 8 labels × 23 buckets × 8 strategies × 2 datasets, 713 bucket cells (all shown in regime_buckets.csv). With this many cuts, plenty of buckets look great in hindsight. In the heatmaps below, many cells are green on train and a largely different set is green in 2026. That is why only out-of-sample results count.

2a. The 32 out-of-sample regime tests

test cand rule train_n train_mean oos_n oos_mean always_mean p q_bh pctile_vs_random_subsets pctile_vs_random_entries_same_regime edge_counts?
opt_regime P1 no filter found on train – – 0 – -3.22 1.00 1.00 – – False
opt_regime P2 L5_NR7 in ['NR7'] 42.00 2.11 29 28.34 -0.04 0.03 0.34 99.30 99.70 False
opt_regime P3 L5_NR7 in ['NR7'] 23.00 7.93 15 22.98 0.89 0.10 0.39 98.45 96.85 False
opt_regime P4 L5_NR7 in ['NR7'] 25.00 1.90 18 23.69 4.78 0.05 0.34 97.95 90.75 False
opt_regime P5 L3_ER20 in ['mid0.2-0.4'] 47.00 6.46 33 11.86 4.43 0.13 0.43 81.85 85.40 False
opt_regime P6 L4_PDR in ['compressed<0.8'] 75.00 0.98 50 -3.16 0.84 0.69 0.87 24.05 27.05 False
opt_regime P7 L4_PDR in ['compressed<0.8'] 82.00 3.11 55 -7.99 0.53 0.93 1.00 5.55 9.05 False
opt_regime P8 no filter found on train – – 0 – -3.15 1.00 1.00 – – False
spot_walkforward P1 walk-forward (see wf table) – – 428 1.47 -0.97 0.36 0.86 77.55 – False
spot_walkforward P2 walk-forward (see wf table) – – 298 0.65 -0.00 0.45 0.86 58.00 – False
spot_walkforward P3 walk-forward (see wf table) – – 277 5.49 4.51 0.09 0.39 67.05 – False
spot_walkforward P4 walk-forward (see wf table) – – 28 33.02 2.90 0.01 0.30 98.40 – False
spot_walkforward P5 walk-forward (see wf table) – – 33 30.25 7.72 0.05 0.34 93.80 – False
spot_walkforward P6 walk-forward (see wf table) – – 112 15.25 3.22 0.04 0.34 97.70 – False
spot_walkforward P7 walk-forward (see wf table) – – 142 -4.08 -2.84 0.75 0.87 41.30 – False
spot_walkforward P8 walk-forward (see wf table) – – 88 -3.60 -7.03 0.64 0.86 67.25 – False
opt_M20 P1 M20 – – 50 -0.28 -3.22 0.51 0.86 66.25 – False
spot_M20 P1 M20 – – 366 -1.38 -0.97 0.62 0.86 44.15 – False
opt_M20 P2 M20 – – 74 -5.62 -0.04 0.76 0.87 16.35 – False
spot_M20 P2 M20 – – 418 -7.34 -0.00 0.95 1.00 1.20 – False
opt_M20 P3 M20 – – 25 0.52 0.89 0.47 0.86 49.25 – False
spot_M20 P3 M20 – – 221 0.90 4.51 0.42 0.86 11.00 – False
opt_M20 P4 M20 – – 28 -0.64 4.78 0.54 0.86 19.00 – False
spot_M20 P4 M20 – – 41 15.32 5.06 0.08 0.39 81.60 – False
opt_M20 P5 M20 – – 81 -1.62 4.43 0.64 0.86 4.00 – False
spot_M20 P5 M20 – – 166 6.49 6.75 0.15 0.43 47.40 – False
opt_M20 P6 M20 – – 68 -4.60 0.84 0.74 0.87 11.10 – False
spot_M20 P6 M20 – – 196 0.88 4.70 0.44 0.86 15.65 – False
opt_M20 P7 M20 – – 84 -0.99 0.53 0.57 0.86 34.45 – False
spot_M20 P7 M20 – – 316 -1.26 -2.84 0.65 0.86 74.50 – False
opt_M20 P8 M20 – – 8 26.39 -3.15 0.20 0.55 91.00 – False
spot_M20 P8 M20 – – 58 17.86 -7.03 0.12 0.41 99.35 – False

2b. Spot walk-forward: what was chosen each year and what happened next year

cand test_year rule train_n train_mean oos_n oos_mean always_mean
P1 2023 L7_Expiry in ['day_before', 'expiry_day'] 102 13.01 93 -1.87 -6.55
P1 2024 L7_Expiry in ['day_before', 'expiry_day'] 195 5.91 99 4.94 6.95
P1 2025 L4_PDR in ['compressed<0.8', 'normal'] 503 4.78 174 -2.05 -5.03
P1 2026 L4_PDR in ['compressed<0.8'] 344 6.21 62 10.80 0.96
P2 2023 L7_Expiry in ['expiry_day'] 50 24.91 51 -5.92 -5.44
P2 2024 L7_Expiry in ['day_before', 'expiry_day'] 199 5.80 101 6.24 1.74
P2 2025 L7_Expiry in ['day_before', 'expiry_day'] 300 5.95 105 -5.70 -1.93
P2 2026 L7_Expiry in ['expiry_day'] 204 6.45 41 11.34 7.00
P3 2023 L8_FII_long in ['25-45%', '<25%'] 36 1.15 48 3.36 -0.09
P3 2024 L4_PDR in ['compressed<0.8'] 60 4.53 52 10.21 8.17
P3 2025 L8_FII_long in ['25-45%', '<25%'] 145 9.96 103 2.37 3.20
P3 2026 L8_FII_long in ['25-45%', '<25%'] 248 6.80 74 7.90 7.90
P4 2025 none (trade nothing) 9 – 0 – -11.09
P4 2026 L4_PDR in ['compressed<0.8'] 53 2.29 28 33.02 22.09
P5 2025 none (trade nothing) 25 – 0 – -0.20
P5 2026 L3_ER20 in ['mid0.2-0.4'] 49 14.59 33 30.25 16.86
P6 2025 none (trade nothing) 30 – 0 – -1.61
P6 2026 L2_DMA_trend in ['down', 'mixed'] 117 9.53 112 15.25 9.02
P7 2023 L5_NR7 in ['NR7'] 36 3.54 33 -6.47 -0.91
P7 2024 L1_VIX in ['13-16'] 72 5.08 109 -3.36 -9.22
P7 2025 none (trade nothing) 558 – 0 – -3.98
P7 2026 none (trade nothing) 746 – 0 – 3.09
P8 2023 L4_PDR in ['compressed<0.8', 'normal'] 55 10.02 29 -17.44 -16.67
P8 2024 L7_Expiry in ['day_before', 'expiry_day'] 51 26.00 25 22.65 16.85
P8 2025 L7_Expiry in ['day_before', 'expiry_day'] 76 24.90 18 -44.60 -36.18
P8 2026 L7_Expiry in ['day_before', 'expiry_day'] 94 11.59 16 26.57 -2.26

The chosen label changes almost every year for P1, P2, P3, P7 and P8. A regime that has to be re-picked every year is not a stable property of the strategy.

2c. Recent-performance switch vs always-on (OOS mean net pts per trade)

data cand 8w M20 M40 always_mean
options_2026 P1 6.63 -0.28 2.90 -3.22
options_2026 P2 -2.85 -5.62 -6.78 -0.04
options_2026 P3 0.98 0.52 -12.10 0.89
options_2026 P4 18.92 -0.64 -4.93 4.78
options_2026 P5 -2.56 -1.62 -1.16 4.43
options_2026 P6 1.71 -4.60 -1.80 0.84
options_2026 P7 -3.21 -0.99 -0.72 0.53
options_2026 P8 -2.01 26.39 – -3.15
spot_2023_26 P1 0.90 -1.38 0.16 -0.97
spot_2023_26 P2 -5.45 -7.34 -6.39 -0.00
spot_2023_26 P3 4.34 0.90 -0.85 4.51
spot_2023_26 P4 2.24 15.32 13.37 5.06
spot_2023_26 P5 3.89 6.49 13.51 6.75
spot_2023_26 P6 4.39 0.88 0.27 4.70
spot_2023_26 P7 -0.65 -1.26 -3.98 -2.84
spot_2023_26 P8 9.41 17.86 5.11 -7.03

M20 / M40 = last 20 / 40 trades net positive. 8w = last 8 weeks net positive. Only M20 is in the family; M40 and 8w are secondary. Turning a strategy off after losses mostly misses the rebounds: these strategies mean-revert in performance rather than trend.

2d. Lead: NR7 prior day for the breakout strategies (P1–P3 pooled; post-hoc check, not in the family)

year size_NR7 size_no mean_NR7 mean_no
2022 91 460 13.35 -0.52
2023 90 474 -2.02 -5.46
2024 106 465 -10.57 8.52
2025 82 497 8.36 -4.01
2026 72 374 49.86 -4.01
year size_NR7 size_no mean_NR7 mean_no
2024 23 86 2.76 -14.51
2025 82 495 1.47 -5.95
2026 72 372 22.80 -5.83

Spot net pts per trade by year. NR7 beat non-NR7 days in 2022, 2023, 2025 and 2026, and lost in 2024. The 2026 gap (+50 vs −4) is far larger than in any earlier year, so expect it to shrink. To watch going forward: log every NR7-day ORB/PDH breakout from 27-Oct-2026 and re-check after about 40 trades.

2e. Mean net pts by regime bucket (options; top = train, bottom = 2026)

Spot (top = 2022–25, bottom = 2026)

Full options bucket table
label bucket P1_test P1_train P2_test P2_train P3_test P3_train P4_test P4_train P5_test P5_train P6_test P6_train P7_test P7_train P8_test P8_train
L1_VIX 13-16 -9.1 -14.6 -6.9 -7.4 0.2 -4.6 12.1 -7.0 4.0 -7.7 -4.2 -5.4 0.5 -1.0 -12.8 -20.8
L1_VIX <13 3.1 -3.1 5.0 -3.6 1.7 -2.6 0.8 -8.7 6.2 -0.9 0.5 -3.1 -5.6 -4.5 24.3 -14.9
L1_VIX >16 -5.3 -10.3 0.2 0.0 -2.2 2.2 2.0 -19.3 -0.3 -13.9 4.4 -6.2 8.8 -4.0 -7.9 -26.2
L2_DMA_trend down 3.5 -14.9 3.2 -6.4 9.8 -7.0 19.3 -18.2 8.6 -4.8 6.1 -1.5 1.2 -5.4 -4.5 -19.1
L2_DMA_trend mixed -10.8 -0.8 -3.3 -3.2 -8.1 2.3 -0.8 4.4 2.8 -12.7 -0.8 -4.4 10.0 -3.1 6.5 -2.5
L2_DMA_trend up -9.6 -6.1 -3.5 -4.3 -9.0 -1.6 -3.2 -10.1 -2.2 -3.5 -7.4 -6.6 -8.6 -1.1 -9.5 -31.4
L3_ER20 mid0.2-0.4 -0.6 -2.5 2.9 0.8 2.9 -7.9 12.7 -10.9 11.9 6.5 5.5 -0.8 5.3 0.0 1.8 -35.4
L3_ER20 range<0.2 -4.9 -9.5 0.8 -7.5 -1.1 0.1 8.5 -9.8 2.7 -9.9 -0.2 -4.8 0.0 -2.8 -13.8 -9.9
L3_ER20 trend>0.4 -2.2 -17.4 -6.0 -6.8 5.5 -3.9 -19.3 -9.1 -0.5 -12.6 -2.6 -11.5 -3.6 -13.6 2.9 -23.1
L4_PDR compressed<0.8 1.7 -3.6 9.3 -0.6 -4.5 2.0 9.1 -2.9 0.1 0.4 -3.2 1.0 -8.0 3.1 1.1 -14.1
L4_PDR expanded>1.2 -8.0 -13.9 -7.9 -9.3 -2.9 -13.7 -31.0 -44.6 10.6 -11.6 8.4 -13.9 4.2 -7.8 16.4 -21.2
L4_PDR normal -3.9 -8.4 -2.1 -5.7 9.7 -4.0 10.2 -21.4 1.7 -6.3 -3.7 -1.8 5.7 -5.9 -27.1 -22.6
L5_NR7 NR7 17.0 -2.2 28.3 2.1 23.0 7.9 23.7 1.9 14.5 -4.7 -8.3 -3.2 -16.2 -9.4 26.5 -11.2
L5_NR7 no -6.9 -9.3 -5.2 -6.0 -4.7 -5.3 -5.5 -15.9 2.8 -5.7 2.3 -4.6 3.9 -1.8 -7.5 -21.8
L6_Gap flat<0.25% 0.1 -5.7 2.8 -2.0 1.3 -0.3 11.4 -5.2 7.2 -1.9 1.2 0.6 -4.2 -2.6 – 67.3
L6_Gap large>0.75% -12.0 -4.9 -15.0 -2.6 – – -1.4 -24.4 20.5 -20.6 10.9 -18.3 11.5 -6.0 -6.2 -25.1
L6_Gap medium -4.5 -13.4 1.7 -10.4 -0.1 -13.8 -8.6 -15.6 -4.6 -9.3 -4.0 -10.6 0.9 -3.2 -2.2 -21.0
L7_Expiry day_before -2.3 -7.5 1.6 -6.6 10.6 2.0 5.7 -12.6 7.9 -6.1 13.3 -4.4 2.3 1.8 28.8 -22.6
L7_Expiry expiry_day -0.7 -7.6 2.0 -4.8 0.5 -12.7 8.5 -15.3 6.1 -2.7 -3.3 -2.7 -7.5 -6.2 1.6 -27.1
L7_Expiry other -4.5 -8.8 -1.4 -4.2 -2.5 -0.3 3.0 -7.8 2.6 -6.5 -2.4 -5.1 2.6 -3.5 -15.9 -16.3
L8_FII_long 25-45% 31.9 -12.5 5.5 -10.9 15.1 -5.7 31.9 -7.0 -39.6 -10.7 -28.7 -10.1 -23.8 -3.8 – -30.1
L8_FII_long <25% -3.4 -7.8 -0.1 -4.5 0.7 -2.7 4.2 -10.0 4.8 -4.5 1.0 -3.3 0.7 -2.6 -3.2 -16.5
L8_FII_long >45% – 18.8 – 43.9 – 31.9 – -35.6 – 0.7 – 8.2 – -8.7 – -39.5

3. By period

Month heatmaps (net pts per trade)

Options by year

cand 2024 2025 2026
P1 -16.4 -6.8 -3.2
P2 -8.0 -4.2 -0.0
P3 -6.1 -2.2 0.9
P4 -10.4 -10.1 4.8
P5 -10.8 -5.0 4.4
P6 0.1 -4.9 0.8
P7 2.9 -4.1 0.5
P8 -13.3 -21.0 -3.2

Options by half-year

cand 2024H2 2025H1 2025H2 2026H1 2026H2
P1 -16.4 -10.3 -3.2 -5.2 -0.0
P2 -8.0 -3.6 -4.9 -0.5 0.6
P3 -6.1 -0.2 -4.0 -1.0 3.5
P4 -10.4 -11.7 -8.7 16.6 -5.0
P5 -10.8 -9.6 -0.3 6.3 1.0
P6 0.1 -7.3 -2.6 1.9 -0.8
P7 2.9 -4.6 -3.8 1.9 -1.4
P8 -13.3 -26.7 -10.2 -15.4 18.7

Options by quarter

cand 2024Q4 2025Q1 2025Q2 2025Q3 2025Q4 2026Q1 2026Q2 2026Q3 2026Q4
P1 -16.4 -11.5 -8.8 -3.8 -2.7 5.1 -15.2 -6.0 26.0
P2 -8.0 -3.7 -3.5 -3.0 -6.8 4.4 -5.4 -6.2 29.8
P3 -6.1 -3.0 4.6 -3.7 -4.2 7.0 -10.2 -6.8 38.9
P4 -10.4 -17.5 -5.8 -4.6 -13.8 29.8 -7.9 -12.0 53.3
P5 -10.8 -16.2 -3.6 0.0 -0.7 5.8 6.7 -2.0 17.0
P6 0.1 -12.5 -2.7 0.3 -6.2 5.0 -0.8 -3.7 14.9
P7 2.9 1.3 -10.7 -5.4 -2.2 -9.6 12.7 -2.2 1.7
P8 -13.3 -22.6 -37.0 -3.5 -21.0 -37.1 -5.2 22.9 13.2

Spot by year

cand 2022 2023 2024 2025 2026
P1 3.6 -6.6 7.0 -5.0 1.0
P2 2.5 -5.4 1.7 -1.9 7.0
P3 -6.8 -0.1 8.2 3.2 7.9
P4 – – 34.2 -11.1 22.1
P5 – – -4.0 -0.2 16.9
P6 – – 21.4 -1.6 9.0
P7 -6.4 -0.9 -9.2 -4.0 3.1
P8 -4.0 -16.7 16.8 -36.2 -2.3

Spot by half-year

cand 2022H1 2022H2 2023H1 2023H2 2024H1 2024H2 2025H1 2025H2 2026H1 2026H2
P1 -1.3 8.5 -2.6 -10.7 21.6 -6.6 -11.6 1.5 -3.1 7.4
P2 -2.2 7.0 -2.5 -8.5 8.6 -5.0 -2.2 -1.7 5.9 8.7
P3 -2.6 -12.4 0.2 -0.4 23.8 -5.4 8.7 -1.6 2.0 16.1
P4 – – – – – 34.2 -11.4 -10.8 40.9 6.6
P5 – – – – – -4.0 -10.7 10.5 20.0 11.1
P6 – – – – – 21.4 -6.2 2.8 9.8 7.8
P7 -9.9 -2.7 -2.8 1.1 -18.1 -0.5 -5.9 -2.4 4.7 0.9
P8 -5.0 -2.8 -18.0 -15.2 49.2 -22.8 -44.4 -19.8 -18.5 26.7

Spot by quarter

cand 2022Q1 2022Q2 2022Q3 2022Q4 2023Q1 2023Q2 2023Q3 2023Q4 2024Q1 2024Q2 2024Q3 2024Q4 2025Q1 2025Q2 2025Q3 2025Q4 2026Q1 2026Q2 2026Q3 2026Q4
P1 -3.8 1.0 4.0 13.2 -0.6 -4.9 -12.3 -8.8 29.2 13.3 3.1 -17.0 -8.2 -15.4 1.0 1.9 10.5 -16.2 -3.5 55.1
P2 -4.9 0.4 7.0 7.0 -0.7 -4.4 -12.2 -4.2 21.1 -4.2 -3.0 -7.2 0.1 -4.4 -0.5 -3.0 7.8 4.0 -2.2 56.4
P3 -10.3 8.3 -9.0 -17.2 -3.1 3.8 -15.8 20.6 20.7 27.2 -14.1 1.0 5.9 13.5 -4.3 0.9 12.2 -9.7 -4.3 85.9
P4 – – – – – – – – – – – 34.2 -13.8 -9.0 -5.9 -16.9 58.4 8.0 -6.9 119.4
P5 – – – – – – – – – – 26.8 -5.3 -11.4 -10.1 10.3 10.7 16.4 23.2 5.3 43.4
P6 – – – – – – – – – – 21.8 21.4 -5.9 -6.5 4.9 0.2 12.7 7.2 2.6 36.8
P7 -6.1 -13.4 -8.7 4.1 0.7 -6.2 3.5 -0.9 -20.1 -16.1 3.4 -4.0 5.7 -18.3 -5.1 0.3 -16.2 24.3 -0.5 6.4
P8 -17.5 7.6 -12.6 9.7 -17.3 -19.3 -14.3 -16.4 84.8 23.0 -22.5 -23.1 -35.5 -68.3 -9.5 -36.4 -60.2 1.2 26.7 26.6

Monthly CSVs: options · spot.

Secondary exit (structural stop, hold to 15:14), options net pts

cand test train
P1 -4.36 -8.65
P2 -0.68 -5.29
P3 1.07 -6.21
P4 4.18 -10.56
P5 3.80 -6.35
P6 0.88 -6.77
P7 -0.32 -3.55
P8 -6.28 -20.20

Combinations: does agreement between strategies raise the probability?

Added after Satya's 21:13 IST question: “what about combination of strategies there probability increases right”. Pre-registered at 21:14 IST in PREREG.md before any combo result. Same data, costs, exit, random benchmark and train/test split. A combo trade is the trade of the confirming (later) signal, one per day. Honesty flag: the NR7 combos (N*) reuse a filter whose 2026 result was already seen, so they are not clean out-of-sample.

C1. Are the 8 independent? No.

Common window 21-Oct-2024 to 23-Oct-2026 (496 days). Signal days: P1 463, P2 474, P3 204, P4 128, P5 294, P6 355, P7 387, P8 86. Cell = % of days the row strategy fired on which the column strategy fired in the same direction.

if ↓ fires P1 P2 P3 P4 P5 P6 P7 P8
P1 100 89 36 21 27 34 21 17
P2 87 100 34 21 24 33 24 16
P3 82 78 100 29 21 24 8 5
P4 75 77 46 100 15 21 16 2
P5 43 39 14 6 100 84 54 19
P6 45 44 14 8 70 100 50 17
P7 25 29 4 5 41 46 100 12
P8 90 86 13 3 64 72 56 100

ORB15 and ORB5 fire the same way on 87–89% of each other's days. When P3 (PDH/PDL) or P4 (CPR) fires, ORB15/ORB5 fire the same way on 75–82% of those days. The indicator group (P5 Supertrend, P6 EMA) agrees 70–84%. P8 (gap fade) is the ORB15 trade 90% of the time. When two of them “agree”, it is usually the same price move counted twice, not two independent confirmations. Option P&L on same-direction co-fire days is also highly correlated (P1–P2 0.91; P1–P8 1.00):

P&L correlation, opposite-direction rate, direction correlation, Jaccard

Correlation of option net P&L on same-direction co-fire days

if ↓ fires P1 P2 P3 P4 P5 P6 P7 P8
P1 – 0.91 0.52 0.86 0.43 0.73 0.66 1.00
P2 0.91 – 0.58 0.79 0.65 0.72 0.71 0.94
P3 0.52 0.58 – 0.72 0.28 0.40 0.57 0.22
P4 0.86 0.79 0.72 – 0.14 0.42 -0.10 –
P5 0.43 0.65 0.28 0.14 – 0.76 0.60 0.65
P6 0.73 0.72 0.40 0.42 0.76 – 0.57 0.72
P7 0.66 0.71 0.57 -0.10 0.60 0.57 – 0.84
P8 1.00 0.94 0.22 – 0.65 0.72 0.84 –

% of days with an opposite-direction signal

if ↓ fires P1 P2 P3 P4 P5 P6 P7 P8
P1 0 9 7 5 32 36 57 2
P2 9 0 9 5 35 38 54 3
P3 16 20 0 5 35 41 76 3
P4 18 20 8 0 45 52 66 9
P5 51 56 24 20 0 10 21 2
P6 48 51 23 19 8 0 23 3
P7 68 66 40 22 16 21 0 3
P8 10 14 8 14 8 14 15 0

Direction correlation on days both fire

if ↓ fires P1 P2 P3 P4 P5 P6 P7 P8
P1 1.00 0.81 0.68 0.61 -0.09 -0.03 -0.46 0.79
P2 0.81 1.00 0.59 0.59 -0.17 -0.08 -0.39 0.71
P3 0.68 0.59 1.00 0.70 -0.28 -0.26 -0.80 0.12
P4 0.61 0.59 0.70 1.00 -0.54 -0.42 -0.62 -0.66
P5 -0.09 -0.17 -0.28 -0.54 1.00 0.80 0.44 0.78
P6 -0.03 -0.08 -0.26 -0.42 0.80 1.00 0.36 0.69
P7 -0.46 -0.39 -0.80 -0.62 0.44 0.36 1.00 0.62
P8 0.79 0.71 0.12 -0.66 0.78 0.69 0.62 1.00

Jaccard same-direction overlap %

if ↓ fires P1 P2 P3 P4 P5 P6 P7 P8
P1 100 86 36 20 26 32 20 17
P2 86 100 34 20 24 32 23 16
P3 36 34 100 22 11 11 4 4
P4 20 20 22 100 6 7 5 2
P5 26 24 11 6 100 66 34 17
P6 32 32 11 7 66 100 37 17
P7 20 23 4 5 34 37 100 12
P8 17 16 4 2 17 17 12 100

C2. The 11 pre-declared combos (option net pts per trade, REAL costs, trail-50% exit)

ComboTrain n / mean / win2026 n / mean / win2026 mean of its single strategies2026 random mean (pctile)pBH q (11)Jan–Sep 2026Oct 20262026 without best 3 tradesCounts?
K2_15 ≥2 strategies, same direction, within 15 min262 / -6.6 / 35%183 / -1.3 / 33%+0.4-3.5 (70)0.6210.69-3.7+29.7-5.0no
K3_30 ≥3 strategies, same direction, within 30 min160 / -11.0 / 31%111 / +1.3 / 36%+0.4-2.4 (79)0.4010.63-2.9+48.5-3.3no
K2_D ≥2 strategies, same direction, same day287 / -5.6 / 36%196 / -2.1 / 32%+0.4-4.2 (74)0.6940.69-4.3+24.6-5.5no
N2 NR7 day + P2 (contaminated)42 / +2.1 / 48%29 / +28.3 / 55%-0.0-5.1 (100)0.0250.13+23.8+155.7+9.7no
N3 NR7 day + P3 (contaminated)23 / +7.9 / 43%15 / +23.0 / 53%+0.9-0.9 (97)0.0970.21+13.5+155.7-4.6no
N4 NR7 day + P4 (contaminated)25 / +1.9 / 28%18 / +23.7 / 61%+4.8-5.1 (99)0.0470.13+16.3+149.4+2.2no
N234 NR7 day + ≥2 of P2/P3/P4 (contaminated)29 / +4.6 / 38%21 / +8.7 / 38%+1.0-1.9 (86)0.2580.47+1.4+155.7-12.1no
PAIR_BEST Best pair on train = P3+P434 / +0.7 / 38%25 / +19.8 / 56%+2.5-0.8 (96)0.0490.13+14.6+79.8+2.8no
PAIR_P1P5 ORB15 + Supertrend72 / -12.1 / 31%53 / +0.3 / 43%-0.1-3.5 (72)0.4820.66+0.4-2.9-7.3no
PAIR_P2P5 ORB5 + Supertrend66 / -8.3 / 36%50 / -3.0 / 40%+1.8-3.1 (52)0.6730.69-3.7+32.3-11.3no
PAIR_P3P4 PDH/PDL + narrow CPR34 / +0.7 / 38%25 / +19.8 / 56%+2.5-0.8 (96)0.0490.13+14.6+79.8+2.8no

“Counts” needs q<0.10, a 2026 mean above its single strategies' 2026 mean, and ≥90th percentile vs random. PAIR_BEST turned out to be P3+P4, so it is the same test as PAIR_P3P4. BH over the 10 distinct tests gives the same answer (min q 0.16). Train pair ranking: all 28 pairs. Only P3+P4 was above 0 on train (+0.7, n=34). Every other pair lost.

Reading it. Requiring 2 or 3 strategies to agree lowered train expectancy compared with the single strategies (K3_30 −11.0 vs −5.9). By the time 3 signals agree, much of the move is already used up and the stop is wider. In 2026 the k-of-n combos were negative for Jan–Sep and positive only in October. P3+P4 (PDH/PDL breakout on a narrow-CPR day) is the only clean combo with a positive train and 2026 (+0.7 → +19.8, Jan–Sep 2026 +14.6, n=23). But it has 25 trades, q=0.13, a median train trade of −13, and depends on a few big days. It goes on the forward-watch list next to NR7.

C3. By quarter (options)

combo 2024Q4 2025Q1 2025Q2 2025Q3 2025Q4 2026Q1 2026Q2 2026Q3 2026Q4
K2_15 -12.5 -10.1 -7.7 -0.6 -3.5 8.1 -14.4 -4.5 29.7
K2_D -12.2 -7.0 -5.8 -1.7 -2.9 5.6 -13.0 -5.3 24.6
K3_30 -22.9 -11.0 -15.0 2.1 -13.3 1.5 -11.1 1.8 48.5
N2 0.7 10.2 -1.0 1.6 -1.2 60.3 2.8 17.0 155.7
N234 30.4 -7.7 34.4 -24.6 -7.9 19.0 -25.0 4.3 155.7
N3 22.1 -17.1 35.6 8.6 -21.6 39.1 -13.6 2.1 155.7
N4 59.5 -11.4 35.8 -26.5 -9.2 34.4 2.8 4.1 149.4
PAIR_BEST -7.8 -19.2 8.5 12.8 -5.0 49.1 2.0 -11.5 79.8
PAIR_P1P5 -23.2 -13.1 -28.6 1.8 -4.6 1.2 -7.9 10.7 -2.9
PAIR_P2P5 -19.3 -10.5 -26.5 9.8 -4.3 -11.3 -11.2 9.3 32.3
PAIR_P3P4 -7.8 -19.2 8.5 12.8 -5.0 49.1 2.0 -11.5 79.8

C4. Spot-level check 2022–2026 (spot net pts, 1 pt cost)

combo 2022 2023 2024 2025 2026
K2_15 -0.2 -6.2 7.3 -4.1 4.0
K2_D 4.2 -5.8 5.1 -1.5 2.0
K3_30 -2.4 -13.2 5.8 -10.2 9.6
N2 14.7 -1.7 -18.0 10.5 62.7
N234 -29.2 9.6 11.6 0.4 22.4
N3 -12.6 5.5 20.2 8.2 46.2
N4 – – 96.8 -7.2 58.8
PAIR_BEST – – 27.6 11.2 48.0
PAIR_P1P5 – – -12.7 -9.8 12.9
PAIR_P2P5 – – -10.8 -3.6 7.0
PAIR_P3P4 – – 27.6 11.2 48.0

On spot, k-of-n agreement flips sign from year to year (K2_15: −0.2, −6.2, +7.3, −4.1, +4.0). P3+P4 needs VWAP for P4, so it only starts Oct-2024.

Premium support (“black box” / premium reversal): buy the option when its own premium bounces off support

Added after Satya's 21:24 IST question: “what about option premium support strategy”. Pre-registered at 21:26 IST in PREREG.md before any result. Real 1m ATM weekly option bars 21-Oct-2024 to 23-Oct-2026. The chart is the current ATM strike's own 5m premium chart. Costs ≈0.5 pt per side plus statutory charges (STT 0.15% of sell premium from 1-Apr-2026). Train Oct-2024–Dec-2025, test 2026. Random benchmark = same minute, same CE/PE, ATM on random days of the same split, same exit.

PS1. What the earlier (early-Oct 2026) work found

Study (nifty-setups-backtest)What it wasOut-of-sample result
atm-daily-srPrior-day ATM CE/PE premiums mapped to spot S/R rails (half-scale), bounce/retest entries; index book SL20, 40%@+20, 30%@+40, trail rest275 trades, −10.3 pts per trade net (−0.3 gross); old futures-style costs ~10 pts per trade
atm-daily-sr-optbuyerSame levels, booked as option buyer (SL10, 40%@+10, 30%@+20, trail)476 trades, −1.5 option pts per trade net, −0.5 gross, 47% win
confluence-v1Retailer trap + AMD fake-break + ATM premium black-box support bounce, all same direction20 trades, +7.2 gross but −4.2 net (cost ~11 pts per trade), p=0.48
confluence-v1-scaleoutSame entry, SL20 / 40%@+20 / 30%@+40 / trail exit30 trades, −0.4 gross, −12.2 net
trader-filters-r126Black box or round-50 + rejection wick (R1), plus R2/R6 filters, option buyerAll 8 parameter sets net negative (≈ −1.5 to −2 pts per trade, n≈1,000–2,000)
trader log (hand-logged stream calls)11 “Black Box” trades May–Jul 202610 of 11 marked WIN. These are discretionary, hand-logged calls with no fixed rule and no losers' log, so they cannot be reproduced or tested.

The confluence idea was the only one with a positive gross result, and that was on 20 trades. Under corrected costs (~2 pts per round trip instead of ~11), +7.2 gross would still be only about +5 net on n=20, which is not testable evidence.

PS2. The 4 pre-registered variants (option net pts per trade, corrected costs)

VariantExitTrain n / mean / win2026 n / mean / win2026 mean before charges2026 random mean (pctile)pBH q (8)Jan–Sep 2026Oct 20262026 without best 3Counts?
V1 Prior-day premium low bounceold: SL20, 40%@+20, 30%@+40, trail rest74 / -3.5 / 49%35 / -10.4 / 26%-9.2-3.4 (2)1.001.00-11.1-4.8 (n=4)-14.2no
V1 Prior-day premium low bouncestructural stop, trail 50% after 2R74 / -8.8 / 24%35 / -15.1 / 14%-14.1-0.4 (0)1.001.00-13.6-26.9 (n=4)-18.7no
V2 Intraday premium swing-low bounce ("black box")old: SL20, 40%@+20, 30%@+40, trail rest254 / -2.2 / 45%175 / -4.0 / 43%-2.7-2.8 (20)0.991.00-4.0-4.0 (n=13)-4.7no
V2 Intraday premium swing-low bounce ("black box")structural stop, trail 50% after 2R254 / -3.3 / 29%175 / -2.8 / 29%-1.8-0.9 (21)0.911.00-3.0-0.5 (n=13)-5.2no
V3 Round premium level (×25) bounceold: SL20, 40%@+20, 30%@+40, trail rest271 / -1.7 / 47%189 / -4.3 / 43%-3.0-3.2 (21)1.001.00-4.6-1.0 (n=15)-5.0no
V3 Round premium level (×25) bouncestructural stop, trail 50% after 2R271 / -2.8 / 30%189 / -7.0 / 24%-6.0-1.4 (1)1.001.00-8.3+7.4 (n=15)-9.6no
V4 Premium day-high breakout (resistance break)old: SL20, 40%@+20, 30%@+40, trail rest223 / -2.2 / 47%156 / -4.8 / 42%-3.5-3.4 (21)1.001.00-5.2-0.7 (n=15)-5.5no
V4 Premium day-high breakout (resistance break)structural stop, trail 50% after 2R223 / -3.8 / 31%156 / -1.8 / 28%-0.7-3.0 (71)0.731.00-1.0-8.6 (n=15)-5.3no

V1 level = prior-day low of the same contract. V2 = most recent confirmed 5m swing low after 09:30. V3 = multiple of 25 (premium 40–400). V1–V3 need a touch within max(2 pts, 3%) approached from above, then the next 5m close above the touch-bar high. V4 = 5m close above the premium's high of the day so far. Entry is at the next 1m option open. First event per day. “Counts” needs q<0.10, ≥90th percentile vs random, and still positive without the best 3 trades. Pre-charge means include the 0.5 pt per side slippage.

Reading it. Every variant and both exits lost money in both periods, and no BH q is below 1.00. Several are worse than random entries at the same minute (V1, and V3 with the trail exit, sit at the 0–2nd percentile). A premium bouncing off its support does not predict the next move any better than chance. The prior-day premium low is the worst level, probably because overnight theta decay pulls the premium down to it mechanically rather than real buyers defending it. Satya's old scale-out exit and the trail-50% exit give the same answer. October 2026 does not rescue it either (Oct 2026: V3 trail +7.4 on 15 trades; the others are negative).

PS3. Regime filters chosen on train, applied unchanged to 2026 (BH over 8)

var ex label buckets train_n train_mean test_n test_mean always_on_test random_same_bucket_mean subset_pctile t_p q_bh counts
V1 X_OLD none – 0 – 0 – -10.37 – – 1.00 1.00 no
V1 X_T50 none – 0 – 0 – -15.13 – – 1.00 1.00 no
V2 X_OLD L1_VIX >16 43 2.87 52 -8.97 -4.00 -3.33 1.55 1.00 1.00 no
V2 X_T50 L3_ER20 mid0.2-0.4 80 1.82 44 -6.92 -2.84 -1.18 14.15 0.97 1.00 no
V3 X_OLD L5_NR7 NR7 40 6.72 27 -7.19 -4.33 -4.40 20.55 0.97 1.00 no
V3 X_T50 L4_PDR normal 98 0.74 67 -4.81 -7.04 1.07 77.30 0.87 1.00 no
V4 X_OLD L2_DMA_trend up 94 1.23 41 -5.53 -4.75 -4.14 40.20 0.95 1.00 no
V4 X_T50 L2_DMA_trend mixed 46 0.01 33 -2.73 -1.76 -2.47 45.95 0.69 1.00 no

The train-chosen regime (VIX>16, NR7, uptrend, …) lost money in 2026 in all 6 cases where a filter qualified, and was worse than always-on in 5 of those 6 (V1 had no qualifying filter). 0 of 8 count.

PS4. By quarter (trail-50% exit)

var 2024Q4 2025Q1 2025Q2 2025Q3 2025Q4 2026Q1 2026Q2 2026Q3 2026Q4
V1 -24.3 -7.3 -12.1 -0.7 -2.3 -23.4 -15.6 -4.4 -26.9
V2 -6.2 2.7 -4.9 -3.5 -5.1 -4.2 -0.0 -4.6 -0.5
V3 -2.4 -6.2 -0.0 -6.5 1.3 -6.9 -10.3 -7.6 7.4
V4 -8.6 1.2 -7.1 -4.4 -1.5 3.5 -3.0 -3.3 -8.6

By quarter (old scale-out exit)

var 2024Q4 2025Q1 2025Q2 2025Q3 2025Q4 2026Q1 2026Q2 2026Q3 2026Q4
V1 -1.6 -1.9 -3.6 -6.3 -3.8 -17.3 -11.7 -5.9 -4.8
V2 -4.0 1.0 -1.5 -6.6 -0.4 -4.9 -7.3 -0.1 -4.0
V3 -4.9 -0.6 -1.3 -6.8 3.7 -1.7 -6.2 -5.8 -1.0
V4 -7.2 1.2 -3.5 -4.1 1.3 -5.7 -4.0 -5.8 -0.7

Monthly and regime-bucket tables: prem_by_period.csv · prem_regime_buckets.csv · trades prem_trades.csv.

Trader discretion: can the log's choices be turned into rules?

Added after Satya's 21:34 IST question: “why can't you find those discretion rules”. Design pre-registered at 21:37 IST in PREREG.md (TRADER-DISCRETION) before any taken/skipped or outcome number was seen. Real 1m Nifty ATM weekly option bars. Corrected costs (≈0.5 pt per side plus statutory charges, STT 0.15% of sell premium from 1-Apr-2026).

TD1. The data

The log is trader-log/trades_timestamped.csv: 225 rows, 06-May to 05-Oct-2026, built from stream screenshots and the fixed-date Excel files with entry premium and start/stop times. 218 rows are usable (one NO_TRADE row and rows with no time or strike removed): 110 Nifty and 108 Sensex. Sensex rows are mapped to the Nifty ATM equivalent at the same minute. Logged result: 169 WIN, 47 LOSS, 2 BE (78% wins).

How well the log matches real option bars (earlier fill-match work): only 22 of 218 (10%) match the real premium at the logged time (tiers A/B/B2/C: exact, within ±5 or ±15 minutes, or within 5% of the premium). 148 (68%) match only on strike and time, because the log has no usable premium. 47 (22%) disagree with the real bars (wrong premium, or the strike did not trade). When the earlier loose premium matcher was tried at shifted placebo times, it matched about as often as at the logged times (Nifty 29% vs 31% placebo). So the logged premiums do not reliably identify a real fill.

TD2. Entries by setup family, and what real bars say happened

family entries log_win_pct replay_win_pct xold_nifty_atm_pts covered_by_any_rule_pct covered_by_V_pct
BREAK 57 82 25 -1 33 21
CONT 41 56 40 1 29 17
SUPPORT 40 65 23 -1 35 25
PM3 24 88 45 1 8 8
SWEEP 17 88 18 -6 41 24
BLACKBOX 15 93 7 -6 33 33
OTHER 12 92 20 -2 25 8
BTST 9 100 12 -12 22 0
NEWS 3 100 33 6 67 33

Replay win = the earlier fill-match simulation with the logged stop and target on real 1m bars. X_OLD = Nifty ATM option bought at the next 1m open after the logged time, with the SL20 / 40%@+20 / 30%@+40 / trail exit. Covered = an entry of ours (V1–V4 premium-support or P1–P8) fired the same day, same direction, within ±10 minutes.

What this shows. On real bars the trader's calls are ordinary. The overall replay win rate is 27% versus 78% logged, and the Black Box calls go from 14 of 15 logged wins to 1 of 15 in the replay. Some of the gap is how the replay works: it uses the Nifty ATM and the next 1m open, while he may have used a different strike, a better fill or a manual exit. That gap can't be closed, because 68% of rows have no premium to check against. But a 78% → 27% drop is far too big to be explained by fills alone.

TD3. Which of our rule entries did he take?

Across the 53 days with log entries our rules made 662 candidate entries; 103 (15.6%) line up with one of his entries. Only 30% of his entries are matched by any rule of ours, and 19% by a premium-support rule. Placebo check: shift his entry times by ±30 or ±60 minutes and the match rate is 8.8–13.1%, or 11% if the direction is flipped. So his entries line up with our setups only slightly more often than chance. Most of what he does is not one of these setups.

src candidates taken take_rate_pct xold_mean xt50_mean
P1 47 8 17.0 -9.4 -10.4
P2 49 14 28.6 -5.5 -9.3
P3 14 5 35.7 -5.0 -12.5
P4 10 3 30.0 -8.1 -24.4
P5 41 7 17.1 -2.4 1.5
P6 48 7 14.6 -0.7 -4.3
P7 42 2 4.8 0.7 8.9
P8 15 4 26.7 0.4 9.4
V1 14 5 35.7 -0.4 -9.0
V2 124 21 16.9 -5.0 0.8
V3 170 18 10.6 -5.6 -4.4
V4 88 9 10.2 -5.9 -6.4

Outcome of candidates he took vs skipped (our exits, real bars)

taken n xold_mean xold_win_pct xt50_mean xt50_win_pct
skipped 559 -5.06 42 -3.05 28
taken 103 -2.12 46 -6.04 29

The taken candidates did no better than the skipped ones. They were better with the old exit (−2.1 vs −5.1) and worse with the trail-50% exit (−6.0 vs −3.0). Both groups lose money. Skipping those candidates did not avoid losers.

TD4. Taken vs skipped: entry-time features (effect size = standardised mean difference; Mann-Whitney p, BH over 17)

feature taken_mean skipped_mean smd mw_p n_taken n_skipped q_bh
tod 100.796 137.596 -0.407 0.000 103 559 0.001
oi_chg15 13.190 6.956 0.299 0.001 93 546 0.012
prior_trades 2.282 1.832 0.286 0.004 103 559 0.022
vix 15.373 14.907 0.185 0.082 103 559 0.348
basis_chg15 1.698 1.325 0.010 0.228 93 546 0.589
prem_chg5 8.092 7.828 0.034 0.257 103 559 0.589
dist_round50 12.275 13.162 -0.120 0.258 103 559 0.589
pcr_chg15 -0.005 -0.012 0.032 0.304 93 546 0.589
prem_dd 13.202 15.073 -0.137 0.312 103 559 0.589
dist_round100 26.583 25.282 0.092 0.397 103 559 0.675
basis 48.162 48.878 -0.016 0.469 103 559 0.725
spot_mv15 27.906 25.207 0.098 0.548 93 546 0.748
gap -0.104 -0.140 0.070 0.572 103 559 0.748
spot_pos 0.733 0.721 0.044 0.726 103 559 0.881
expiry_day 0.184 0.193 -0.022 0.837 103 559 0.903
prem_chg15 11.045 10.637 0.029 0.850 93 546 0.903
dte 4.699 4.628 0.034 0.919 103 559 0.919

Only three features differ after BH. Time of day: taken entries come ~37 minutes earlier on average (SMD −0.41). Prior trades that day: more trades already that day (+0.29). ATM OI change over 15 minutes: OI rising faster (+0.30). Premium drawdown, speed of fall, bounce speed, distance from the day high/low and from round levels, gap, basis, PCR change and expiry day show no difference (|SMD| ≤ 0.14). “Prior trades” is a property of his day, not of the market, so it cannot become a rule.

TD5. Models with leave-one-day-out CV (fit May–Jul 2026, holdout Aug–Oct 2026)

ModelLeave-one-day-out AUC (May–Jul)Holdout AUC (Aug–Oct)
Depth-2 tree (min leaf 10)0.490.46
L2 logistic, 17 features0.610.55

An AUC of 0.5 means the model does no better than a coin flip at telling taken from skipped. The logistic's 0.61 in CV comes almost entirely from time of day and prior trades (coefficients −1.2 and +0.8). It drops to 0.55 on the held-out months. This repeats the early-Oct remine (trader-filter-mine-timed), where the holdout AUC was ≈0.5 and the best broad rule (near the day extreme and a calm 3-minute move) had lift 1.24 with a CI of 0.84–1.61.

TD6. The pre-registered filter and its tests

Extraction rule (fixed in advance): take the tree leaf with the highest take rate among leaves with ≥10 takes, provided it is at least 1.2× the base rate. Result: tod <= 36.50 AND basis_chg15 > -8.25. tod is minutes after 09:15, so 36.5 means before about 09:52 IST. On May–Jul this leaf took 34 of 65 candidates (52%) against a base rate of 16%.

Held-out log months (Aug–Oct 2026): the filter fired 17 times and he took 1. Lift 0.41 (base 14%), day-block bootstrap 90% CI 0.00–1.35. Failed: the CI needed to be above 1.

As a strategy on 2024–26 history (May–Jul 2026 excluded; first filtered candidate per day; random = same candidate minute and type on random days, 30 repeats; BH over 4):

period exit n mean win total p rand_mean rand_pctile drop_top3 q_bh counted
Oct24-Dec25 xold 229 -2.91 46.29 -665.79 0.98 -2.53 53.33 -3.42 0.98 False
Oct24-Dec25 xt50 229 -3.76 32.75 -861.98 0.91 -3.72 56.67 -6.32 0.98 False
2026 (Jan-Apr+Aug-Oct) xold 104 -2.30 48.08 -238.74 0.87 -2.26 46.67 -3.42 0.98 False
2026 (Jan-Apr+Aug-Oct) xt50 104 4.54 36.54 472.48 0.21 -4.07 96.67 -1.58 0.82 False

0 of 4 count. Three of the four are negative and no better than random. The 2026 trail-50% row is +4.5 per trade at the 97th percentile vs random, but q=0.82 and −1.6 without its best 3 trades, the same October-heavy pattern as the rest of this page.

TD7. Why the discretion rules can't be found (bias and small-n disclosure)

Files: disc_trader_entries.csv · disc_candidates.csv · disc_feature_contrast.csv · disc_model.json · disc_filter_fullhist.csv. Scripts: s9_discretion.py, s9b_fullhist.py, s10_disc_model.py (sklearn), s11_disc_fullhist.py.

YouTube live calls: a verifiable, pre-outcome log tested on real bars

Added after Satya's 23:15 IST (26-Oct) request. Source: the trader's public live streams at youtube.com/@KarolSEBIRegisteredIITian/streams. We read stream metadata and Hindi auto-captions with yt-dlp, with no login, cookies or credentials. 360p two-second clips were used only to read the strike label on screen, then deleted. No video is embedded or redistributed; the links below go to the original streams. Design pre-registered at 23:40 IST in PREREG.md (YOUTUBE-CALLS), before any call was scored. Research only, not advice.

Verdict. We pulled the calls straight from the stream, so the log is written at the moment of each call, before the outcome. On that log, 29 of 58 fresh calls in 31 sessions (25-Aug to 23-Oct-2026) could be scored on real 1m option bars. They made +3.1 net pts per trade (median -13.7, win 41%, p=0.31). That is percentile 91 against random entries at the same minute, and drops to -4.7 without the best 3 trades. By the pre-registered rule this does not count as an edge. Of the scored calls he said "target done" on 12; real bars hit the target on 6. His self-reported log does not line up with the streams. Of its 34 rows in this window, 1 matches a stream call within 10 minutes, and 5 rows (+620 pts) are on 25-Sep, a day with no stream. The taken-vs-skipped analysis found no filter that passes the pre-registered extraction rule, so nothing could be tested on 2024–26 history.

YT1. Inventory

105 past live streams, 2026-05-06T08:57 to 2026-10-23T09:03 IST (554 hours). All have Hindi auto-captions. Over the 118 trading days from 06-May to 23-Oct-2026: 74 days have full market-hours coverage, 24 partial (<80% of 09:15–15:30), and 20 have no stream (06-30, 07-06, 07-15, 07-17, 07-20, 07-21, 07-22, 07-23, 07-24, 08-13, 08-24, 09-02, 09-04, 09-18, 09-22, 09-24, 09-25, 09-28, 09-30, 10-12). Some may have been deleted or never streamed; we cannot tell which. Files: yt_stream_inventory.csv · yt_trading_day_coverage.csv.

YT2. Pilot (22-Oct, 21-Oct and 19-Oct streams) and feasibility

YT3. All 33 streams (25-Aug..23-Oct): what was extracted

289 caption-rule candidates → 110 dropped as promo/gold/crypto talk → 179 reviewed → 58 fresh calls. The other 121 were retrospective, commentary, vague, or conditional plans with no activation. Of the 58: 29 scored, 13 not scorable (Sensex after 05-Oct, no real bars), 9 strike unreadable, 7 side not stated. That is about 1.9 extractable calls per session, against the ~10 per day in his self-reported log.

Stream time (IST, links to the original stream at that second)ContractSL / target pts (*=fallback)Entry bar @ priceExitNet ptsHis stated outcomeSetup
2026-08-25 09:23NIFTY 24300 PE5.5 / 1009:24 @ 115.3T 09:25+8.5SLSCALP
2026-08-27 09:31SENSEX 77700 PE20* / 5009:32 @ 332.8SL 09:32-23.6TOTHER
2026-08-28 09:17SENSEX 77000 CE22 / 3009:18 @ 634.2SL 09:19-26.3TOTHER
2026-08-28 09:43SENSEX 77000 CE20* / 3009:44 @ 734.1SL 09:47-24.6SLOTHER
2026-09-03 12:03SENSEX 77100 PE20* / 5012:04 @ 437.7SL 12:05-23.9no_claimOTHER
2026-09-03 12:57SENSEX 76400 CE20* / 3712:58 @ 330.2SL 12:58-23.6TBREAK/TRENDLINE
2026-09-03 15:01SENSEX 76400 CE13.5 / 2015:02 @ 253.8SL 15:02-16.9no_claimOTHER
2026-09-07 11:13NIFTY 24100 PE2.5 / 1011:14 @ 303.5SL 11:14-4.4no_claimOTHER
2026-09-10 11:12SENSEX 74500 CE20* / 40*11:13 @ 350.6T 11:15+36.2TSUPPORT/REJECTION
2026-09-10 11:19SENSEX 75000 PE20* / 40*11:20 @ 283.1T 11:42+36.4TSUPPORT/REJECTION
2026-09-11 10:16NIFTY 23150 CE12* / 1010:17 @ 194.2T 10:21+8.3TSCALP
2026-09-15 10:29NIFTY 23700 PE12* / 24*10:30 @ 332.1T 10:46+21.9no_claimOTHER
2026-09-15 14:09NIFTY 23400 PE12* / 10114:10 @ 149.4time 15:15+58.8no_claimSCALP
2026-09-17 10:11SENSEX 74000 CE20* / 2510:12 @ 614.8SL 10:13-24.3TBREAK/TRENDLINE
2026-09-17 11:45SENSEX 74000 CE20 / 40*11:46 @ 438.9SL 11:46-23.9SLOTHER
2026-09-17 14:28SENSEX 74000 CE20* / 40*14:29 @ 422.1T 14:30+36.1TBREAK/TRENDLINE
2026-09-23 09:18SENSEX 74300 CE20* / 40*09:19 @ 546.9T 09:19+35.8TOTHER
2026-09-23 09:25SENSEX 74300 CE18 / 36*09:26 @ 532.9SL 09:26-22.1no_claimSCALP
2026-09-23 09:54SENSEX 74800 PE20* / 2109:55 @ 327.9SL 09:56-23.6no_claimOTHER
2026-09-29 10:26NIFTY 22500 CE4 / 1510:27 @ 132.1SL 10:28-5.5no_claimSCALP
2026-10-01 10:01SENSEX 72000 CE20* / 40*10:02 @ 559.6SL 10:03-24.1no_claimBREAK/TRENDLINE
2026-10-01 12:46SENSEX 72300 PE60 / 120*12:47 @ 436.0T 12:50+115.9no_claimBREAK/TRENDLINE
2026-10-01 15:11SENSEX 71600 CE20 / 5015:12 @ 364.4SL 15:12-23.7TOTHER
2026-10-05 10:26NIFTY 22400 CE12* / 1510:27 @ 169.8T 10:28+13.3no_claimSCALP
2026-10-05 12:06NIFTY 22650 PE12* / 24*12:07 @ 232.5SL 12:18-13.8no_claimOTHER
2026-10-05 12:54NIFTY 22650 PE12* / 3612:55 @ 214.5SL 12:57-13.7TOTHER
2026-10-05 14:09NIFTY 22400 CE15 / 3014:10 @ 182.5T 14:21+28.3TBREAK/TRENDLINE
2026-10-09 12:17NIFTY 22200 CE12* / 24*12:18 @ 321.7T 12:49+22.0no_claimOTHER
2026-10-16 09:18NIFTY 23150 PE12* / 2009:19 @ 258.6SL 09:20-13.8no_claimBREAK/TRENDLINE

Entry = open of the next 1m bar after the call minute, +0.5 slippage. SL/target are from his spoken points (fallback SL 12 Nifty / 20 Sensex, target 2×SL, marked *). Same-bar SL+target counts as SL. Time exit 15:15. −0.5 slippage at exit plus Rs20/order, STT 0.15%, exchange, SEBI, stamp and GST (Nifty lot 65, Sensex 20). Nifty and Sensex points are different sizes (Sensex premiums are roughly 3× Nifty), so the pooled mean is only indicative. Before charges: +5.6 per trade. With target forced to 2×SL: +2.7.

YT4. Stated vs real, by setup and index

group n win pts total cut
BREAK/TRENDLINE 7.0 42.9 13.5 94.4 setup
OTHER 14.0 21.4 -9.9 -138.6 setup
SCALP 6.0 66.7 10.2 61.3 setup
SUPPORT/REJECTION 2.0 100.0 36.3 72.6 setup
NIFTY 12.0 58.3 9.2 109.9 index
SENSEX 17.0 29.4 -1.2 -20.1 index
SL 3.0 33.3 -13.3 -39.9 stated outcome
T 12.0 50.0 3.8 45.9 stated outcome
no_claim 14.0 35.7 6.0 83.8 stated outcome

His stated outcomes are the first “target done/touched” or “SL hit” phrase within 40 minutes of the call. They agree with real bars on 53% of the 15 scored calls where he stated one. A stated “target done” was a real target hit 6 of 12 times. By stated outcome: “target” calls +3.8 per trade (n=12), “SL” calls -13.3 (n=3), no claim +6.0 (n=14).

YT5. Against the self-reported log (overlapping dates)

date log_rows log_wins log_pts matched_yt_10min stream_that_day yt_fresh_calls
2026-08-26 4 3 199 1 yes 1
2026-08-31 2 2 115 0 yes 0
2026-09-01 13 10 304 0 yes 0
2026-09-11 7 6 459 0 yes 1
2026-09-25 5 4 620 0 no stream 0
2026-10-05 3 2 71 0 yes 4

The log covers only 6 dates in this window. On 25-Sep there was no stream, yet the log shows 5 trades for +620 pts. On 05-Oct the log's strikes (Nifty 24800CE, Sensex 79500) are 2,200 Nifty and 7,300 Sensex points away from that day's market (spot ≈22,580 / ≈72,200). On 01-Sep the log has 13 trades (10 wins), but the stream that day gives no fresh call with an activation. Overall, 1 of 34 log rows match a stream call (same side, ±10 min). The self-reported log is not a record of the live calls.

YT6. Taken vs skipped (redo of the discretion analysis with stream calls)

Same method as the Trader discretion section (s9/s10 code unchanged; YouTube calls with known side as “taken”; fit 25-Aug..30-Sep, holdout 1–23-Oct). 51 calls with a known side → 50 with entry-time features; 315 candidates; fit base take rate 12%. 48% of his calls have one of our V1–V4/P1–P8 candidates within ±10 min, same direction. The strongest contrasts: he takes trades after a strong move in his direction (side-aligned spot move over 15 min, standardised difference ≈1.0; 15-min premium change 19.5 vs 9.5 for skipped; BH q<0.01). In plain words, he chases momentum.

feature taken_mean skipped_mean smd mw_p q_bh
spot_mv15 44.850 19.613 1.019 0.000 0.000
prem_chg15 19.458 9.456 0.823 0.000 0.000
prem_chg5 12.511 8.153 0.618 0.000 0.001
spot_pos 0.865 0.692 0.555 0.002 0.007
gap -0.243 -0.046 -0.534 0.002 0.007
prem_dd 8.716 16.103 -0.486 0.002 0.007

Tree CV AUC 0.57 / holdout 0.62; logistic 0.54 / 0.47. No tree leaf had ≥10 takes at ≥1.2× the base rate, so the pre-registered extraction gives no filter. There is nothing to test on held-out data or 2024–26 history, and we did not go looking for one after the fact. Candidates he took: X_OLD −0.8 pts per trade (n=46). Skipped: −4.2 (n=269). Both are ≤0.

YT7. Limits

Files: yt_calls_scored.csv · yt_review_adjudicated.csv · yt_random_bench.csv · yt_by_group.csv · yt_vs_selflog.csv · yt_disc_candidates.csv · yt_disc_model.json · scripts scripts/yt_*.py, s12_yt_discretion.py, s13_yt_disc_model.py.

Expiry day: do cheap (~20) counter-trend options jump 2×–3×?

Added after Satya's 19:55 IST (27-Oct) question: “on expiries opposite to trend from around 20 premium there is 2x or 3x jumps”. Design pre-registered at 20:05 IST in PREREG.md (EXPIRY-CHEAP-COUNTER) before any number was computed. Real 1m bars of the expiring contract:

Spot 15:15–15:29 is treated as missing. Settlement uses the official close. Option buyer only.

Verdict. The jumps are real, but they are not a counter-trend effect and they are not tradable.

EC1. Definitions (pre-registered)

EC2. Frequency facts

ix signal set expiry_days signals reached 2× % reached 3× % reached 5× % median min to peak settled ≈0 %
NIFTY counter 15–25 108 170.0 40.0 21.2 11.8 32.5 82.9
NIFTY with-trend 15–25 108 170.0 42.9 21.2 10.6 26.0 79.4
NIFTY counter 10–30 108 171.0 39.8 21.6 11.7 30.0 83.0
NIFTY counter DECAY 15–25 108 156.0 39.7 19.2 7.7 52.5 78.8
NIFTY counter W1 09:35–11 108 149.0 41.6 22.8 12.8 36.0 82.6
NIFTY counter W2 11–13 108 133.0 38.3 21.8 10.5 46.0 75.9
NIFTY counter W3 13–14:30 108 114.0 45.6 21.1 7.9 34.0 71.9
NIFTY counter W4 14:30–15 108 56.0 30.4 16.1 5.4 8.0 71.4
NIFTY random minute 15–25 (30 reps) 108 5,093.0 35.0 20.9 9.2 27.0 79.4
SENSEX counter 15–25 104 166.0 38.0 18.7 7.2 28.0 95.2
SENSEX with-trend 15–25 104 167.0 35.9 21.0 13.2 20.0 93.4
SENSEX counter 10–30 104 167.0 37.7 18.6 7.2 28.0 95.2
SENSEX counter DECAY 15–25 104 157.0 32.5 19.1 8.9 26.0 96.2
SENSEX counter scaled band 104 167.0 43.7 25.1 11.4 42.0 80.2
SENSEX counter W1 09:35–11 104 151.0 39.1 19.2 7.3 28.0 94.7
SENSEX counter W2 11–13 104 138.0 32.6 21.0 13.0 32.0 96.4
SENSEX counter W3 13–14:30 104 131.0 31.3 21.4 12.2 15.0 90.8
SENSEX counter W4 14:30–15 104 103.0 36.9 25.2 10.7 9.0 87.4
SENSEX random minute 15–25 (30 reps) 104 4,980.0 32.2 18.9 9.0 17.0 94.4

“Reached N×” = a later 1m high ≥ N × the signal-minute close, at any time up to 15:29. Measured from the fill (next open +slippage), ≥2× drops slightly. The median signal minute is 09:36, because a 15–25 option on the counter side usually already exists right after the trend check starts. Sensex points are about 3.3× Nifty points, so a raw 15–25 Sensex option is much further OTM; the “scaled band” row fixes that.

Share of expiry days where a counter-trend first signal (either side) reached 2× / 3× / 5×, by year:

ix year days_with_signal any2x any3x any5x
NIFTY 2024 12 41.7 25.0 25.0
NIFTY 2025 53 45.3 28.3 18.9
NIFTY 2026 43 55.8 32.6 16.3
SENSEX 2024 12 50.0 33.3 8.3
SENSEX 2025 52 40.4 25.0 7.7
SENSEX 2026 40 60.0 32.5 17.5

Quarterly: ec_freq_quarter.csv.

EC3. Tradable test (primary, pre-registered; BH over the 6 test rows)

ix exit split n mean net pts median win % p10 p90 best mean w/o top 3 with-trend control random-minute mean pctile vs random p BH q (6) counts
NIFTY half 2x / half 3x or close train 99 -7.37 -18.75 23.23 -23.66 27.90 35.93 -8.70 -6.79 -8.39 83.33 0.00 – False
NIFTY half 2x / half 3x or close test 70 -6.08 -18.17 24.29 -23.89 30.14 36.58 -7.90 -5.43 -5.96 50.00 0.02 0.03 False
NIFTY SL 50% + trail after 2x train 99 -4.56 -10.53 26.26 -12.84 12.61 56.71 -5.88 -4.87 -4.39 60.00 0.00 – False
NIFTY SL 50% + trail after 2x test 70 -5.15 -10.65 25.71 -12.93 12.97 26.57 -6.46 -0.58 -3.70 23.33 0.00 0.00 False
NIFTY hold to settlement train 99 -0.72 -19.21 13.13 -23.38 49.15 426.77 -9.99 -5.94 -5.96 100.00 0.91 – False
NIFTY hold to settlement test 70 -8.14 -20.45 14.29 -24.23 26.42 207.18 -14.85 -2.81 -8.79 60.00 0.08 0.10 False
SENSEX half 2x / half 3x or close train 98 -13.99 -24.09 14.29 -27.98 25.57 30.72 -15.39 -15.08 -14.78 66.67 0.00 – False
SENSEX half 2x / half 3x or close test 68 -11.80 -22.95 17.65 -26.81 28.49 32.89 -13.85 -10.29 -11.22 30.00 0.00 0.00 False
SENSEX SL 50% + trail after 2x train 98 -5.51 -14.34 24.49 -16.76 7.33 351.31 -10.05 -10.75 -9.38 96.67 0.16 – False
SENSEX SL 50% + trail after 2x test 68 -8.87 -14.05 22.06 -15.70 11.13 18.35 -10.08 -5.08 -6.62 13.33 0.00 0.00 False
SENSEX hold to settlement train 98 -16.14 -22.59 3.06 -25.05 -20.52 352.30 -22.72 -18.86 -15.76 50.00 0.00 – False
SENSEX hold to settlement test 68 -6.38 -22.31 5.88 -25.18 -18.87 591.71 -21.71 -0.81 -10.63 66.67 0.53 0.53 False

Net option points per unit (Sensex rows are in Sensex points; divide by ≈3.3 for Nifty-equivalent). A row counts only if the test mean > 0, p < 0.05, q < 0.10, it beats random (≥90th percentile) and the with-trend control, the train mean > 0, and the mean without the top 3 is > 0.

Why “2×–3× happens 20–40% of the time” still loses money: the median trade loses most of the premium. Exit (a) wins only 1 trade in 4 to 6, and most of the rest expire near zero, so the 2× and 3× winners don't pay for them. Hold-to-settlement has rare huge winners (best +592 pts) but a win rate of 3–14%, and it is negative without the top 3. The p < 0.05 rows are significantly negative.

EC4. Sensitivities (test 2026)

set ix exit n mean median win no_top3 t_p q_bh
band 10–30 NIFTY half 2x / half 3x or close 70 -6.20 -17.65 22.86 -8.02 0.01 0.03
band 10–30 NIFTY SL 50% + trail after 2x 70 -5.37 -10.35 24.29 -6.69 0.00 0.00
band 10–30 NIFTY hold to settlement 70 -8.19 -20.20 12.86 -14.91 0.08 0.13
band 10–30 SENSEX half 2x / half 3x or close 68 -11.80 -22.95 17.65 -13.85 0.00 0.00
band 10–30 SENSEX SL 50% + trail after 2x 68 -8.89 -14.05 22.06 -10.09 0.00 0.00
band 10–30 SENSEX hold to settlement 68 -6.40 -22.31 5.88 -21.73 0.53 0.63
Sensex scaled band SENSEX half 2x / half 3x or close 68 -14.33 -60.74 29.41 -19.94 0.10 0.16
Sensex scaled band SENSEX SL 50% + trail after 2x 68 -9.53 -34.54 26.47 -18.83 0.16 0.23
Sensex scaled band SENSEX hold to settlement 68 -16.59 -63.21 17.65 -43.13 0.36 0.44
DECAY 15–25 NIFTY half 2x / half 3x or close 64 -5.74 -17.65 29.69 -7.80 0.04 0.07
DECAY 15–25 NIFTY SL 50% + trail after 2x 64 -1.57 -12.11 29.69 -6.30 0.71 0.77
DECAY 15–25 NIFTY hold to settlement 64 -5.69 -22.80 17.19 -15.09 0.35 0.44
DECAY 15–25 SENSEX half 2x / half 3x or close 63 -11.50 -25.75 20.63 -13.85 0.00 0.00
DECAY 15–25 SENSEX SL 50% + trail after 2x 63 -9.62 -15.64 22.22 -11.40 0.00 0.00
DECAY 15–25 SENSEX hold to settlement 63 -11.91 -25.84 3.17 -25.35 0.36 0.44
W1 09:35–11 NIFTY half 2x / half 3x or close 60 -6.39 -18.55 23.33 -8.54 0.02 0.04
W1 09:35–11 NIFTY SL 50% + trail after 2x 60 -5.35 -10.65 25.00 -6.90 0.00 0.00
W1 09:35–11 NIFTY hold to settlement 60 -9.24 -20.30 13.33 -15.76 0.05 0.09
W1 09:35–11 SENSEX half 2x / half 3x or close 61 -11.05 -22.70 18.03 -13.31 0.00 0.00
W1 09:35–11 SENSEX SL 50% + trail after 2x 61 -8.70 -13.91 22.95 -9.96 0.00 0.00
W1 09:35–11 SENSEX hold to settlement 61 -4.40 -22.19 6.56 -21.48 0.70 0.77
W2 11–13 NIFTY half 2x / half 3x or close 55 -3.74 -17.25 34.55 -6.00 0.23 0.31
W2 11–13 NIFTY SL 50% + trail after 2x 55 1.20 -10.58 30.91 -4.85 0.81 0.85
W2 11–13 NIFTY hold to settlement 55 -2.34 -19.02 21.82 -11.22 0.71 0.77
W2 11–13 SENSEX half 2x / half 3x or close 55 -10.11 -23.55 25.45 -12.50 0.00 0.01
W2 11–13 SENSEX SL 50% + trail after 2x 55 -4.65 -13.93 27.27 -8.65 0.15 0.22
W2 11–13 SENSEX hold to settlement 55 -3.27 -22.34 5.45 -22.44 0.85 0.87
W3 13–14:30 NIFTY half 2x / half 3x or close 50 -6.20 -17.57 28.00 -8.82 0.03 0.06
W3 13–14:30 NIFTY SL 50% + trail after 2x 50 -5.19 -10.69 26.00 -6.70 0.00 0.00
W3 13–14:30 NIFTY hold to settlement 50 -6.91 -19.42 20.00 -15.10 0.20 0.27
W3 13–14:30 SENSEX half 2x / half 3x or close 55 -11.15 -23.25 21.82 -13.76 0.00 0.00
W3 13–14:30 SENSEX SL 50% + trail after 2x 55 -6.91 -13.96 21.82 -9.89 0.00 0.01
W3 13–14:30 SENSEX hold to settlement 55 -1.25 -22.04 7.27 -19.31 0.91 0.91
W4 14:30–15 NIFTY half 2x / half 3x or close 32 -10.65 -18.42 18.75 -14.76 0.00 0.00
W4 14:30–15 NIFTY SL 50% + trail after 2x 32 -6.18 -10.04 18.75 -8.57 0.00 0.00
W4 14:30–15 NIFTY hold to settlement 32 -10.25 -17.92 15.62 -16.06 0.01 0.02
W4 14:30–15 SENSEX half 2x / half 3x or close 42 -10.50 -21.57 23.81 -13.48 0.00 0.01
W4 14:30–15 SENSEX SL 50% + trail after 2x 42 -7.00 -13.53 21.43 -10.35 0.00 0.01
W4 14:30–15 SENSEX hold to settlement 42 -13.94 -21.74 7.14 -22.51 0.02 0.04

EC5. Regime chosen on train only, then tested on 2026

ix exit label bucket train_n train_mean test_n test_mean test_win test_p test w/o top 3 q_bh
NIFTY half 2x / half 3x or close L3_ER20 mid0.2-0.4 25 -4.81 17 -13.24 11.76 0.00 -19.76 0.01
NIFTY SL 50% + trail after 2x L2_DMA_trend up 42 -1.00 21 -7.02 19.05 0.00 -10.26 0.01
NIFTY hold to settlement L2_DMA_trend up 42 8.20 21 -7.81 9.52 0.48 -20.27 0.58
SENSEX half 2x / half 3x or close L1_VIX >16 16 -8.91 23 -9.08 21.74 0.06 -15.04 0.09
SENSEX SL 50% + trail after 2x L3_ER20 mid0.2-0.4 34 0.03 19 -9.08 21.05 0.00 -13.47 0.01
SENSEX hold to settlement L3_ER20 mid0.2-0.4 34 -4.64 19 9.25 5.26 0.78 -23.46 0.78

The best train buckets were mostly still negative on train. The two that were positive on train both failed in 2026: Nifty DMA-trend up, hold to settlement (+8.2 → −7.8), and Sensex ER20 mid, trail (+0.0 → −9.1). The only positive test bucket (Sensex hold, +9.3, n=19) had a train mean of −4.6, wins on 1 of 19 trades, and is −23.5 without its top 3.

EC6. Fill realism

ix src n vol_known sig_vol_zero_pct fill_vol_zero_pct fill_vol_median fill_vol_p10
NIFTY by_expiry 164 1 0 0 3,004,992 1,117,084
NIFTY eod_atm 2 0 0 0 5,257,915 5,257,915
NIFTY opt_panels 4 0 – – – –
SENSEX by_expiry 166 1 0 0 372,550 123,720

Every signal and fill bar had traded volume (median about 3.0M Nifty and 0.37M Sensex units at the fill minute), so the prints are real trades, not stale quotes. Bid/ask spreads are unknown (no history). On a 20-premium option a 0.5–1 pt spread is 2.5–5% per side, so real results would be somewhat worse than shown.

Files: ec_signals.csv (every signal with outcome) · ec_random.csv · ec_freq.csv · ec_primary.csv · ec_sens.csv · ec_regime.csv · ec_fills.csv · scripts s15_ec_cache.py, s16_ec.py, s17_ec_stats.py.

Why 20? Is the ~20 premium level itself special on expiry days?

Added after Satya's 20:14 IST (27-Oct) follow-up: “but there is some thing with this 20 i think”. Design pre-registered at 20:20 IST in PREREG.md (WHY-20) before any number was computed. Same data and rules as the expiry section above: expiring contract, real 1m bars, spot 15:15–15:29 missing, official-close settlement, buyer only, next-open fill + slippage, full costs.

Verdict: 20 is not special.

W1. Level scan: first touch of each level from above (every OTM option, every expiry day)



ix set L n days P(≥2×) % P(≥3×) % settle≈0 % net/premium (a) net/premium (b) net/premium (c) (a) train (a) test
NIFTY raw 5 1519 108 30.28 17.84 93.88 -0.67 -0.44 -0.58 -0.70 -0.63
NIFTY raw 10 1274 108 37.28 22.61 86.97 -0.41 -0.22 -0.31 -0.43 -0.37
NIFTY raw 15 1134 108 37.65 23.54 82.10 -0.33 -0.22 -0.30 -0.35 -0.30
NIFTY raw 20 1046 108 39.29 22.47 78.01 -0.29 -0.19 -0.29 -0.28 -0.31
NIFTY raw 25 987 108 38.80 23.51 73.45 -0.25 -0.18 -0.21 -0.27 -0.23
NIFTY raw 30 907 108 39.80 23.04 69.57 -0.22 -0.14 -0.19 -0.23 -0.20
NIFTY raw 40 745 108 39.60 22.42 65.10 -0.20 -0.15 -0.19 -0.20 -0.19
NIFTY raw 50 567 96 38.10 19.58 63.14 -0.21 -0.10 -0.24 -0.21 -0.21
NIFTY raw 75 232 48 37.50 19.40 61.21 -0.18 -0.07 -0.27 -0.19 -0.17
NIFTY raw 100 96 19 34.38 15.62 59.38 -0.25 -0.13 -0.30 -0.42 -0.08
SENSEX raw 5 3260 104 22.02 11.72 98.99 -1.30 -0.95 -1.05 -1.36 -1.19
SENSEX raw 10 2669 104 29.60 17.38 96.82 -0.85 -0.57 -0.73 -0.91 -0.74
SENSEX raw 15 2440 104 32.99 19.43 94.84 -0.67 -0.42 -0.63 -0.72 -0.55
SENSEX raw 20 2309 104 33.82 21.09 92.59 -0.57 -0.36 -0.55 -0.62 -0.45
SENSEX raw 25 2214 104 36.40 22.76 90.06 -0.47 -0.28 -0.44 -0.53 -0.35
SENSEX raw 30 2126 104 36.97 22.77 88.76 -0.43 -0.26 -0.42 -0.50 -0.29
SENSEX raw 40 2003 104 37.74 23.91 85.07 -0.36 -0.21 -0.33 -0.41 -0.26
SENSEX raw 50 1889 104 38.01 24.35 81.79 -0.33 -0.19 -0.26 -0.38 -0.23
SENSEX raw 75 1697 104 40.01 24.81 74.96 -0.24 -0.14 -0.20 -0.28 -0.16
SENSEX raw 100 1540 104 40.39 24.48 69.03 -0.18 -0.11 -0.16 -0.21 -0.14
SENSEX scaled 5 2414 104 33.31 20.13 94.24 -0.63 -0.40 -0.62 -0.70 -0.50
SENSEX scaled 10 2084 104 38.00 23.08 87.52 -0.41 -0.23 -0.38 -0.46 -0.30
SENSEX scaled 15 1892 104 37.90 24.26 82.14 -0.33 -0.21 -0.26 -0.39 -0.23
SENSEX scaled 20 1787 104 40.01 24.73 76.89 -0.26 -0.15 -0.20 -0.29 -0.21
SENSEX scaled 25 1644 104 39.78 24.88 73.36 -0.23 -0.14 -0.20 -0.26 -0.17
SENSEX scaled 30 1555 104 40.26 25.02 69.45 -0.18 -0.11 -0.16 -0.21 -0.14
SENSEX scaled 40 1319 104 40.49 23.65 64.59 -0.15 -0.12 -0.17 -0.17 -0.13
SENSEX scaled 50 1054 100 40.80 23.15 62.62 -0.14 -0.10 -0.18 -0.13 -0.15
SENSEX scaled 75 469 54 41.58 22.60 58.00 -0.10 -0.13 -0.15 -0.10 -0.13
SENSEX scaled 100 226 22 40.71 19.91 58.85 -0.13 -0.02 -0.15 -0.09 -0.40

Band ±20% around each level (20 = 16–24). Net/premium = net P&L ÷ fill; −0.29 means you lose on average 29% of the premium paid. Error bars and CIs are a 95% bootstrap over days. Sensex “scaled” = level × (Sensex open / Nifty open) ≈ ×3.3.

Is 20 an outlier vs a smooth curve fitted to the other 9 levels?

ix set metric at15 at20 at20_ci at25 smooth_fit_at20 special
NIFTY raw P(≥2×) % 37.654 39.293 35.2..43.6 38.804 39.159 False
NIFTY raw P(≥3×) % 23.545 22.467 18.6..26.3 23.506 23.605 False
NIFTY raw P(settle≈0) % 82.099 78.011 75.5..80.8 73.455 75.775 False
NIFTY raw ret/premium exit a -0.332 -0.291 -0.387..-0.196 -0.249 -0.271 False
NIFTY raw ret/premium exit b -0.218 -0.194 -0.244..-0.14 -0.180 -0.175 False
NIFTY raw ret/premium exit c -0.296 -0.287 -0.474..-0.072 -0.213 -0.228 False
SENSEX raw P(≥2×) % 32.992 33.824 30.6..36.8 36.405 34.661 False
SENSEX raw P(≥3×) % 19.426 21.091 17.9..24 22.764 21.366 False
SENSEX raw P(settle≈0) % 94.836 92.594 91.1..93.9 90.063 92.631 False
SENSEX raw ret/premium exit a -0.667 -0.566 -0.639..-0.492 -0.473 -0.563 False
SENSEX raw ret/premium exit b -0.425 -0.360 -0.404..-0.306 -0.280 -0.350 False
SENSEX raw ret/premium exit c -0.630 -0.551 -0.774..-0.271 -0.441 -0.514 False
SENSEX scaled P(≥2×) % 37.896 40.011 36.7..43.4 39.781 39.344 False
SENSEX scaled P(≥3×) % 24.260 24.734 21.3..28.3 24.878 24.681 False
SENSEX scaled P(settle≈0) % 82.135 76.889 74.8..79 73.358 75.754 False
SENSEX scaled ret/premium exit a -0.333 -0.261 -0.341..-0.176 -0.228 -0.258 False
SENSEX scaled ret/premium exit b -0.207 -0.154 -0.195..-0.108 -0.141 -0.168 False
SENSEX scaled ret/premium exit c -0.260 -0.201 -0.402..0.0123 -0.204 -0.231 False

W2. Round-number support: does the premium bounce at 20 more than at 17/18/22/23?

ix set L round n low≥L−2 next 5m % low≥L−2 next 15m % low≥0.9L next 15m % close>L after 15m %
NIFTY raw 10 True 1397 61.3 36.6 17.5 33.0
NIFTY raw 17 False 1226 35.6 17.6 15.3 34.0
NIFTY raw 18 False 1203 35.2 17.1 15.2 34.7
NIFTY raw 20 True 1182 32.5 17.5 17.5 36.0
NIFTY raw 22 False 1157 30.5 16.3 16.9 34.6
NIFTY raw 23 False 1139 28.1 14.3 16.4 34.3
NIFTY raw 25 True 1104 25.5 11.7 14.4 34.1
NIFTY raw 30 True 1071 23.6 13.1 16.6 35.2
NIFTY raw 50 True 864 12.5 6.0 12.4 29.3
SENSEX raw 10 True 2999 62.4 38.8 18.6 32.7
SENSEX raw 17 False 2642 37.7 19.4 16.2 33.7
SENSEX raw 18 False 2602 37.5 18.9 16.9 34.4
SENSEX raw 20 True 2559 31.8 15.3 15.3 33.6
SENSEX raw 22 False 2502 29.8 15.2 15.9 33.3
SENSEX raw 23 False 2470 28.5 13.4 15.0 34.4
SENSEX raw 25 True 2423 27.5 13.2 15.5 35.3
SENSEX raw 30 True 2340 22.4 10.7 14.1 33.7
SENSEX raw 50 True 2089 17.7 9.7 16.4 36.8
SENSEX scaled 10 True 2291 56.4 30.2 14.4 34.8
SENSEX scaled 17 False 2035 32.7 17.1 14.6 35.5
SENSEX scaled 18 False 2006 32.9 17.1 15.8 35.6
SENSEX scaled 20 True 1950 30.8 14.7 14.7 36.0
SENSEX scaled 22 False 1923 29.4 15.5 17.2 37.0
SENSEX scaled 23 False 1899 25.6 13.9 15.9 36.3
SENSEX scaled 25 True 1848 24.8 13.6 15.9 37.3
SENSEX scaled 30 True 1767 23.5 12.2 16.5 35.9
SENSEX scaled 50 True 1487 12.6 7.3 14.7 31.9

Round {10,20,25,30,50} minus non-round {17,18,22,23}, and 20 minus mean(17,18,22,23) (percentage points, 95% day-bootstrap CI):

ix set metric round_minus_nonround ci l20_minus_17_18_22_23 ci20
NIFTY raw hold5 1.11 -0.6..2.7 0.06 -2.5..2.7
NIFTY raw hold15 2.11 0.7..3.6 1.13 -1.2..3.5
NIFTY raw hold15_pct -0.03 -1.4..1.2 1.56 -0.9..3.8
NIFTY raw up15 -0.70 -1.9..0.4 1.63 -0.5..3.7
SENSEX raw hold5 0.73 -0.7..2.0 -1.65 -3.8..0.4
SENSEX raw hold15 1.94 1.0..3.0 -1.49 -3.0..0.1
SENSEX raw hold15_pct 0.08 -0.9..1.1 -0.71 -2.3..0.7
SENSEX raw up15 0.31 -0.6..1.2 -0.32 -1.9..1.1
SENSEX scaled hold5 1.39 0.2..2.6 0.55 -1.6..2.8
SENSEX scaled hold15 0.67 -0.4..1.8 -1.28 -3.2..0.5
SENSEX scaled hold15_pct -0.64 -1.7..0.4 -1.17 -2.9..0.7
SENSEX scaled up15 -0.79 -2.0..0.5 -0.09 -1.9..1.8

The fixed “low ≥ L−2” measure falls steadily with level: 61% at 10 and 33% at 20 (Nifty, 5 min). The round-number edge in that measure therefore comes from level 10, where −2 is a 20% cushion. With a fair tolerance (≥0.9L) every level is at 12–18% (Nifty), with no bump at 20. 20 vs its non-round neighbours: Nifty +1.1 points (CI −1.2..3.5), Sensex −1.5 (−3.0..0.1).

W3. “Holds at 20” variant (zone 18–22, floor 17, base N minutes, buy the break of the base high)

ix N exit split n mean median win no_top3 random_mean random_pctile p q_bh_primary counts
NIFTY 10 half 2× / half 3× or close train 81 -10.11 -26.26 28.40 -13.47 -6.91 0.00 0.01 – False
NIFTY 10 half 2× / half 3× or close test 71 5.09 -1.14 42.25 1.27 -0.05 100.00 0.26 0.85 False
NIFTY 10 SL 50% + trail after 2× train 81 -6.64 -15.17 27.16 -9.61 -3.74 3.33 0.02 – False
NIFTY 10 SL 50% + trail after 2× test 71 3.29 -14.09 35.21 -5.74 1.03 80.00 0.57 0.85 False
NIFTY 10 hold to settlement train 81 -11.54 -27.68 22.22 -19.52 -6.87 0.00 0.07 – False
NIFTY 10 hold to settlement test 71 4.43 -24.62 28.17 -5.20 2.11 76.67 0.56 0.85 False
NIFTY 20 half 2× / half 3× or close train 66 -11.10 -19.79 31.82 -14.97 -2.99 0.00 0.02 – False
NIFTY 20 half 2× / half 3× or close test 51 -0.28 -1.17 43.14 -4.47 2.71 3.33 0.96 0.96 False
NIFTY 20 SL 50% + trail after 2× train 66 -8.49 -16.56 30.30 -11.13 -1.62 0.00 0.01 – False
NIFTY 20 SL 50% + trail after 2× test 51 9.25 -15.99 41.18 -3.77 3.31 96.67 0.29 0.85 False
NIFTY 20 hold to settlement train 66 -11.73 -29.55 25.76 -21.05 -2.91 0.00 0.12 – False
NIFTY 20 hold to settlement test 51 6.83 -21.02 33.33 -6.39 4.95 80.00 0.51 0.85 False
SENSEX 10 half 2× / half 3× or close train 114 -12.13 -29.70 24.56 -14.88 -12.15 50.00 0.00 – False
SENSEX 10 half 2× / half 3× or close test 76 -6.43 -27.70 30.26 -10.61 -7.51 80.00 0.17 0.85 False
SENSEX 10 SL 50% + trail after 2× train 114 -4.20 -17.70 28.07 -10.66 -7.49 93.33 0.37 – False
SENSEX 10 SL 50% + trail after 2× test 76 -7.25 -17.07 28.95 -10.67 -5.19 13.33 0.02 0.22 False
SENSEX 10 hold to settlement train 114 -11.62 -31.32 7.89 -26.40 -10.67 36.67 0.23 – False
SENSEX 10 hold to settlement test 76 0.84 -29.99 9.21 -24.26 0.18 56.67 0.96 0.96 False
SENSEX 20 half 2× / half 3× or close train 91 -13.68 -31.85 23.08 -19.15 -9.76 3.33 0.03 – False
SENSEX 20 half 2× / half 3× or close test 67 -4.41 -28.05 29.85 -11.45 -5.31 76.67 0.49 0.85 False
SENSEX 20 SL 50% + trail after 2× train 91 -10.74 -20.80 26.37 -15.09 -4.82 0.00 0.01 – False
SENSEX 20 SL 50% + trail after 2× test 67 -2.94 -18.60 25.37 -11.87 -2.45 46.67 0.63 0.85 False
SENSEX 20 hold to settlement train 91 -9.10 -36.64 14.29 -28.36 -7.82 43.33 0.49 – False
SENSEX 20 hold to settlement test 67 3.53 -31.84 10.45 -27.64 5.23 36.67 0.86 0.96 False

A row counts only if the test mean > 0, p < 0.05, q < 0.10, it is ≥ 90th percentile vs random, the train mean > 0, the mean without the top 3 is > 0, and it beats the same construct at 15 and 25. Random = same window and side, option nearest the level, 30 repeats.

Same construct at every level (mean net pts per trade; Nifty and Sensex raw). 20 is the worst Nifty level on train and the best on test:

ix N exit split 10 15 20 25 30 40 50
NIFTY 10 SL 50% + trail after 2× test -4.70 -7.57 3.29 -0.97 -3.41 -3.88 14.73
NIFTY 10 SL 50% + trail after 2× train -3.61 0.55 -6.64 4.76 -7.32 3.09 6.38
NIFTY 10 half 2× / half 3× or close test -2.37 -9.43 5.09 -7.57 -7.50 -4.02 -0.90
NIFTY 10 half 2× / half 3× or close train -5.87 -6.09 -10.11 -0.09 -5.86 -8.30 -1.55
NIFTY 10 hold to settlement test -6.61 -9.20 4.43 -9.03 -9.88 -6.65 -7.46
NIFTY 10 hold to settlement train 1.55 5.74 -11.54 12.25 -4.14 -1.86 -1.54
NIFTY 20 SL 50% + trail after 2× test -6.52 -9.01 9.25 -7.61 -3.00 -11.22 7.71
NIFTY 20 SL 50% + trail after 2× train -4.13 2.91 -8.49 5.97 -0.91 -3.41 1.61
NIFTY 20 half 2× / half 3× or close test -8.66 -9.89 -0.28 -4.89 -10.25 1.13 -5.47
NIFTY 20 half 2× / half 3× or close train -6.67 -4.42 -11.10 3.63 -2.84 -10.50 1.95
NIFTY 20 hold to settlement test -7.08 -8.47 6.83 -5.35 -8.39 3.62 -3.22
NIFTY 20 hold to settlement train 2.60 10.36 -11.73 13.78 -1.44 -1.84 3.50
SENSEX 10 SL 50% + trail after 2× test -5.03 -4.77 -7.25 -7.30 -8.58 3.21 3.36
SENSEX 10 SL 50% + trail after 2× train -7.43 -6.78 -4.20 -3.82 -3.29 -3.38 -14.72
SENSEX 10 half 2× / half 3× or close test -9.81 -10.98 -6.43 -8.77 -11.75 -4.08 -12.30
SENSEX 10 half 2× / half 3× or close train -11.62 -11.93 -12.13 -13.75 -12.54 -6.63 -13.82
SENSEX 10 hold to settlement test -1.62 -1.77 0.84 -25.25 -6.24 -7.70 -1.28
SENSEX 10 hold to settlement train -13.91 -11.84 -11.62 -16.10 -6.22 -3.86 -6.67
SENSEX 20 SL 50% + trail after 2× test -3.62 -6.15 -2.94 -10.79 8.35 -4.25 13.29
SENSEX 20 SL 50% + trail after 2× train -7.21 -12.11 -10.74 -11.48 -9.33 9.37 -4.07
SENSEX 20 half 2× / half 3× or close test -8.19 -7.91 -4.41 -8.89 -4.32 -1.46 -12.99
SENSEX 20 half 2× / half 3× or close train -14.03 -17.30 -13.68 -14.16 -12.68 10.86 -3.62
SENSEX 20 hold to settlement test 5.55 -2.97 3.53 -25.97 9.07 -1.51 8.77
SENSEX 20 hold to settlement train -14.91 -15.62 -9.10 -14.77 -4.62 6.54 4.87

Time of day (Nifty, holds-at-20): most signals come before 11:00. That window loses on train (−10 to −15) and is about zero on test (−4.2 to +3.1). The 11:00–13:00 and 13:00–14:30 rows have 3–25 trades each and swing sign between train and test. See w20_holds_windows.csv. Sensitivity table (all levels, BH within the table): 20 of 114 test rows are positive and none is significant; the significant rows are negative.

Files: w20_scan_levels.csv · w20_scan_special.csv · w20_touch_levels.csv · w20_touch_round_vs_nonround.csv · w20_holds_summary.csv · w20_holds_by_level.csv · event files w20_scan / w20_touch / w20_holds(_random).csv · scripts s18_why20.py, s19_why20_stats.py, ec_lib.py.

“20 without time value”: an ITM ~20 premium that is almost all intrinsic

Satya's follow-up at 20:29 IST (27-Oct): “20 without timevalue can you add that condition”. The design was pre-registered at 20:31 IST in PREREG.md (TWENTY-NO-TV). State: the option is ITM by 18–22 index points (intrinsic from the 1m spot close), its premium is 16–24, and its time value (premium − intrinsic) is between −2 and +2. Sensitivities: |TV| ≤ 1 and ≤ 10% of premium. Sensex is shown raw and scaled (levels × Sensex/Nifty open, ≈3.3). Delta ≈ 1, so the option roughly doubles on a ~20-point spot move. Signals run 9:35–15:00 only, because spot from 15:15 onward is missing and is not filled.

Verdict: no edge, and the state is rare.

N1. Frequencies: ITM-20 with no time value vs OTM-20 (from the Why-20 scan, signal ≥ 9:35)

what grp n days P(≥2×) % P(≥3×) % settle≈0 % median min to peak median signal minute (0=9:15) net/premium (a) net/premium (c)
ITM-20 no time value (tv2) NIFTY_raw 41.00 37.00 39.02 4.88 34.15 8.00 320.00 -0.13 -0.09
OTM-20 all day NIFTY_raw 732.00 108.00 40.44 23.36 75.82 30.00 118.00 -0.26 -0.23
OTM-20 from 13:00 (t>=225) NIFTY_raw 196.00 75.00 41.33 20.92 75.00 16.00 271.50 -0.25 -0.38
ITM-20 no time value (tv2) SENSEX_raw 2.00 2.00 50.00 50.00 50.00 22.00 333.00 0.08 1.29
OTM-20 all day SENSEX_raw 1,786.00 104.00 33.09 20.27 91.88 16.00 163.00 -0.59 -0.54
OTM-20 from 13:00 (t>=225) SENSEX_raw 633.00 104.00 33.81 19.59 88.94 9.00 292.00 -0.59 -0.67
ITM-20 no time value (tv2) SENSEX_scaled 57.00 43.00 33.33 19.30 45.61 7.00 323.00 -0.19 -0.01
OTM-20 all day SENSEX_scaled 1,278.00 104.00 38.42 23.79 75.12 28.00 129.00 -0.29 -0.19
OTM-20 from 13:00 (t>=225) SENSEX_scaled 371.00 82.00 35.58 21.02 71.70 15.00 279.00 -0.34 -0.35

By time-value definition:

grp tvdef n days x2 x3 zero peak_min_med sig_time_med tv_med
NIFTY_raw tv1 26.0 24.0 50.0 11.5 38.5 14.0 305.0 0.1
NIFTY_raw tv10pct 43.0 38.0 34.9 4.7 34.9 5.0 319.0 0.8
NIFTY_raw tv2 41.0 37.0 39.0 4.9 34.1 8.0 320.0 0.6
SENSEX_raw tv1 2.0 2.0 50.0 50.0 50.0 22.0 333.0 -0.1
SENSEX_raw tv10pct 2.0 2.0 50.0 50.0 50.0 22.0 333.0 -0.1
SENSEX_raw tv2 2.0 2.0 50.0 50.0 50.0 22.0 333.0 -0.1
SENSEX_scaled tv1 40.0 32.0 42.5 20.0 37.5 11.5 322.0 1.0
SENSEX_scaled tv10pct 58.0 43.0 32.8 19.0 44.8 9.0 322.0 2.2
SENSEX_scaled tv2 57.0 43.0 33.3 19.3 45.6 7.0 323.0 2.2

By trend (same trend label as s16; counter = buying against the 20-minute move and the open):

grp mode n days x2 x3 zero peak_min_med sig_time_med tv_med
NIFTY_raw counter 13.0 13.0 46.2 0.0 46.2 15.0 300.0 0.8
NIFTY_raw neutral 14.0 14.0 21.4 7.1 28.6 12.0 304.5 0.5
NIFTY_raw with 14.0 13.0 50.0 7.1 28.6 3.0 322.0 0.4
SENSEX_raw neutral 1.0 1.0 100.0 100.0 0.0 41.0 327.0 0.6
SENSEX_raw with 1.0 1.0 0.0 0.0 100.0 3.0 339.0 -0.7
SENSEX_scaled counter 11.0 10.0 18.2 0.0 36.4 7.0 323.0 3.0
SENSEX_scaled neutral 22.0 19.0 22.7 13.6 59.1 4.0 329.0 2.9
SENSEX_scaled with 24.0 22.0 50.0 33.3 37.5 11.5 312.5 0.4

By window (W2 11:00–13:00, W3 13:00–14:30, W4 14:30–15:00; there were no W1 events):

grp win n days x2 x3 zero peak_min_med sig_time_med tv_med
NIFTY_raw W2 7.0 7.0 28.6 0.0 57.1 29.0 189.0 0.4
NIFTY_raw W3 12.0 12.0 41.7 16.7 33.3 23.5 277.5 1.3
NIFTY_raw W4 22.0 21.0 40.9 0.0 27.3 3.0 337.5 0.5
SENSEX_raw W4 2.0 2.0 50.0 50.0 50.0 22.0 333.0 -0.1
SENSEX_scaled W2 6.0 4.0 33.3 16.7 50.0 32.5 164.5 1.4
SENSEX_scaled W3 20.0 18.0 25.0 10.0 50.0 8.5 274.0 2.2
SENSEX_scaled W4 31.0 28.0 38.7 25.8 41.9 6.0 334.0 2.1

N2. Tradable buyer test (earliest event per side per day; pts per unit after all costs)

Exits: (a) half at 2×, rest at 3× or the 15:29 close. (b) Stop at fill − 10 (≈ spot 10 against), then trail 50% of peak once +20. (c) Hold to settlement intrinsic (official close). Spot control at the same minute and direction: (a') stop −20, half +20, rest +40 or the 15:14 spot close. (b') stop −10, trail 50% once +20. (c') stop −20, else the official close. Spot-control figures are after futures costs. Coin-flip = random direction at the same minute (1000 sims). The R1 random control (random minute in the same window, contract in the state) almost equals the signal, because the state usually lasts only 1–2 minutes, so it is not informative here.

grp mode split exit n mean median win no_top3 p q_bh_primary random_mean spot_same_dir spot_coinflip_mean counts
NIFTY_raw all train a 35 -3.23 -13.92 40.00 -6.44 0.40 – -2.70 -14.70 -7.94 False
NIFTY_raw all train b 35 -1.30 -11.15 40.00 -3.81 0.53 – -1.09 -12.53 -9.14 False
NIFTY_raw all train c 35 -1.30 -13.20 37.14 -6.23 0.80 – -0.93 -15.48 -10.50 False
NIFTY_raw all test a 5 -2.76 1.32 60.00 -16.43 0.66 1.00 -2.76 -14.22 -14.51 False
NIFTY_raw all test b 5 0.86 1.68 60.00 -11.25 0.88 1.00 0.86 -22.13 -14.81 False
NIFTY_raw all test c 5 -6.19 -5.71 40.00 -15.64 0.22 1.00 -6.19 -23.82 -18.40 False
NIFTY_raw counter train a 11 -2.25 -2.85 45.45 -12.59 0.75 – -1.51 -10.36 -8.32 False
NIFTY_raw counter train b 11 2.19 4.22 63.64 -2.25 0.54 – -0.43 -10.60 -8.13 False
NIFTY_raw counter train c 11 -1.85 -21.95 45.45 -14.42 0.81 – -1.94 -12.41 -9.05 False
NIFTY_raw counter test a 2 3.58 3.58 100.00 – – 1.00 3.58 3.15 -14.17 False
NIFTY_raw counter test b 2 9.21 9.21 100.00 – – 1.00 9.21 -21.37 -21.37 False
NIFTY_raw counter test c 2 -1.77 -1.77 50.00 – – 1.00 -1.77 -10.59 -20.89 False
NIFTY_raw with train a 11 -0.54 -6.88 45.45 -10.40 0.93 – -0.06 -11.60 -7.22 False
NIFTY_raw with train b 11 -1.31 -11.15 36.36 -9.91 0.79 – -1.27 -14.50 -11.91 False
NIFTY_raw with train c 11 2.00 -6.06 36.36 -10.91 0.80 – 2.53 -15.63 -11.96 False
NIFTY_raw with test a 2 -3.31 -3.31 50.00 – – 1.00 -3.31 -21.33 -13.99 False
NIFTY_raw with test b 2 -1.42 -1.42 50.00 – – 1.00 -1.42 -21.58 -7.89 False
NIFTY_raw with test c 2 -6.98 -6.98 50.00 – – 1.00 -6.98 -31.58 -15.12 False
SENSEX_scaled all train a 41 -22.58 -62.66 36.59 -32.05 0.05 – -20.86 -49.16 -18.71 False
SENSEX_scaled all train b 41 -9.05 -36.70 34.15 -19.77 0.31 – -4.16 -47.61 -26.48 False
SENSEX_scaled all train c 41 -10.39 -60.35 36.59 -28.60 0.58 – -9.41 -43.73 -15.34 False
SENSEX_scaled all test a 5 28.65 95.72 60.00 -74.64 0.53 1.00 29.49 -3.66 -21.39 False
SENSEX_scaled all test b 5 37.16 26.32 60.00 -36.26 0.36 1.00 37.16 -68.92 -66.62 False
SENSEX_scaled all test c 5 69.37 86.40 60.00 -72.33 0.34 1.00 70.21 38.86 9.05 False
SENSEX_scaled counter train a 8 -27.57 -36.36 37.50 -60.19 0.16 – -27.47 -53.98 -23.04 False
SENSEX_scaled counter train b 8 -24.85 -36.78 25.00 -36.86 0.02 – -24.60 -52.90 -43.52 False
SENSEX_scaled counter train c 8 -26.87 -33.58 37.50 -57.88 0.15 – -26.57 -63.52 -32.20 False
SENSEX_scaled counter test a 1 -75.62 -75.62 0.00 – – 1.00 -70.49 -109.19 -33.68 False
SENSEX_scaled counter test b 1 -36.00 -36.00 0.00 – – 1.00 -35.99 -77.15 -77.15 False
SENSEX_scaled counter test c 1 -73.31 -73.31 0.00 – – 1.00 -68.18 -109.19 8.81 False
SENSEX_scaled with train a 18 -3.87 -47.48 44.44 -24.10 0.83 – -3.51 -38.55 -18.77 False
SENSEX_scaled with train b 18 5.20 -36.59 38.89 -19.11 0.74 – 6.05 -43.35 -25.66 False
SENSEX_scaled with train c 18 10.76 -44.89 44.44 -22.01 0.65 – 11.26 -26.90 -6.99 False
SENSEX_scaled with test a 4 54.72 95.72 75.00 -73.67 0.29 1.00 54.48 22.72 -18.95 False
SENSEX_scaled with test b 4 55.45 55.40 75.00 -36.51 0.25 1.00 55.45 -66.86 -63.93 False
SENSEX_scaled with test c 4 105.05 118.20 75.00 -71.36 0.22 1.00 104.81 75.88 7.75 False

Spot/futures control before costs, and the futures cost (pts):

grp split futures cost pts (round trip) spot (a') before costs spot (b') before costs spot (c') before costs
NIFTY_raw test 11.63 -2.59 -10.50 -12.19
NIFTY_raw train 7.26 -7.43 -5.27 -8.22
SENSEX_raw train 19.65 4.25 -11.50 28.12
SENSEX_scaled test 35.18 31.51 -33.74 74.04
SENSEX_scaled train 21.59 -27.57 -26.02 -22.14

All 2026 (test) trades. Sensex-scaled test means are positive only because of 3 winners out of 5; without the top 3 they are −36 to −75:

grp date typ t mode spot K ref tv fill max_ratio pnl_a pnl_b pnl_c sa sb sc
NIFTY_raw 2026-01-06 PE 323 with 26,131.1 26,150.0 17.2 -1.7 17.4 1.1 -18.5 -11.2 -17.8 -28.1 -18.1 -28.1
NIFTY_raw 2026-02-17 PE 345 counter 25,730.7 25,750.0 21.1 1.9 21.6 1.7 1.3 1.7 2.2 4.9 -18.0 -2.7
NIFTY_raw 2026-04-21 CE 342 with 24,570.0 24,550.0 21.6 1.5 21.9 2.1 11.9 8.4 3.9 -14.6 -25.1 -35.1
NIFTY_raw 2026-06-16 PE 345 neutral 23,978.8 24,000.0 22.9 1.8 23.6 1.1 -14.4 -11.3 -13.5 -34.7 -24.7 -34.7
NIFTY_raw 2026-07-28 PE 337 counter 23,981.6 24,000.0 19.2 0.8 19.6 3.0 5.9 16.7 -5.7 1.4 -24.7 -18.5
SENSEX_scaled 2026-01-01 CE 334 with 85,270.2 85,200.0 69.7 -0.5 70.2 1.2 -73.7 -36.5 -71.4 -89.0 -56.4 -89.0
SENSEX_scaled 2026-01-08 PE 326 with 84,333.5 84,400.0 63.5 -2.9 66.3 4.2 95.7 147.5 150.0 75.3 -56.1 129.0
SENSEX_scaled 2026-05-07 PE 343 with 77,940.0 78,000.0 63.4 3.4 66.4 3.5 95.7 84.5 86.4 52.3 -77.6 50.0
SENSEX_scaled 2026-06-18 PE 342 counter 77,229.8 77,300.0 71.7 1.4 72.1 1.1 -75.6 -36.0 -73.3 -109.2 -77.2 -109.2
SENSEX_scaled 2026-07-30 CE 326 with 77,669.3 77,600.0 69.1 -0.2 70.0 5.0 101.1 26.3 255.1 52.2 -77.4 213.5

Regime filter chosen on train only (best single label with n ≥ 15), applied to test unchanged. With 3–5 test trades this proves nothing:

grp exit filter train_n train_mean test_n test_mean
NIFTY_raw a L3_ER20=range<0.2 20 0.48 5 -2.76
NIFTY_raw b L3_ER20=range<0.2 20 2.20 5 0.86
NIFTY_raw c L3_ER20=range<0.2 20 2.42 5 -6.19
SENSEX_scaled a L1_VIX=<13 17 -6.08 3 41.05
SENSEX_scaled b L1_VIX=<13 17 5.65 3 45.77
SENSEX_scaled c L2_DMA_trend=up 16 14.16 5 69.37

N3. Fill realism

grp n sig_vol_med sig_vol_nan_or0 fill_vol_med fill_vol_nan_or0 src_opt_panels src_eod negTV_contracts
NIFTY_raw 41 9,451,650.0 0.0 9,161,800.0 0.0 0.0 0.0 12
SENSEX_raw 2 3,777,300.0 0.0 4,822,240.0 0.0 0.0 0.0 3
SENSEX_scaled 57 1,909,970.0 0.0 1,916,970.0 0.0 0.0 0.0 20

All signal and fill minutes had traded volume. The median volume at the signal minute is very high (about 9.5M units on Nifty), because these are near-ATM strikes in the last hour of expiry. Bid-ask spreads are unknown (there is no quote data). ITM spreads on expiry afternoons can be wider than the 0.5 / 1.5 slippage assumed. Time value is computed from the spot close against the option's last trade in the same minute, so it is noisy. 35 contracts were excluded at least once for printing more than 2 points below intrinsic.

Files: ntv_events.csv · ntv_trades.csv · ntv_summary.csv · ntv_vs_otm20.csv · ntv_freq*.csv · ntv_random.csv · ntv_regime.csv · ntv_fill.csv · ntv_spot_gross.csv · ntv_negtv.csv · scripts s20_notv.py, s21_notv_stats.py.

4. The 8 rules (as found in popular Indian trading guides)

#StrategyRule as coded
P1ORB15 breakoutFirst 5m close beyond 09:15–09:29 range (09:30–12:00). Stop = other side of the range.
P2ORB5 first 5-min candleFirst 5m close beyond the 09:15–09:19 candle (to 11:00). Stop = other side.
P3Prior-day high/low breakoutDay opens inside the prior-day range; first 5m close above PDH / below PDL (to 14:00). Stop = breakout bar extreme ±5.
P4Narrow-CPR breakout + VWAPNarrow-CPR day only (width < 30th pct of last 250 days). First 5m close beyond CPR and on the same side of VWAP (09:30–12:00). Stop = other CPR edge.
P5Supertrend(10,3) flip + VWAP5m Supertrend(10,3) flips, confirmed by VWAP side (09:45–14:30). Stop = Supertrend line.
P6EMA 9/21 cross + VWAP5m EMA9 crosses EMA21, confirmed by VWAP side (09:45–14:30). Stop = 6-bar swing ±5.
P7RSI(14) 30/70 reversal5m RSI(14) crosses back above 30 (CE) / below 70 (PE) (09:45–14:30). Stop = 6-bar swing ±5.
P8Gap fade (gap-fill)Gap 0.3–1.5%: first 5m close back through the 15-min range toward the gap fill (to 11:00) → buy against the gap. Stop = other side of range.

Sources: stoxgo.in CPR guide, algoram.in “best NIFTY options buying strategy 2026”, tradingzenith.net “7 setups tested”, Ojha CPR playbook. The VWAP-pullback and with-gap ORB variants were already tested on the buyer-method audit.

5. Method, data and limits

Files: results · scripts · charts · pre-registration.