STRASMORE/EXPLORE 2,985 QUERIES

volume_by_hour

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

as of ranking 7×4read in context →
volume_by_hour — 7 rows by 4 columns, computed from US exchange, SIP and OPRA data.
manila_hournew_york_startshare_of_volume_pctavg_volume_millions
21:3009:3011.34.4
22:0010:00155.9
23:0011:0012.54.9
00:0012:0010.13.9
01:0013:009.43.7
02:0014:0011.84.6
03:0015:0029.911.7
Rows × columns
7 × 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_hour, derived from the stored result.
ColumnTypeRangeNotes
manila_hour text 7 distinct values (00:00, 01:00, 02:00…)
new_york_start text 7 distinct values (09:30, 10:00, 11:00…)
share_of_volume_pct number 9.4 to 29.9 percent
avg_volume_millions number 3.7 to 11.7 count

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_minutes AS
    (
        SELECT
            toTimeZone(window_start, 'Asia/Manila')      AS manila_time,
            toTimeZone(window_start, 'America/New_York') AS et_time,
            toFloat64(volume)                            AS vol
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY'
          AND window_start >= toDateTime('2026-06-01 00:00:00')
          AND window_start <  toDateTime('2026-10-01 00:00:00')
          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
    ),
    totals AS
    (
        SELECT
            sum(vol)                       AS all_vol,
            countDistinct(toDate(et_time)) AS sessions
        FROM session_minutes
    )
SELECT
    formatDateTime(min(s.manila_time), '%H:%i')  AS manila_hour,
    formatDateTime(min(s.et_time), '%H:%i')      AS new_york_start,
    round(100 * sum(s.vol) / any(t.all_vol), 1)  AS share_of_volume_pct,
    round(sum(s.vol) / any(t.sessions) / 1e6, 1) AS avg_volume_millions
FROM session_minutes AS s
CROSS JOIN totals AS t
GROUP BY (toHour(s.manila_time) + 3) % 24
ORDER BY (toHour(s.manila_time) + 3) % 24
⌘/Ctrl + Enter

Work with this data in your AI assistant

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