STRASMORE/EXPLORE 2,173 QUERIES

spy_open_ramp

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-08-26, from what-time-do-options-start-trading.

as of series 46×3read in context →
spy_open_ramp — 46 rows by 3 columns, computed from US exchange, SIP and OPRA data.
et_timecontract_volumeactive_pct
09:1500
09:1600
09:1700
09:1800
09:1900
09:2000
09:2100
09:2200
09:2300
09:2400
09:2500
09:2600
09:2700
09:2800
09:2900
09:3079450100
09:317850100
09:3226796100
09:3345414100
09:3415329100
09:3549108100
09:3618352100
09:3731470100
09:3820996100
09:3936490100
09:4042035100
09:4121718100
09:4228877100
09:4339642100
09:4435376100
09:4541167100
09:4640783100
09:4754856100
09:4829440100
09:4951570100
09:5028752100
09:5129558100
09:5231180100
09:5321258100
09:5420868100
09:5522009100
09:5634339100
09:5718496100
09:5825615100
09:5927794100
10:0035862100
Rows × columns
46 × 3
Period covered
to
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 spy_open_ramp, derived from the stored result.
ColumnTypeRangeNotes
et_time date 09:15 to 10:00
contract_volume number 0 to 79,450 count
active_pct number 0 to 100 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.

the exact SQL behind every number
WITH tape AS
(
    SELECT
        toHour(toTimeZone(window_start, 'America/New_York')) * 60
      + toMinute(toTimeZone(window_start, 'America/New_York'))              AS minute_of_day,
        countDistinct(toDate(toTimeZone(window_start, 'America/New_York'))) AS days_traded,
        sum(volume)                                                         AS contracts
    FROM global_markets.options_minute_aggs
    WHERE startsWith(ticker, 'O:SPY')
      AND length(ticker) = 20
      AND window_start >= today() - 12
      AND window_start <  today() - 2
    GROUP BY minute_of_day
)
SELECT
    formatDateTime(toDateTime('2026-01-01 00:00:00') + grid.minute_of_day * 60, '%H:%i')         AS et_time,
    toUInt64(round(ifNull(t.contracts, 0) / greatest((SELECT max(days_traded) FROM tape), 1)))   AS contract_volume,
    round(100 * ifNull(t.days_traded, 0) / greatest((SELECT max(days_traded) FROM tape), 1), 1)  AS active_pct
FROM
(
    SELECT 555 + arrayJoin(range(46)) AS minute_of_day
) AS grid
LEFT JOIN tape AS t ON t.minute_of_day = grid.minute_of_day
ORDER BY grid.minute_of_day

Run your own version of this

The same 22 years of US equities and 12 years of options data are queryable in SQL or plain English. A free account runs 100 queries a day and takes no card.

More from this analysiswhat-time-do-options-start-trading
session_clock series 21×3 early_closes series 2×6 One SPY $600 LEAPS call's price over two years (expired Jan 16 2026) series 470×2 2s10s spread, monthly average: last 20 years series 240×2 Growth of $100 in the 1x SOXX vs the 3x SOXL, Jan 2 to Jul 13 2026 series 131×3 SPY underwater curve: month end close against its running peak, 2016 to 2026 series 127×2 See all 2,173 queries →