STRASMORE/EXPLORE 3,293 QUERIES
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

Relative volume screener: top 20 by time adjusted RVOL at 11:00 a.m. ET

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-11-07, from Relative Volume Screener in SQL: Free API.

as of table 20×5read in context →
Relative volume screener: top 20 by time adjusted RVOL at 11:00 a.m. ET — 20 rows by 5 columns, computed from US exchange, SIP and OPRA data.
tickerrvol_time_adjustedrvol_naivevolume_mm_by_1100screen_asof
DKNG9.832.2523.28Nov 6
SOXX5.821.9723.19Nov 6
MCHP5.651.3912.99Nov 6
U3.120.98.55Nov 6
CORZ3.030.8813.58Nov 6
COMP2.910.566.65Nov 6
SPDN2.690.9850.69Nov 6
LYFT2.680.686.11Nov 6
SOXL2.671.07119.32Nov 6
VEA2.550.666.56Nov 6
WULF2.460.7835.39Nov 6
VXX2.430.712.16Nov 6
AAOI2.320.859.2Nov 6
IEFA2.270.554.34Nov 6
AMD2.240.8818.23Nov 6
RIOT2.220.7414.96Nov 6
IREN2.060.8343.48Nov 6
ASTS2.050.7612.69Nov 6
SPXU2.050.66.12Nov 6
IEMG2.040.657.71Nov 6
Rows × columns
20 × 5
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 Relative volume screener: top 20 by time adjusted RVOL at 11:00 a.m. ET, derived from the stored result.
ColumnTypeRangeNotes
ticker text 20 distinct values (AAOI, AMD, ASTS…)
rvol_time_adjusted number 2.04 to 9.83
rvol_naive number 0.55 to 2.25
volume_mm_by_1100 number 4.34 to 119.32 count
screen_asof text 1 distinct value (Nov 6)

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
    liquid AS (
        SELECT ticker
        FROM global_markets.stocks_daily_aggs
        WHERE date > today() - 45
          AND ticker NOT IN ('SPCX')
        GROUP BY ticker
        HAVING avg(volume) >= 10000000
           AND min(close) >= 5
    ),
    sessions AS (
        SELECT date
        FROM global_markets.stocks_daily_aggs
        WHERE ticker = 'SPY'
          AND date > today() - 45
        ORDER BY date DESC
        LIMIT 21
    ),
    bars AS (
        SELECT
            ticker,
            toDate(et_ts)                        AS session_date,
            toHour(et_ts) * 60 + toMinute(et_ts) AS et_min,
            toFloat64(volume)                    AS vol
        FROM
        (
            SELECT
                ticker,
                toTimeZone(window_start, 'America/New_York') AS et_ts,
                volume
            FROM global_markets.delayed_stocks_minute_aggs
            WHERE ticker IN (SELECT ticker FROM liquid)
              AND window_start >= toDateTime(today() - 45)
        )
        WHERE session_date IN (SELECT date FROM sessions)
    ),
    totals AS (
        SELECT
            ticker,
            session_date,
            sumIf(vol, et_min >= 570 AND et_min < 660) AS vol_by_1100,
            sumIf(vol, et_min >= 570 AND et_min < 960) AS vol_day,
            maxIf(et_min, et_min < 960)                AS last_min
        FROM bars
        GROUP BY ticker, session_date
    ),
    (
        SELECT session_date
        FROM totals
        GROUP BY session_date
        HAVING countIf(last_min >= 955) >= 100
        ORDER BY session_date DESC
        LIMIT 1
    ) AS asof
SELECT
    ticker,
    round(maxIf(vol_by_1100, session_date = asof) / avgIf(vol_by_1100, session_date < asof), 2) AS rvol_time_adjusted,
    round(maxIf(vol_by_1100, session_date = asof) / avgIf(vol_day, session_date < asof), 2)     AS rvol_naive,
    round(maxIf(vol_by_1100, session_date = asof) / 1e6, 2)                                    AS volume_mm_by_1100,
    formatDateTime(asof, '%b %e')                                                              AS screen_asof
FROM totals
GROUP BY ticker
HAVING countIf(session_date < asof) >= 18
   AND maxIf(last_min, session_date = asof) >= 955
   AND avgIf(vol_by_1100, session_date < asof) > 0
ORDER BY rvol_time_adjusted DESC
LIMIT 20
⌘/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 analysisRelative Volume Screener in SQL: Free API
Share of a session's volume completed by each half hour: SPY and KO series 13×3 → Cisco, September 22, 2026: naive RVOL against time adjusted RVOL through the session series 13×3 → Share of the session completed by 11:00 a.m. ET, twelve household names ranking 12×3 → The covered call screen, ranked by annualised yield, last session of August 2026 table 12×8 → AAPL call premium yield by delta band, August 2026 table 6×5 → SPY: median shares traded per minute, by 30-minute clock bucket (ET, last 30 days, extended hours) series 32×2 → See all 3,293 queries →