Relative volume, or RVOL, is one of the first numbers a day trading screener puts in front of you.
You calculate it by dividing today's volume by what a normal day looks like for that stock. The
numerator is easy — it is on every screen. The denominator is where the whole calculation lives,
and almost nobody checks what is actually in it.
It matters more than it sounds. Get the denominator wrong and RVOL is not slightly off, it is most
wrong on exactly the days you care about: the ones where volume exploded.
This guide covers the two averages your data source might be giving you, a five-minute test that
tells you which one you have, and the specific way the wrong assumption fails. Getting this right
costs one afternoon; getting it wrong is invisible.
1. The denominator is the whole calculation
Every RVOL is some version of:
RVOL = today's volume ÷ average daily volume
Most data sources hand you a field called something like "average volume, 10 day" and you divide.
The question nobody asks is which ten days.
There are two reasonable answers, and they are not the same number:
A — the ten sessions ending today, including today's volume in its own average.
B — the ten sessions before today, with today excluded.
On a quiet day the two are close enough that nobody notices. On a day where volume is 40 times
normal, they are wildly different, because in version A today's enormous volume is sitting inside
the average it is being compared against.
That is the trap: the difference between A and B is smallest when you do not care, and largest
exactly when you do.
2. Why you cannot tell from the name
Field names do not settle this. "Average daily volume, 10 day" is equally true of both. Some
documentation says, most does not, and behaviour can change without an announcement.
The reverse mistake is just as easy. If you assume your source uses A when it actually uses B, the
natural fix is to back today's volume out of the average:
adjusted = (average × 10 − today) ÷ 9
Applied to a field that already excludes today, that formula is not a small error. We will get to
exactly how it fails in section 5.
3. A five-minute test that settles it
You need one thing your vendor does not control: an independent source of daily bars. Then:
Pick a day with a big outlier. A stock whose volume today is many times normal. The two
candidate averages are far apart there, so the test has a clear answer.
Compute both windows from the independent source. The ten sessions including today, and the
ten sessions before today.
Compare each against the vendor's field. Use relative error, not absolute — the two sources
will not agree perfectly on raw volume because consolidated tape definitions differ slightly.
Repeat over several dozen stocks and count. One stock can be a coincidence. Fifty cannot.
Whichever window matches at near-zero error is the one your vendor is using. If neither matches
closely, you have learned something more important: the field is not a plain ten-session mean, and
you should not be dividing by it at all.
4. What we found
We ran exactly that on 2026-08-20 across
60 US stocks with at least a million shares traded.
| Hypothesis | Median relative error |
| Average excludes today | 0.02% |
| Average includes today | 5.5% |
59 of 60 stocks matched the excludes-today window more closely. A 0.02% median error is not
"close" — it is the same number, with the tiny residual explained by tape differences between the
two sources.
One example, worked through:
| ABEV on 2026-08-20 | Shares |
| Today's volume | 107,935,698 |
| Vendor's 10-day average | 29,003,810 |
| Independent, ten sessions before today | 29,003,833 |
| Independent, ten sessions including today | 36,504,296 |
The vendor's field lands 0.00% from the excludes-today figure and 20.55% from the other one. There
is no ambiguity left to argue about.
So for this source, plain division is correct, and no adjustment is needed:
RVOL = today ÷ the 10-day average, as given5. How the wrong assumption fails
Suppose you assumed the average included today and applied the correction from section 2. Here is
what happens to a real stock from the same day.
| MMA on 2026-08-20 | Shares |
| Today's volume | 351,946,397 |
| Vendor's 10-day average | 93,300 |
| True RVOL | 3,772x |
| Denominator after the "correction" | −39,001,489 |
The denominator goes
negative. Whenever today's volume exceeds ten times the average, the
expression
(average × 10 − today) is below zero, and after that every downstream branch is wrong:
your code either divides by a negative number, throws, or — most likely and most dangerous —
silently treats the result as zero.
If your scanner then filters on
RVOL >= 2, a zero fails the filter. **The stocks the bug deletes
are precisely the biggest volume surges in the market.** A volume surge scanner built this way
returns everything except the volume surges, and it never errors, so nothing tells you.
It is not only the extremes. On ABEV the same correction turns a denominator of 29,003,810 into
20,233,600, inflating RVOL by
1.43x. Every ranking built on it is quietly scrambled.
We had this correction in our own scanner until we ran the test in section 3. That is the reason
this guide exists.
6. A checklist
Before you trust an RVOL number, from any source:
Run the section 3 test once per data source. It takes minutes and the answer holds until the
vendor changes something, which is why it is worth keeping as a script rather than a memory.
Check the denominator can never go negative or zero. If your code contains any subtraction
inside the denominator, add an explicit guard and make it loud. A silent zero is worse than a crash
because it removes rows without telling you.
Look at the extremes of your own output. If your top of list by RVOL tops out around 5x on a day
when some stock traded 40 times normal, something upstream is eating them.
Prefer dollar volume for liquidity, share ratio for surprise. They answer different questions.
A million shares of a $0.10 stock and a million shares of a $50 stock are not the same market. When
screening for tradeability, use dollars. RVOL is for detecting the unusual, not the tradeable, and
you generally want both.
Decide what a normal day means for you. Ten sessions is a convention, not a law. A stock that
surged three days ago has a contaminated ten-day average either way, and no amount of arithmetic
about today fixes that. Some people use a median instead of a mean for exactly this reason.