STRASMORE/EXPLORE 2,173 QUERIES

session_clock

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 21×3read in context →
session_clock — 21 rows by 3 columns, computed from US exchange, SIP and OPRA data.
et_timecontracts_millionsshare_pct
07:0000
07:3000
08:0000
08:3000
09:0000
09:3033.4313.32
10:0028.5411.37
10:3024.569.79
11:0021.78.65
11:3018.757.47
12:0015.536.19
12:3013.825.5
13:0014.165.64
13:3013.335.31
14:0014.585.81
14:3013.155.24
15:0015.476.16
15:3021.678.63
16:002.260.9
16:300.040.02
17:0000
Rows × columns
21 × 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 session_clock, derived from the stored result.
ColumnTypeRangeNotes
et_time date 07:00 to 17:00
contracts_millions number 0 to 33.43 count
share_pct number 0 to 13.32 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
            intDiv(
                toHour(toTimeZone(window_start, 'America/New_York')) * 60
              + toMinute(toTimeZone(window_start, 'America/New_York')), 30) * 30 AS bucket_minute,
            sum(volume)                                                          AS contracts
        FROM global_markets.options_minute_aggs
        WHERE window_start >= today() - 12
          AND window_start <  today() - 2
        GROUP BY bucket_minute
    ),
    shares AS
    (
        SELECT
            bucket_minute,
            contracts,
            round(100 * contracts / sum(contracts) OVER (), 2) AS share_pct
        FROM tape
    )
SELECT
    formatDateTime(toDateTime('2026-01-01 00:00:00') + grid.bucket_minute * 60, '%H:%i') AS et_time,
    round(ifNull(s.contracts, 0) / 1000000, 2)                                           AS contracts_millions,
    ifNull(s.share_pct, 0)                                                               AS share_pct
FROM
(
    SELECT 420 + 30 * arrayJoin(range(21)) AS bucket_minute
) AS grid
LEFT JOIN shares AS s ON s.bucket_minute = grid.bucket_minute
ORDER BY grid.bucket_minute

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
spy_open_ramp series 46×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 →