Wetin Be Good Relative Volume? Di Real Numbers
Wetin be good relative volume? We count how often ordinary US sessions pass 1.5x, 2x and 5x RVOL, so you go sabi which reading rare before di New York open.
Wetin be good relative volume? Di honest answer na say "good" no be one fixed number, e be percentile. Relative volume (RVOL) dey compare di shares wey a ticker trade today with wetin dat same ticker normally trade, and di only thing wey make any reading interesting na how rare am be. Di formula itself, plus di parts wey dey confuse people, dey inside wetin be relative volume. Dis page na purely di distribution: how ordinary market days dey spread, and wetin 1.5x, 2x and 5x really mean once you count dem.
Wetin be good relative volume for true?
Make we count am instead of arguing. We take every US-listed name wey average pass two million shares a day, we look one year of sessions, and for each session we divide dat day volume by di average of di 20 sessions before am. Dat na di plain RVOL wey most screeners dey show you. Di panel below throw every one of those ticker-days inside bands.
| rvol_band | trading_days | share_of_days_pct |
|---|---|---|
| 1. under 0.5x | 45875 | 11.05 |
| 2. 0.5x to 1x | 214217 | 51.58 |
| 3. 1x to 1.5x | 106097 | 25.55 |
| 4. 1.5x to 2x | 27502 | 6.62 |
| 5. 2x to 3x | 13409 | 3.23 |
| 6. 3x to 5x | 4749 | 1.14 |
| 7. 5x and up | 3476 | 0.84 |
The exact SQL behind every number
WITH
dedup AS
(
SELECT
ticker,
date,
toFloat64(max(volume)) AS vol
FROM global_markets.stocks_daily_aggs
WHERE date >= today() - 400
AND ifNull(otc, 0) = 0
AND ticker NOT IN ('SPCX')
GROUP BY ticker, date
),
liquid AS
(
SELECT ticker
FROM dedup
GROUP BY ticker
HAVING avg(vol) >= 2000000
AND count() >= 220
),
rv AS
(
SELECT
date,
vol / avg(vol) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN 20 PRECEDING AND 1 PRECEDING) AS rvol
FROM dedup
WHERE ticker IN (SELECT ticker FROM liquid)
)
SELECT
multiIf(rvol < 0.5, '1. under 0.5x',
rvol < 1.0, '2. 0.5x to 1x',
rvol < 1.5, '3. 1x to 1.5x',
rvol < 2.0, '4. 1.5x to 2x',
rvol < 3.0, '5. 2x to 3x',
rvol < 5.0, '6. 3x to 5x',
'7. 5x and up') AS rvol_band,
count() AS trading_days,
round(100 * count() / sum(count()) OVER (), 2) AS share_of_days_pct
FROM rv
WHERE date >= today() - 370
AND isFinite(rvol)
GROUP BY rvol_band
ORDER BY rvol_bandStart from di quiet end. Sessions wey land between 1x and 1.5x na 25.55% of di year, 51.58% land between 0.5x and 1x, and another 11.05% come in under 0.5x. Meaning: a slow day no be strange event, e be normal life for di tape.
Now di busy end. Di 1.5x to 2x band carry 6.62% of sessions, 2x to 3x carry 3.23%, 3x to 5x carry 1.14%, and everything from 5x upward na 0.84%, wey work out to 3476 ticker-days inside di whole year. Add di last three bands together and you still dey holding a small slice of di calendar. Dat na di answer to di original question: 2x no be "good", 2x na rare. 5x na rarer. Di number dey measure rarity, e no dey award mark.
How plenty ordinary days dey pass 2x RVOL?
But rarity depend on which kind name you dey talk about. Di next panel drop di liquidity filter and group every ticker-day by di size of di ticker own 20-session average, from di names wey dey trade under 100k shares a day up to di ones wey dey pass 10 million.
| adv_tier | above_1_5x_pct | above_2x_pct | above_5x_pct |
|---|---|---|---|
| 1. under 100k shares | 17.57 | 11.13 | 2.87 |
| 2. 100k to 1m | 13.14 | 6.46 | 1.09 |
| 3. 1m to 10m | 11.08 | 4.78 | 0.62 |
| 4. over 10m shares | 9.66 | 3.87 | 0.45 |
The exact SQL behind every number
WITH
dedup AS
(
SELECT
ticker,
date,
toFloat64(max(volume)) AS vol
FROM global_markets.stocks_daily_aggs
WHERE date >= today() - 400
AND ifNull(otc, 0) = 0
AND ticker NOT IN ('SPCX')
GROUP BY ticker, date
),
rv AS
(
SELECT
date,
vol,
avg(vol) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN 20 PRECEDING AND 1 PRECEDING) AS avg20
FROM dedup
),
tiered AS
(
SELECT
multiIf(avg20 < 100000, '1. under 100k shares',
avg20 < 1000000, '2. 100k to 1m',
avg20 < 10000000, '3. 1m to 10m',
'4. over 10m shares') AS adv_tier,
vol / avg20 AS rvol
FROM rv
WHERE date >= today() - 370
AND avg20 >= 1000
)
SELECT
adv_tier,
round(100 * countIf(rvol >= 1.5) / count(), 2) AS above_1_5x_pct,
round(100 * countIf(rvol >= 2.0) / count(), 2) AS above_2x_pct,
round(100 * countIf(rvol >= 5.0) / count(), 2) AS above_5x_pct
FROM tiered
GROUP BY adv_tier
ORDER BY adv_tierFor di thinnest tier, di names wey dey average under 100k shares a day, 17.57% of sessions cross 1.5x, 11.13% cross 2x and 2.87% cross 5x. For di thickest tier, di names wey trade pass 10 million shares a day, di same three lines read 9.66%, 3.87% and 0.45%. Same 2x reading, different rarity for each tier.
Di share count tell di other half of di story. For a name wey only move 80,000 shares on a normal day, 2x mean about 80,000 extra shares, di kind size wey one single block trade fit cover by itself. For a name wey already dey printing 60 million shares, 2x mean tens of millions of extra shares pass through di tape, and plenty separate hands gatz show up for dat to happen. Di two sessions dey carry di same label and nothing else in common.
RVOL 2 for thin ticker no be RVOL 2 for SPY
Even inside household names di tail no be di same length. Di panel below take eight well-known tickers and, over di same trailing year, show di median session, di 90th percentile session and di 99th percentile session.
| ticker | median_rvol | p90_rvol | p99_rvol |
|---|---|---|---|
| MSFT | 0.92 | 1.47 | 3.1 |
| XOM | 0.94 | 1.34 | 2.61 |
| KO | 0.91 | 1.35 | 2.43 |
| AAPL | 0.92 | 1.41 | 2.42 |
| JNJ | 0.93 | 1.39 | 2.3 |
| SPY | 0.95 | 1.35 | 1.93 |
| NVDA | 0.93 | 1.27 | 1.82 |
| PG | 0.95 | 1.34 | 1.81 |
The exact SQL behind every number
WITH
dedup AS
(
SELECT
ticker,
date,
toFloat64(max(volume)) AS vol
FROM global_markets.stocks_daily_aggs
WHERE date >= today() - 400
AND ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'XOM', 'JNJ', 'PG')
GROUP BY ticker, date
),
rv AS
(
SELECT
ticker,
date,
vol / avg(vol) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN 20 PRECEDING AND 1 PRECEDING) AS rvol
FROM dedup
)
SELECT
ticker,
round(quantileDeterministic(0.5)(rvol, toUInt64(date)), 2) AS median_rvol,
round(quantileDeterministic(0.9)(rvol, toUInt64(date)), 2) AS p90_rvol,
round(quantileDeterministic(0.99)(rvol, toUInt64(date)), 2) AS p99_rvol
FROM rv
WHERE date >= today() - 370
AND isFinite(rvol)
GROUP BY ticker
ORDER BY p99_rvol DESCMSFT carry di widest tail of di eight: median session 0.92x, 90th percentile 1.47x, 99th percentile 3.1x. Di tightest one na PG, wey median sit at 0.95x and 99th percentile session stop at 1.81x.
Notice say di medians dey cluster near 1x, and dem dey lean to di low side of am. Volume dey skew: a handful of monster days dey pull di 20-day average up, and once di average sit above di typical day, plenty ordinary sessions go print under 1x. So 0.8x no mean di market die. E mean today resemble a normal Tuesday.
Di screening lesson hide inside di gap between di two rows. One flat RVOL cutoff across di whole market dey compare a 99th percentile day for one name with something near a 90th percentile day for another. Di cutoff look fair; wetin e dey select no fair.
Why di same session dey show two different RVOL
Di number also shift with di lookback window. Same ticker, same session, three denominators: di 5-session average, di 20-session average and di 50-session average. Di trace below pin AAPL for di second quarter of 2026, so di picture no go change under you.
| date | day_label | rvol_5d | rvol_20d | rvol_50d |
|---|---|---|---|---|
| 2026-04-01 | Apr 1 | 0.97 | 0.98 | 0.83 |
| 2026-04-02 | Apr 2 | 0.72 | 0.76 | 0.66 |
| 2026-04-06 | Apr 6 | 0.7 | 0.73 | 0.62 |
| 2026-04-07 | Apr 7 | 1.64 | 1.57 | 1.33 |
| 2026-04-08 | Apr 8 | 0.97 | 1.01 | 0.87 |
| 2026-04-09 | Apr 9 | 0.69 | 0.68 | 0.6 |
| 2026-04-10 | Apr 10 | 0.81 | 0.76 | 0.67 |
| 2026-04-13 | Apr 13 | 0.94 | 0.89 | 0.78 |
| 2026-04-14 | Apr 14 | 1.22 | 1.18 | 1.06 |
| 2026-04-15 | Apr 15 | 1.35 | 1.2 | 1.12 |
| 2026-04-16 | Apr 16 | 1.12 | 1.02 | 0.98 |
| 2026-04-17 | Apr 17 | 1.47 | 1.43 | 1.4 |
| 2026-04-20 | Apr 20 | 0.76 | 0.83 | 0.85 |
| 2026-04-21 | Apr 21 | 1.05 | 1.21 | 1.17 |
| 2026-04-22 | Apr 22 | 0.9 | 1.03 | 1.01 |
| 2026-04-23 | Apr 23 | 0.71 | 0.8 | 0.78 |
| 2026-04-24 | Apr 24 | 0.85 | 0.9 | 0.89 |
| 2026-04-27 | Apr 27 | 1.02 | 0.98 | 0.97 |
| 2026-04-28 | Apr 28 | 0.97 | 0.96 | 0.96 |
| 2026-04-29 | Apr 29 | 0.76 | 0.71 | 0.72 |
The exact SQL behind every number
SELECT
toString(d) AS date,
formatDateTime(d, '%b %e') AS day_label,
round(vol / avg5, 2) AS rvol_5d,
round(vol / avg20, 2) AS rvol_20d,
round(vol / avg50, 2) AS rvol_50d
FROM
(
SELECT
d,
vol,
avg(vol) OVER (ORDER BY d ROWS BETWEEN 5 PRECEDING AND 1 PRECEDING) AS avg5,
avg(vol) OVER (ORDER BY d ROWS BETWEEN 20 PRECEDING AND 1 PRECEDING) AS avg20,
avg(vol) OVER (ORDER BY d ROWS BETWEEN 50 PRECEDING AND 1 PRECEDING) AS avg50
FROM
(
SELECT
date AS d,
toFloat64(max(volume)) AS vol
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'AAPL'
AND date >= '2025-10-01'
AND date <= '2026-06-30'
GROUP BY date
)
)
WHERE d >= '2026-04-01'
ORDER BY dOn Apr 1 dat single session read 0.97x on a 5-session average, 0.98x on 20 sessions and 0.83x on 50. By Jun 30 di three lines read 0.6x, 0.97x and 1.17x. Nothing about di ticker change between those numbers. Only di denominator change.
Now add di session question on top. Some platforms dey count only di regular New York session, others dey add premarket and after-hours inside both di numerator and di average, and some dey compare volume-so-far-today against di same clock time on past days. All of dem dey print di answer under di name RVOL. Why relative volume differ between platforms walk through di variants one by one. Di habit wey save you plenty confusion na simple: before you trust any RVOL number, ask which lookback and which session dem count.
Wetin to check before di New York open
If you dey for Lagos, di US regular session dey open 9:30 a.m. New York time, wey land around 2:30 p.m. your time for most of di year and 3:30 p.m. after America drop daylight saving for early November. Di list you build for dat window dey rest on pre-open data, so e helps to know wetin di number can and cannot carry.
- Pair RVOL with di raw share count and di naira or dollar value of dat volume. Average daily volume dey tell you whether 2x even mean enough shares for you to get in and out.
- Know which percentile your cutoff dey select for di tier of names you dey screen. Di tier panel above give you di actual shares of sessions.
- Keep di lookback fixed when you dey rank names against each other, otherwise di ranking na partly artifact of di denominator.
- Check whether a pre-open reading dey count premarket volume against a full-session average. Dat mix dey make busy names look sleepy for di hours before 9:30.
To see wetin di thin end of di distribution look like on a live week, unusual volume stocks dis week rank am, and di relative volume screener show how one cutoff behave once you apply am across di market.
Di small print on how we count
- Every panel dey dedupe to one row per ticker per session with max(volume) before any average, so a repeated row no go bend di denominator.
- Di 20-session average exclude di current day. RVOL wey include today inside im own average go always look smaller for di big days.
- Di first panel keep only names wey average above two million shares and wey traded at least 220 sessions in di window, and e skip over-the-counter rows.
- Di percentile panel use deterministic quantiles, so two different runs of di same query go give di same figure.
FAQ
Which RVOL number dem dey call high?
Most screeners start to flag from 1.5x or 2x upward. Counted across liquid US names for one year, 2x and above show up on a small share of ordinary sessions and 5x and above na genuinely rare. Treat am as a percentile statement about dat ticker own history, no treat am as a grade.
RVOL of 1 mean di day normal?
E dey close to normal, but di middle of di distribution dey sit small below 1x for most names. A few huge sessions dey pull di average volume up, so di typical session dey print under di average. A 0.8x reading na an ordinary day, no be a dead one.
Why my RVOL no match my friend own for di same stock?
Di lookback window and di session definition. Di AAPL trace above show di same session reading three different values on 5, 20 and 50 session averages, and platforms wey count premarket differently go split di answer again. Why relative volume differ between platforms cover di rest.
RVOL fit tell me where price dey go?
RVOL dey measure participation, no be direction. E tell you how today volume compare with dat ticker own recent history, and nothing more than dat. We test di prediction question against data inside do volume indicators predict anything.
RVOL 2 on a thin ticker and RVOL 2 on SPY, which one heavier?
In share terms di liquid one carry far more extra volume, millions of shares against maybe one block. In rarity terms di two tiers cross 2x at different rates, as di tier panel count. Same label, two different pieces of information.
Every panel here carry di exact SQL under am, so open any one and see how we count each figure. If you wan run di same count with your own tier, your own lookback and your own list of names, ask di question in plain English on di Strasmore terminal.