STRASMORE/EXPLORE 3,256 QUERIES

Between-session gaps on four equity index ETFs, 2015 to date

Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-10-09, from Futures Price Limits and Price Banding.

as of table 4×5read in context →
Between-session gaps on four equity index ETFs, 2015 to date — 4 rows by 5 columns, computed from US exchange, SIP and OPRA data.
symbolsample_sizemedian_gap_pctp99_gap_pctlargest_gap_pct
IWM29340.3813.529.08
QQQ29400.3763.129.46
DIA29400.2872.6711.03
SPY29450.2912.610.45
Rows × columns
4 × 5
Computed
Completeness
No missing values
Source
US exchange, SIP and OPRA market data
Licence
Strasmore terms · free, no signup
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for Between-session gaps on four equity index ETFs, 2015 to date, derived from the stored result.
ColumnTypeRangeNotes
symbol text 4 distinct values (DIA, IWM, QQQ…)
sample_size number 2,934 to 2,945
median_gap_pct number 0.287 to 0.381 percent
p99_gap_pct number 2.6 to 3.52 percent
largest_gap_pct number 9.08 to 11.03 percent

Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.

Run it yourself

This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.

WITH
    daily AS
    (
        SELECT
            ticker,
            date,
            any(open)  AS session_open,
            any(close) AS session_close
        FROM global_markets.stocks_daily_aggs
        WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
          AND date >= '2015-01-01'
          AND date <  '2026-10-01'
        GROUP BY ticker, date
    ),
    gaps AS
    (
        SELECT
            ticker,
            date,
            abs(toFloat64(session_open)
                / any(toFloat64(session_close)) OVER (PARTITION BY ticker ORDER BY date ASC
                                                      ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
                - 1) AS gap
        FROM daily
    )
SELECT
    ticker                                                                       AS symbol,
    count()                                                                      AS sample_size,
    round(100 * quantileDeterministic(0.5)(gap, toUInt64(toYYYYMMDD(date))), 3)  AS median_gap_pct,
    round(100 * quantileDeterministic(0.99)(gap, toUInt64(toYYYYMMDD(date))), 2) AS p99_gap_pct,
    round(100 * max(gap), 2)                                                     AS largest_gap_pct
FROM gaps
WHERE isFinite(gap)
  AND gap > 0
GROUP BY ticker
ORDER BY p99_gap_pct DESC
⌘/Ctrl + Enter

Work with this data in your AI assistant

Opens ready to query, with this page's data. Free, no account.

More from this analysisFutures Price Limits and Price Banding
Share of S&P 500 ETF sessions opening 1% or 2% from the prior close, by year table 12×5 → S&P 500 ETF path on August 5, 2024, measured against the prior close series 39×3 → Typical and tail one-minute moves in the S&P 500 ETF, by half hour of the session series 13×3 → Worked P&L examples: ticks moved x tick value x contracts (hypothetical) table 7×5 → SPY typical and largest daily move, month by month since 2019 series 91×4 → Short term Treasury yields, the reference a stock margin loan is priced off series 91×4 → See all 3,256 queries →