STRASMORE/EXPLORE 2,830 QUERIES

open_gap_curve

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-09-30, from asx-options-expiry-and-settlement.

as of series 31×2read in context →
open_gap_curve — 31 rows by 2 columns, computed from US exchange, SIP and OPRA data.
et_timeavg_gap_bps
09:305.7
09:317.4
09:328.2
09:339.4
09:3410.2
09:3511.1
09:3611.5
09:3712.1
09:3812.3
09:3912.9
09:4012.5
09:4113.3
09:4214.1
09:4314.3
09:4414.9
09:4515.5
09:4616
09:4716.5
09:4816.5
09:4916.8
09:5017.6
09:5117.9
09:5217.9
09:5318.4
09:5418.5
09:5518.8
09:5619.3
09:5720
09:5821.1
09:5921.5
10:0021.3
Rows × columns
31 × 2
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 open_gap_curve, derived from the stored result.
ColumnTypeRangeNotes
et_time text 31 distinct values (09:30, 09:31, 09:32…)
avg_gap_bps number 5.7 to 21.5

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 session_open AS (
    SELECT
        toDate(toTimeZone(window_start, 'America/New_York')) AS session_day,
        argMin(toFloat64(open), window_start)                AS first_print
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= today() - 300
      AND window_start <  today() - 2
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) <  960
    GROUP BY session_day
)
SELECT
    formatDateTime(toTimeZone(m.window_start, 'America/New_York'), '%H:%i') AS et_time,
    round(avg(abs(toFloat64(m.close) / s.first_print - 1) * 10000), 1)      AS avg_gap_bps
FROM global_markets.delayed_stocks_minute_aggs AS m
INNER JOIN session_open AS s
    ON toDate(toTimeZone(m.window_start, 'America/New_York')) = s.session_day
WHERE m.ticker = 'SPY'
  AND m.window_start >= today() - 300
  AND m.window_start <  today() - 2
  AND (toHour(toTimeZone(m.window_start, 'America/New_York')) * 60
       + toMinute(toTimeZone(m.window_start, 'America/New_York'))) BETWEEN 570 AND 600
  AND s.first_print > 0
GROUP BY et_time
HAVING count() > 0
ORDER BY et_time
⌘/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 analysisasx-options-expiry-and-settlement
expiry_morning_trace series 61×2 → first_print_drift ranking 8×2 → The 2s10s spread by month, full history series 604×5 → One SPY $600 LEAPS call's price over two years (expired Jan 16 2026) series 470×2 → The 5s30s spread month by month, with both legs series 241×4 → 5s30s and 2s10s, monthly averages over 20 years series 241×3 → See all 2,830 queries →