STRASMORE/EXPLORE 3,293 QUERIES

session_shape

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

as of series 14×4read in context →
session_shape — 14 rows by 4 columns, computed from US exchange, SIP and OPRA data.
wat_timeet_timeshare_of_volume_pctavg_volume_m
14:3009:3014.7733
15:0010:008.8619.8
15:3010:307.1416
16:0011:006.4514.4
16:3011:305.5912.5
17:0012:005.1911.6
17:3012:304.7310.6
18:0013:004.4710
18:3013:304.189.3
19:0014:004.4810
19:3014:304.7410.6
20:0015:005.7212.8
20:3015:3013.6230.4
21:0016:004.9911.1
Rows × columns
14 × 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 session_shape, derived from the stored result.
ColumnTypeRangeNotes
wat_time text 14 distinct values (14:30, 15:00, 15:30…)
et_time text 14 distinct values (09:30, 10:00, 10:30…)
share_of_volume_pct number 4.18 to 14.77 percent
avg_volume_m number 9.3 to 33 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 bars AS
(
    SELECT
        toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
        toHour(toTimeZone(window_start, 'America/New_York')) * 60
            + toMinute(toTimeZone(window_start, 'America/New_York')) AS et_minute_of_day,
        toStartOfInterval(window_start, INTERVAL 30 MINUTE)  AS bucket_ts,
        volume
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA')
      AND window_start >= '2026-06-01 00:00:00'
      AND window_start <  '2026-10-01 00:00:00'
),
tape_day AS
(
    SELECT sum(volume) AS full_day_volume FROM bars
)
SELECT
    formatDateTime(toTimeZone(min(bucket_ts), 'Africa/Lagos'), '%H:%i')     AS wat_time,
    formatDateTime(toTimeZone(min(bucket_ts), 'America/New_York'), '%H:%i') AS et_time,
    round(sum(volume) / (SELECT full_day_volume FROM tape_day) * 100, 2)    AS share_of_volume_pct,
    round(sum(volume) / countDistinct(session_date) / 1000000, 1)           AS avg_volume_m
FROM bars
WHERE et_minute_of_day >= 570
  AND et_minute_of_day <  990
GROUP BY intDiv(et_minute_of_day, 30)
ORDER BY intDiv(et_minute_of_day, 30)
⌘/Ctrl + Enter

Use dis data for your AI assistant

E go open ready to query, with dis page data. Free, no account.