STRASMORE/EXPLORE 2,648 QUERIES

volume_by_slot

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-26, from us-market-volume-by-hour-beijing-time.

as of series 13×4read in context →
volume_by_slot — 13 rows by 4 columns, computed from US exchange, SIP and OPRA data.
et_timebeijing_timespy_share_pctqqq_share_pct
09:3021:3011.4114.29
10:0022:008.089.88
10:3022:307.098.39
11:0023:006.327.05
11:3023:306.376.8
12:0000:005.195.75
12:3000:304.765.44
13:0001:005.335.3
13:3001:305.295.4
14:0002:006.155.53
14:3002:306.115.7
15:0003:007.766.48
15:3003:3020.1413.99
Rows × columns
13 × 4
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 volume_by_slot, derived from the stored result.
ColumnTypeRangeNotes
et_time text 13 distinct values (09:30, 10:00, 10:30…)
beijing_time text 13 distinct values (00:00, 00:30, 01:00…)
spy_share_pct number 4.76 to 20.14 percent
qqq_share_pct number 5.3 to 14.29 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 session_bars AS
(
    SELECT
        ticker,
        volume,
        toTimeZone(window_start, 'America/New_York') AS et,
        toHour(et) * 60 + toMinute(et)               AS et_min,
        intDiv(et_min, 30) * 30                      AS slot
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'QQQ')
      AND window_start >= toDateTime('2026-04-01 04:00:00', 'UTC')
      AND window_start <  toDateTime('2026-07-01 04:00:00', 'UTC')
      AND et_min >= 570
      AND et_min <  960
)
SELECT
    formatDateTime(toDateTime(s.slot * 60, 'UTC'), '%H:%i')                  AS et_time,
    formatDateTime(toDateTime(((s.slot + 720) % 1440) * 60, 'UTC'), '%H:%i') AS beijing_time,
    round(100 * toFloat64(sumIf(s.volume, s.ticker = 'SPY')) / any(t.spy_total), 2) AS spy_share_pct,
    round(100 * toFloat64(sumIf(s.volume, s.ticker = 'QQQ')) / any(t.qqq_total), 2) AS qqq_share_pct
FROM session_bars AS s
CROSS JOIN
(
    SELECT
        toFloat64(sumIf(volume, ticker = 'SPY')) AS spy_total,
        toFloat64(sumIf(volume, ticker = 'QQQ')) AS qqq_total
    FROM session_bars
) AS t
GROUP BY s.slot
ORDER BY s.slot
⌘/Ctrl + Enter

Work with this data in your AI assistant

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