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

3,293 answered market questions

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

Full options quote history: clean NBBO bid/ask snapshots for any US option contract at the interval you choose, by SQL API, $79 a month. See the options quotes plan
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.
The 7% Sell Rule Explained: O'Neil's Stop-Loss
Position size allowed by a $500 risk budget at each stop distanceranking · 2026-09-12 · 3×2Preview: 3 ranked values, largest first. Gain needed to get back to even after a lossranking · 2026-09-12 · 6×3Preview: 6 ranked values, smallest first.
Volume and range coverage by half hour of the session, 2023 to 2025

Volume and range coverage by half hour of the session, 2023 to 2025

most recentas of series 13×3read in context →
Volume and range coverage by half hour of the session, 2023 to 2025 — 13 rows by 3 columns, computed from US exchange, SIP and OPRA data.
et_timevolume_share_pctrange_share_pct
09:3015.554.5
10:009.838.1
10:30831.5
11:00727.6
11:30624.7
12:005.422.6
12:304.921.3
13:00521.6
13:304.920.8
14:005.421.7
14:305.520.6
15:006.521
15:3015.929.1
the exact SQL behind every number
WITH bars AS (
    SELECT
        ticker,
        toDate(toTimeZone(window_start, 'America/New_York'))            AS trade_day,
        toHour(toTimeZone(window_start, 'America/New_York')) * 60
            + toMinute(toTimeZone(window_start, 'America/New_York'))    AS et_minute,
        high,
        low,
        volume
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'QQQ', 'AAPL', 'MSFT', 'NVDA', 'KO')
      AND window_start >= '2023-01-01'
      AND window_start <  '2026-01-01'
),
regular AS (
    SELECT *
    FROM bars
    WHERE et_minute >= 570 AND et_minute < 960
),
day_totals AS (
    SELECT
        ticker,
        trade_day,
        max(high)   AS day_high,
        min(low)    AS day_low,
        sum(volume) AS day_volume,
        count()     AS bar_count
    FROM regular
    GROUP BY ticker, trade_day
    HAVING bar_count >= 300
       AND day_high > day_low
       AND day_volume > 0
),
half_hours AS (
    SELECT
        ticker,
        trade_day,
        intDiv(et_minute - 570, 30) AS bucket,
        max(high)                   AS bucket_high,
        min(low)                    AS bucket_low,
        sum(volume)                 AS bucket_volume
    FROM regular
    GROUP BY ticker, trade_day, bucket
)
SELECT
    formatDateTime(toDateTime((570 + h.bucket * 30) * 60, 'UTC'), '%H:%i') AS et_time,
    round(avg(100 * toFloat64(h.bucket_volume) / toFloat64(d.day_volume)), 1) AS volume_share_pct,
    round(avg(100 * toFloat64(h.bucket_high - h.bucket_low)
                  / toFloat64(d.day_high - d.day_low)), 1)                   AS range_share_pct
FROM half_hours AS h
INNER JOIN day_totals AS d
    ON d.ticker = h.ticker AND d.trade_day = h.trade_day
GROUP BY h.bucket
ORDER BY h.bucket
$