RESEARCH

Relative volume (RVOL) in day trading: how to calculate it, and how to check your data is right

Study details

Measured
2026-08-20, one session; 60 US stocks trading over a million shares
Instruments
US equities; a vendor screener's 10-day average volume field against independent daily bars
Method
compute the trailing ten-session average volume from an independent source twice, once including today and once excluding it, then compare each against the vendor's field by relative error and count which window each stock favours
Result
59 of 60 stocks matched the excludes-today window at a median relative error of 0.02%, against 5.5% for the alternative. A correction that subtracts today from that field drives the denominator negative whenever volume exceeds ten times the average
Contents
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.
HypothesisMedian relative error
Average excludes today0.02%
Average includes today5.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-20Shares
Today's volume107,935,698
Vendor's 10-day average29,003,810
Independent, ten sessions before today29,003,833
Independent, ten sessions including today36,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 given

5. 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-20Shares
Today's volume351,946,397
Vendor's 10-day average93,300
True RVOL3,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.

Related reading

← All research

Originally published by TraderWe on August 21, 2026. You may quote and link to this page. Republishing the full text without a link back to the original is not permitted.

4 replies

G
GapHunterMike· Aug 2026 ago
never once checked if my screener's average included today. probably been running slightly wrong rvol for years. going to test mine against my own bars this week.
L
LurkerLee· 29d ago
How do you tell which window your vendor uses if they don't document it? Just run both and see which one lines up closer?
D
DrawdownDave· 29d ago
The bit about it being most wrong on huge volume days stung a little. Those are exactly the tickers I chase, and I've sized up off a number that was flattering me. Not saying anyone should do anything, just noting my own dumb pattern.
CryptoKarl· 29d ago
same problem in perps honestly, exchanges define 'average volume' however they feel like and nobody says which. the negative denominator thing when volume goes vertical is a fun little landmine.
Sign in to reply →