STRASMORE/EXPLORE 2,767 QUERIES

liquidity_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-09-29, from us-stock-market-hours-uae-time.

as of ranking 16×4read in context →
liquidity_by_hour — 16 rows by 4 columns, computed from US exchange, SIP and OPRA data.
et_hour_labelgst_hour_labelavg_volume_millionsvolume_share_pct
04:0012:000.10.23
05:0013:000.040.11
06:0014:000.060.15
07:0015:000.190.46
08:0016:000.441.05
09:0017:004.199.87
10:0018:005.312.49
11:0019:004.9911.76
12:0020:003.267.69
13:0021:002.997.05
14:0022:004.4310.45
15:0023:0010.1924.02
16:0000:005.713.44
17:0001:000.410.96
18:0002:000.080.19
19:0003:000.040.1
Rows × columns
16 × 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 liquidity_by_hour, derived from the stored result.
ColumnTypeRangeNotes
et_hour_label text 16 distinct values (04:00, 05:00, 06:00…)
gst_hour_label text 16 distinct values (00:00, 01:00, 02:00…)
avg_volume_millions number 0.04 to 10.19 count
volume_share_pct number 0.1 to 24.02 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 bars AS
(
    SELECT
        toTimeZone(window_start, 'America/New_York') AS et_ts,
        toTimeZone(window_start, 'Asia/Dubai')       AS gst_ts,
        toHour(et_ts)                                AS et_hour,
        toHour(gst_ts)                               AS gst_hour_of_day,
        toDate(et_ts)                                AS et_date,
        toFloat64(volume)                            AS share_volume
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-09-01 04:00:00', 'UTC')
      AND window_start <  toDateTime('2026-09-26 04:00:00', 'UTC')
),
hourly AS
(
    SELECT
        et_hour,
        any(gst_hour_of_day) AS gst_hour,
        sum(share_volume)    AS hour_volume
    FROM bars
    WHERE et_hour BETWEEN 4 AND 19
    GROUP BY et_hour
),
sess AS
(
    SELECT countDistinct(et_date) AS n FROM bars
),
totals AS
(
    SELECT sum(hour_volume) AS window_volume FROM hourly
)
SELECT
    formatDateTime(toDateTime(et_hour * 3600, 'UTC'), '%H:%i')       AS et_hour_label,
    formatDateTime(toDateTime(gst_hour * 3600, 'UTC'), '%H:%i')      AS gst_hour_label,
    round(hour_volume / (SELECT n FROM sess) / 1e6, 2)               AS avg_volume_millions,
    round(100 * hour_volume / (SELECT window_volume FROM totals), 2) AS volume_share_pct
FROM hourly
ORDER BY et_hour
⌘/Ctrl + Enter

Work with this data in your AI assistant

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

More from this analysisus-stock-market-hours-uae-time
session_share_by_ticker ranking 5×4 → us_closures_gst series 12×6 → gst_session_clock table 10×7 → Top 25 weekly-options underlyings by distinct contracts traded, with expiration weekdays ranking 25×4 → Annualized volatility vs total return, 25 large caps, calmest to wildest (~2 years) ranking 25×3 → SPY options median spread by expiration date, near-the-money strikes only ranking 25×4 → See all 2,767 queries →