Verdict
Closed: no edge
After 186,480 tested combinations, no setup is profitable and robust at 2x costs with drawdown under 20%. The specification as written loses ₹268 a trade (t -4.9), no better than random entries (-₹240).
- Specification as supplied: 863 trades on 328 sessions (2024-12-03 to 2026-03-30, development window), win rate 23.8%, expectancy -₹267.6 a trade, total -₹2.31 lakh, profit factor 0.66, maximum drawdown about -₹2.34 lakh. Morning -₹170 a trade, afternoon -₹418. Random entries with the same exits and costs: mean -₹240 (95th percentile -₹155); the strategy beats 29% of them.
- Multi-combination search (owner request, capital ₹5,00,000, drawdown limit 20% = ₹1,00,000): 186,480 combinations = 67 signal variants in six families (pullback, opening-range breakout, momentum burst, VWAP reversion, trend continuation, narrow-CPR) x 5 time windows x 3 strike choices (ITM1, ATM, OTM1) x 240 exit settings, each priced at 1x, 2x and 3x slippage and charges. Ranked on 2024-12 to 2025-09 only; 2025-10 to 2026-03 was kept aside for checking.
- Selection-bias check: 1.6% of combinations were profitable on the ranking period at 2x with drawdown under 20%. The top 60 by that ranking made +₹57,700 on average there and -₹40,000 on the checking period; only 5% stayed positive. White's reality check across those 60: p = 0.57 (best t-statistic 0.86). Nothing is significant.
- Only the opening-range-breakout family beats a random-entry calibration: profitable on both halves at 1x in 16% of its combinations against 0.2% for random entries (2,400 random combinations), and at 2x in 591 combinations against none. Its best cell made +₹128,000 at 1x (drawdown 5.7%), +₹60,000 at 2x (10.4%) and -₹8,000 at 3x (17.7%) over 16 months, 176 trades, 10 of 16 months positive. That was chosen in hindsight, so it overstates the future.
- Walk-forward test of 'optimise, then trade' on that family (best configuration chosen on earlier data only, traded on the next quarter, three quarters): +₹30,800 at 1x (drawdown 15%, t 0.57), -₹18,800 at 2x (21%), -₹68,500 at 3x (27%). The chosen strike and parameters changed from quarter to quarter, which is a sign of noise rather than a stable edge.
- Round 2 (69,120 more combinations, same family, holds of up to 150 minutes to dilute costs): worse. Walk-forward -₹43,000 at 1x, -₹98,000 at 2x, -₹153,000 at 3x.
- Reading: before costs the ORB idea may carry about half a point of edge per trade, which is smaller than the friction. Profit at standard costs is possible in sample and disappears at 2x. The hold-out (2026-04-01 to 2026-10-16) stays sealed; opening it would only test a configuration that did not pass the development checks.
- Short side (added 2026-10-20). Quickfuse was never long-only: long signals bought calls and short signals bought puts. Over 863 trades the calls lost ₹262 a trade (433 trades, win rate 22.4%) and the puts lost ₹274 (430 trades, 25.1%); gross before friction was about -1.2 points on each side, so mirroring the signals would earn about +1 point before roughly 1.5 points of friction. The untested version was option SELLING, so it was run on the same 1-minute data (5 lakh capital, 1% of capital at risk, margin cap of 2 lots, 1x/2x/3x costs, development window only): 35,200 single-leg combinations (each of the 67 signal variants selling the option that profits from the signal's direction, at-the-money or one strike out, 5 windows, 64 stop/target settings) and 27 intraday short-straddle settings (sell the ATM call and put at 09:30, 09:45 or 13:45). Result: at 1x costs 1.1% of single-leg combinations were profitable on both halves; at 2x only 22 (0.1%) and none within a 20% drawdown; at 3x two. The 40 best on the first half made +₹21,000 on average there and -₹37,700 on the second half; none stayed positive. Short straddles lost in both halves at every cost level (median -₹54,000 to -₹84,000 on the first half at 2x), with drawdowns up to ₹1.0 lakh. Selling does not rescue the idea: the seller pays the same spread and charges, and loses when moves are larger than the premium collected.
- Capital re-test at ₹15 lakh (2026-10-20; drawdown limit ₹3 lakh, risk per trade scaled, margin cap 6 lots single-leg and 3 lots straddle). Buying grid (186,480 combinations): positive on both halves 6.8% at 1x, 1.0% at 2x, 0.07% (134) at 3x; 25 survive 3x within the drawdown limit, all one opening-range-breakout cluster of 91 and 65 trades earning ₹10,000 to ₹26,000 over the whole window; the 40 best on the first half made +₹2.35 lakh there and -₹0.78 lakh on the second half (8% stayed positive). Walk-forward re-selection of that family: +₹79,800 at 1x, -₹57,400 at 2x, -₹194,600 at 3x. Selling grid (35,227): 7 survive 2x within the limit, none at 3x; top-40 first-half picks +₹0.90 lakh then -₹0.95 lakh. Bigger capital dilutes the fixed ₹20 brokerage per order (more combinations clear 1x and 2x) but not the spread, so the conclusion is unchanged.
- Variants of the written specification: all five conditions required 51 trades, +₹122 a trade (t 0.41); pullback mandatory 149 trades, -₹85 (t -0.59); slippage 1.0 point -₹416; slippage 1.5 -₹565; targets of 15 or 30 points still negative. The paper run was stopped before its first session at the owner's instruction.
Promotion gates
863 (specification); 175 for the best ORB cell.
-4.87 for the specification; 0.86 best of 60 finalists on validation.
Walk-forward ORB: -₹18,800 at 2x (21% drawdown), -₹68,500 at 3x (27%).
Reality check p = 0.57 across 60 finalists.
Specification at the 29th percentile of the random null.
Sealed from 2026-04-01; not opened (owner agreed).
0 of 35,227 combinations; 22 positive on both halves at 2x, none within the drawdown limit.
Explain the strategy
This idea buys a short-lived Nifty call or put when several chart signals agree, hoping to grab 15 to 30 rupees of premium quickly. We replayed it over 328 past trading days. Most trades lost a small amount, a few won more, and after brokerage, taxes and the gap between buying and selling prices the total was a loss. Random entries lost almost the same amount, so the signals did not help.
Report
Development-window variants (all of them, none selected)
| config | trades | win | expectancy_rs | total_rs | pf | t_by_day | max_dd_rs | avg_R |
|---|---|---|---|---|---|---|---|---|
| MAIN (frozen spec) | 863 | 0.238 | -267.6 | -230944.0 | 0.66 | -4.87 | -233919.0 | -0.224 |
| window 0 | 523 | 0.25 | -170.0 | -88889.0 | 0.79 | -2.23 | -99303.0 | -0.143 |
| window 1 | 340 | 0.218 | -417.8 | -142055.0 | 0.46 | -5.93 | -144473.0 | -0.348 |
| side -1 | 430 | 0.251 | -273.5 | -117612.0 | 0.64 | -3.47 | -123620.0 | -0.214 |
| side 1 | 433 | 0.224 | -261.7 | -113332.0 | 0.68 | -3.45 | -112799.0 | -0.233 |
| dow 0 | 184 | 0.223 | -276.6 | -50903.0 | 0.67 | -2.05 | -61696.0 | -0.264 |
| dow 1 | 156 | 0.224 | -271.3 | -42319.0 | 0.67 | -2.11 | -47745.0 | -0.233 |
| dow 2 | 188 | 0.218 | -448.4 | -84301.0 | 0.45 | -4.75 | -83750.0 | -0.342 |
| dow 3 | 151 | 0.245 | -269.0 | -40619.0 | 0.65 | -2.08 | -45024.0 | -0.19 |
| dow 4 | 177 | 0.282 | -60.7 | -10747.0 | 0.91 | -0.48 | -29283.0 | -0.086 |
| dow 5 | 4 | 0.0 | -989.7 | -3959.0 | 0.0 | 0.0 | -0.616 | |
| dow 6 | 3 | 0.333 | 634.7 | 1904.0 | 4.45 | 0.0 | 0.877 | |
| period H1 | 356 | 0.228 | -317.2 | -112918.0 | 0.64 | -3.47 | -112886.0 | -0.247 |
| period H2 | 507 | 0.245 | -232.8 | -118026.0 | 0.68 | -3.41 | -118196.0 | -0.207 |
| VARIANT need 5 of 5 | 51 | 0.275 | 122.0 | 6223.0 | 1.17 | 0.41 | -8805.0 | 0.156 |
| VARIANT slippage 1.0 | 846 | 0.207 | -416.2 | -352125.0 | 0.52 | -7.61 | -352305.0 | -0.357 |
| VARIANT slippage 1.5 | 798 | 0.172 | -565.1 | -450974.0 | 0.41 | -10.44 | -450723.0 | -0.494 |
| VARIANT target 15 | 666 | 0.24 | -281.9 | -187772.0 | 0.6 | -5.25 | -189114.0 | -0.279 |
| VARIANT target 30 | 890 | 0.211 | -228.1 | -202987.0 | 0.72 | -3.54 | -226407.0 | -0.189 |
| VARIANT tol 0.05% | 865 | 0.236 | -272.4 | -235615.0 | 0.66 | -4.97 | -239402.0 | -0.227 |
| VARIANT delta 0.4 | 865 | 0.228 | -275.3 | -238120.0 | 0.66 | -4.79 | -251055.0 | -0.254 |
| VARIANT no VIX/OR filter | 875 | 0.238 | -268.6 | -235054.0 | 0.66 | -4.91 | -234521.0 | -0.223 |
| VARIANT pullback mandatory | 149 | 0.268 | -84.7 | -12624.0 | 0.88 | -0.59 | -26861.0 | -0.099 |
| NULL random entries | 100 | 0.29 | -240.4 |
Rules and parameters
Rules
- Universe: Nifty 50 weekly options, nearest expiry, at-the-money strike (calls for longs, puts for shorts). 2 lots of 75.
- Windows: entries only 09:30 to 11:00 and 13:45 to 14:50; every position is closed by 11:00 or 14:50.
- Bias on completed 5-minute bars: bullish if close > VWAP, EMA9 > EMA21 and close > CPR pivot; bearish is the mirror. Mixed = no trade.
- Entry needs bias plus at least 3 of 4: (2) pullback to VWAP / 5-min EMA21 / CPR pivot or BC (TC for shorts) within 0.03% of spot with a pin bar or engulfing candle; (3) 1-min EMA9 above EMA21 and RSI(14) above 50 and rising; (4) trigger-bar option volume above its prior 8-bar average; (5) close beyond the prior 8-bar swing or the opening range.
- Fill at the open of the next 1-minute bar plus 0.5 point slippage. Stop: below the last three bars' low (spot), converted to premium with delta 0.5; stop between 5 and 15 points or the trade is skipped. Risk at most 0.75% of ₹3 lakh.
- Exit: book half at +20 points; stop to breakeven after +15; trail the rest on the option's 1-minute EMA9 close; exit if no 5-point favourable move in 5 bars; hard exit at window end.
- Guards: at most 3 trades per window, 2 consecutive losses stop the window, daily loss limit 2%, skip days with India VIX above 24 or up more than 10% in a day, or an opening range under 0.15% of spot. Reward after estimated costs must be at least 1.5 times the stop.
Parameters
- capital
- ₹5,00,000
- lot
- 75, then 65 from 2025-12-30 (assumption), 2 lots in the specification
- window
- 2024-12-03 to 2026-03-30
- sessions
- 328
- friction
- standard = 0.5 point per fill plus ₹20 per order, STT 0.1% of sell premium, exchange 0.035%, GST 18%; stress at 2x and 3x
- search
- 186,480 + 69,120 combinations
- hold-out
- sealed from 2026-04-01 (never opened)
- code
- niftyscalp/engine.py, universe.py, kernels.py, search.py, wf.py
- short-side search
- 35,200 single-leg + 27 straddle combinations; code niftyscalp/search_short.py
- capital re-test
- ₹15,00,000: buying grid and selling grid re-run (grid_c15, grid_short_c15)
Instrument
Nifty 50 weekly ATM options (lot 75, 2 lots) · capital ₹500,000
Known limitations
- Index volume is zero, so VWAP is weighted by ATM call plus put traded volume. This is a proxy for futures VWAP.
- No historical bid/ask: the spread filter is replaced by a slippage model of 0.5 point per fill (stressed to 1.5).
- The ATM-relative rolling series only follows strikes within 100 points of spot; trades that outrun that window are closed at the last available price.
- The lot size 75 and the cost schedule are applied to the whole period and are estimates until checked against a contract note.
- Stop and target ordering inside one bar is unknown; the stop is assumed to fill first.
- Paper results exclude real fills, queue position and broker outages.
- The search is an in-sample exploration; the train/validation split, reality check and walk-forward limit but do not remove selection bias. The family-wide multiplicity is far larger than the 60 finalists tested.
- Lot size 75 until 2025-12-30 and 65 afterwards is an assumption from the NSE revision; verify against a contract note.
Logs and raw data
Downloads appear once a data window is loaded.
Files are plain CSV so results can be re-computed independently. Trade dates are IST sessions; returns are net of modelled costs and slippage.