Day-low support (buy CE) / day-high resistance (buy PE) retest — with approach-velocity "physics" filter

Research, not advice. Read-only study; no orders. Built 2026-10-16.

Question

Is there edge in buying ATM CE when Nifty retests the intraday day low (support), or ATM PE when it retests the day high (resistance)? Does approach velocity / deceleration into the level predict bounce vs break?

Verdicts

idea verdict why
Buy CE at day-low retest / PE at day-high retest (all 8 variants) FAIL Net-negative in train, tune and 2026 test for every variant. Best test (X10 Y20, rejection entry, 30m): −₹106/trade, n=208, vs placebo −₹210 (t=1.27, not significant)
Level "holds" more than random FAIL (no level effect overall) Overall hold rate is at or below random-level placebo (test 42–49% vs placebo 44–47%)
Physics: velocity/deceleration predicts hold vs break PASS as a predictor, WATCH as a trading signal Strong, stable in all 3 splits (slow approach: hold 61/51/57%; fast: 25/36/29%). But most of it is generic momentum: random levels show the same pattern (slow 49%, fast 30%). The day-low/high level adds ~+10pp only on slow/decelerating approaches
Slow + decelerating approach → buy the bounce WATCH (prediction only), FAIL as an option buy Hold 64% / 58% / 68% (train/tune/test) vs 50% random; but option P&L −₹296 / −₹258 / −₹49 per trade (30m)
Fast + accelerating approach → trade the break instead FAIL Breaks 80%+ of the time, but the break trade nets ≈₹0 train, −₹294 tune, −₹312 test
Fast rebound off the level (reject entry) FAIL (2026-only) Test +₹76/trade n=100, but train −₹293, tune −₹252 — not stable

Setup (no lookahead)

Main results (X=10, Y=20 most representative; full table main_vs_placebo.csv, grid.csv)

cfg split n hold (Wilson 95%) placebo hold ₹/trade 30m placebo ₹ t vs placebo
X10 Y20 touch train 914 45% (42–48) 52% −266 −175 −3.0
X10 Y20 touch tune 291 45% (39–51) 47% −283 −171 −1.8
X10 Y20 touch test 252 42% (36–48) 44% −160 −188 +0.4
X10 Y20 reject train 775 53% (49–56) 54% −281 −191 −2.7
X10 Y20 reject tune 245 54% (47–60) 51% −316 −174 −2.1
X10 Y20 reject test 208 49% (42–56) 47% −106 −210 +1.3

Every variant (X5/10 × Y20/40 × touch/reject × 15/30/60m) is negative in every split. Costs+slip are ~2.8 premium pts/trade; the gross move after a retest is ~zero to slightly negative, so costs decide it.

Velocity / deceleration (the physics idea) — X10 Y20 touch, tercile cut-offs fixed on train

v5 = pts/min toward the level over last 5 bars (train terciles at 2.34 / 4.69); decel = velocity over bars −7..−2 minus last 2 bars (positive = slowing). | bucket | train hold | tune hold | test hold | random-level hold | |---|---|---|---|---| | slow approach | 61% (n305) | 51% (72) | 57% (69) | 49% | | fast approach | 25% (305) | 36% (124) | 29% (101) | 30% | | decelerating | 57% (305) | 56% (97) | 57% (90) | 47% | | accelerating | 32% (305) | 33% (120) | 28% (89) | 36% | | slow + decel | 64% (151) | 58% (38) | 68% (38), CI 53–81% | 50% | | fast + accel | 20% (187) | 27% (79) | 18% (56) | 32% |

Satya's intuition is right about direction: fast approach → break, decelerating → bounce, and it holds out of sample. Correlation with hold (train): v5 −0.27, decel +0.24, distance travelled −0.21, day range −0.19; time of day and level age ≈0. But the bounce after a "hold" is too small/slow to beat ATM option costs + theta + the 20-pt stop on losers.

Rule worth watching (not trading)

Slow-decel day-low/high retest: level ≥30 min old, price moved ≥20 pts away, retest within 10 pts between 09:45–14:45, 5-bar approach speed in the slowest third (≤ 2.34 pts/min) AND decelerating (decel ≥ -1.89). Expect ~60–68% holds vs ~50% random. As a long ATM option for 30m it still lost money in all three periods (2026: −₹49/trade, n=38). Possible uses: a filter to avoid fading fast moves into the day low/high, or a candidate for a cheaper instrument (futures, or selling premium) — not tested here.

Honest limits

Files: analyze.py, phase2.py, phase3.py, grid.csv, main_vs_placebo.csv, velocity.csv, placebo_velocity.csv, break_trade.csv, real_premium_check.csv, events_main.csv, events_reject.csv.