gaps-get-filled / cursor-composer-2 / gapfill-sandbox

Do “gaps get filled” on U.S. large caps?

This page is generated from committed backtest output. It is meant to be opened as a static file (no server). Charts load Chart.js from a CDN; all series data are inlined below.

The folklore mostly survives — the naive fade mostly does not.

On this S&P 500 sample, a large majority of strict gaps eventually trade back through the prior session's extreme within a couple of months. That is the empirical content of gaps get filled. The companion fade rule, though, loses far more often than it wins: stops fire constantly, many fills arrive only after the time stop, and the payoff is skewed. A positive mean return can hide a strategy you would not want to sit through.

Universe

sp500
2016-04-20 → 2026-04-20

Strict gap filter

≥ 0.5%
of mid-price between sessions

Gap events detected

38,937
Across cached daily bars

Mean / σ per trade

0.18
Not annualized — overlapping events across names/dates

Definitions (what we measured)

  1. Strict range gap: for the prior daily bar’s high H₁ and low L₁, a gap up is a day whose low L₂ > H₁; a gap down is H₂ < L₁. We require the gap’s absolute size to exceed 0.5% of the midpoint between the two sessions’ touching prices to drop micro-gaps.
  2. Fill: for an up-gap, filled when a future daily low trades at or below H₁; for a down-gap, when a future daily high reaches L₁. Only full daily bars after the gap day.
  3. Naive trade: enter at the next session’s open in the fade direction; stop at 0.5× the gap size against the position; exit at 5 calendar trading days if neither stop nor fill level hits.

Fill rates by horizon

Share of gaps that touched the gap edge within N trading days (exclusive of the gap day).

HorizonFill rate
1 trading day16.7%
5 trading days43.7%
20 trading days65.4%
60 trading days78.6%

Trade performance

Win rate 33.7% · mean return per trade 0.465% (simple, not compounded). Exit mix: {"stop": 24531, "target_fill": 11717, "time_stop": 2689}

Cumulative trade P&L index (sum of per-trade % moves)

Distribution of per-trade returns (%)

Generated by gapfill present · Run sp500_10y_default · Strategies registered: ["gap_fill", "naive_momentum_stub"]