STRASMORE/EXPLORE 3,256 QUERIES 22Y EQUITIES · 12Y OPTIONS

3,256 answered market questions

every one with its exact SQL, its result and the date it was computed · free, no signup

Why Trading Volume Dies at Midday: U-Shape
Share of regular-session volume by half hour, SPY and AAPLseries · 2026-09-28 · 13×3Preview: a 13-point series, ending lower. Average one-minute SPY range in basis points, by half hourseries · 2026-09-28 · 13×3Preview: a 13-point series, ending lower. SPY open, midday and close volume against an average minute, by yearranking · 2026-09-28 · 8×4Preview: 8 ranked values, smallest first. Open, midday and close volume against an average session minuteranking · 2026-09-28 · 6×4Preview: 6 ranked values, smallest first.
The 10:00 AM Rule in Stocks, Tested
Volume and range coverage by half hour of the session, 2023 to 2025series · 2026-09-26 · 13×3Preview: a 13-point series, ending lower. Median quoted spread by five minute bucket, SPY and AAPL, 10 March 2026series · 2026-09-26 · 12×3Preview: a 12-point series, ending lower. First 30 minutes: share of the day's range and volume, 2023 to 2025ranking · 2026-09-26 · 6×3Preview: 6 ranked values, largest first. Average one minute range by ET clock minute, 09:30 to 10:59series · 2026-09-26 · 90×3Preview: a 16-point series, roughly flat. Session coverage behind the long-run panelsranking · 2026-09-26 · 6×4Preview: 6 ranked values, largest first.
When Do 0DTE Options Trade? By the Hour
Same-day share of options volume by weekday: all sessions, June 1 to July 10, 2026series · 2026-08-13 · 5×5Preview: a 5-point series, ending higher. Median bid-ask spread on SPY same-day contracts quoted $1-$10, by ET hour: July 10, 2026ranking · 2026-08-13 · 7×4Preview: 7 ranked values, largest first. What the last hour trades: same-day volume by premium paid, 10am hour vs. closing hour, July 10, 2026ranking · 2026-08-13 · 5×4Preview: 5 ranked values, largest first. 0DTE contract volume, share of all options volume, and flow rate by ET hour: Friday, July 10, 2026table · 2026-08-13 · 7×5 Same-day calls vs. puts by ET hour, and the put share of 0DTE volume: July 10, 2026ranking · 2026-08-13 · 7×4Preview: 7 ranked values, largest first. Same-day options volume by underlying: the ten heaviest names, July 10, 2026table · 2026-08-13 · 10×5
Share of regular-session volume by half hour, SPY and AAPL

Share of regular-session volume by half hour, SPY and AAPL

most recentas of series 13×3read in context →
Share of regular-session volume by half hour, SPY and AAPL — 13 rows by 3 columns, computed from US exchange, SIP and OPRA data.
et_timespy_pctaapl_pct
09:3012.1517.86
10:008.939.69
10:307.447.73
11:006.977.04
11:306.056.16
12:005.355.46
12:305.165.16
13:005.155.25
13:305.154.88
14:005.95.03
14:306.025.12
15:007.496.21
15:3018.2614.4
the exact SQL behind every number
WITH session_minutes AS
(
    SELECT
        ticker,
        formatDateTime(
            toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE),
            '%H:%i')                                                   AS et_time,
        toFloat64(volume)                                              AS share_volume
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'AAPL')
      AND window_start >= '2025-01-02 00:00:00'
      AND window_start <  '2026-07-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
),
by_bucket AS
(
    SELECT
        ticker,
        et_time,
        sum(share_volume) AS bucket_volume
    FROM session_minutes
    GROUP BY ticker, et_time
),
ticker_totals AS
(
    SELECT
        ticker,
        sum(bucket_volume) AS ticker_volume
    FROM by_bucket
    GROUP BY ticker
)
SELECT
    b.et_time                                                          AS et_time,
    round(100 * sumIf(b.bucket_volume, b.ticker = 'SPY')
          / max(if(t.ticker = 'SPY', t.ticker_volume, 0)), 2)          AS spy_pct,
    round(100 * sumIf(b.bucket_volume, b.ticker = 'AAPL')
          / max(if(t.ticker = 'AAPL', t.ticker_volume, 0)), 2)         AS aapl_pct
FROM by_bucket AS b
INNER JOIN ticker_totals AS t ON t.ticker = b.ticker
GROUP BY b.et_time
ORDER BY b.et_time
$