Markets: A Rigorous Course

4A.4 Gaps

Core about 10 min

Motivation

India is closed for about 17.75 hours between sessions while the US, Europe, crude oil and GIFT Nifty trade. A large part of Nifty's daily variance arrives overnight and shows up at the open as a gap. Gaps decide whether stops fill near their trigger, and "gap fill" is one of the oldest trading claims.

4A.4.1Gap fills under a random walk#

Definition 4A.6gap and fill

The gap on day tt is gt=ln⁡(Ot/Ct−1)g_t=\ln(O_t/C_{t-1}). It is a full gap up if Ot>Ht−1O_t>H_{t-1}. An up-gap (gt>0g_t>0) is filled on day tt if Lt≤Ct−1L_t\le C_{t-1}; a down-gap is filled if Ht≥Ct−1H_t\ge C_{t-1}.

Proposition 4A.4fill probability under a random walk

If, after the open, the intraday log price is a driftless Brownian motion with session volatility σin\sigma_{in}, then the probability that a gap of size gg is filled within the session is

P(fill)=2Φ ⁣(−∣g∣σin),(4A.4)P(\text{fill})=2\Phi\!\left(-\frac{|g|}{\sigma_{in}}\right), \tag{4A.4}

and the probability that an up-gap day closes below the previous close is Φ(−g/σin)\Phi(-g/\sigma_{in}).

Proof

Filling an up-gap means the intraday minimum of σinWs\sigma_{in}W_s, s∈[0,1]s\in[0,1], falls to −g-g; by the reflection principle P(min⁡W≤−g/σin)=2Φ(−g/σin)P(\min W\le -g/\sigma_{in})=2\Phi(-g/\sigma_{in}). Closing below the previous close means σinW1<−g\sigma_{in}W_1<-g.∎

So small gaps are filled most of the time by noise alone, and a gap of one intraday standard deviation is filled 32% of the time. "Gaps get filled" is true and uninformative unless the fill rate beats (4A.4).

4A.4.2Nifty gap statistics#

Worked example 4A.3Nifty gap statistics, 2011–2026

From Yahoo ^NSEI daily bars, 1 Feb 2011 to 4 Nov 2026 (3,866 days; computed for this module, script in the course repository's scratch work; Yahoo's index opens were checked for the stale-open artefact where the open equals the previous close, which affects under 1% of days, almost all before 2011):

  • Gap standard deviation 0.625%, mean +0.102%; close-to-close standard deviation 1.038%. Overnight returns account for 36% of daily variance. The correlation between the gap and the subsequent open-to-close return is −0.04.
  • ∣g∣>0.5%|g|>0.5\% on 25.2% of days; ∣g∣>1%|g|>1\% on 6.9%; ∣g∣>2%|g|>2\% on 1.6%.
  • Fill rates against the model (4A.4), with σin\sigma_{in} the trailing 20-day Parkinson estimate (no look-ahead):
∣g∣/σin\lvert g\rvert/\sigma_{in} days actual fill rate random-walk prediction
0–0.25 1,285 87.3% 90.2%
0.25–0.5 1,024 72.4% 71.2%
0.5–1.0 1,058 49.1% 48.5%
1.0–1.5 324 28.7% 23.9%
1.5–2.5 126 19.8% 7.0%
above 2.5 47 8.5% 0.3%

Up to one intraday standard deviation, the random walk predicts fill rates almost exactly. Large gaps fill far more often than the model says. The main reason is not mean reversion but volatility: on days with ∣g∣>1.5σin|g|>1.5\sigma_{in}, that day's own Parkinson volatility averaged 1.31 times the trailing estimate. Big gaps arrive on news days, and news days are volatile in both directions. Conditional on a large gap, use a higher intraday volatility, not a reversal story.

Practitioner notes

  • Stops and gaps. A stop is a promise about the trigger, not the fill. A stop-loss market order triggered by a gap fills at the open or worse. Over 2011–2026, 1.6% of Nifty days gapped by more than 2%; for single stocks around results (M06A) the gap distribution is much wider. Size positions on the loss at a plausible gap, not at the stop (4A.12, Case 2).
  • Gaps and stop placement. A stop placed inside the typical overnight range (about ±0.6%\pm0.6\% for Nifty) is hit by gaps alone on a large fraction of days.
  • GIFT Nifty (4A.11) trades through most of the Indian night, so its level at 09:00 is the market's estimate of the gap before the pre-open auction sets it.

Data lab Open on OI Charts (opens in a new tab)

Nifty opening gaps and gap fills

The gap is gt=ln⁡(Ot/Ct−1)g_t = \ln(O_t/C_{t-1}). An up-gap is filled on day tt if Lt≤Ct−1L_t \le C_{t-1}, a down-gap if Ht≥Ct−1H_t \ge C_{t-1} (Definition 4A.6). Each day's gap is measured against σin\sigma_{in}, the trailing 20-day Parkinson estimate of intraday volatility computed only from earlier days, and the fill rate is compared with the random-walk prediction 2Φ(−∣g∣/σin)2\Phi(-|g|/\sigma_{in}) of Proposition 4A.4. Days whose open equals the previous close (stale index opens) are excluded. Worked example 4A.3 reports the same table for 1 Feb 2011 to 4 Nov 2026.

What to look at

  • The bar chart: for gaps up to one intraday standard deviation the random walk predicts the fill rate almost exactly. Large gaps fill more often than predicted.
  • The share of daily variance that arrives overnight, and the correlation between the gap and the rest of the session.

Questions

  1. Do your numbers reproduce worked example 4A.3? Which statistics have moved since 4 Nov 2026, and by how much relative to their sampling error?
  2. The notes attribute the excess fill rate of large gaps to higher volatility on news days, not to reversal. What does the scatter of gap against open-to-close return say about reversal? Propose a test that separates the two explanations using the day's own Parkinson volatility.
  3. A stop placed 0.5% below a long entry at the previous close: on what fraction of days would the gap alone carry the price through it?
  4. "Gaps get filled" is true. Explain why, by Proposition 4A.4, it is not a trading edge.

Create a free account

Reading is open to everyone. An account keeps your progress, answers, notes and code drafts, and gives you the study plan, the journals and the simulator. Running code needs an account approved for it.