什么是RVOL?相对成交量如何解读
RVOL(相对成交量)等于股票成交量除以20日平均成交量。RVOL高于1表示交易比平时活跃,并介绍盘中时段RVOL及高位判断标准。
相对成交量(RVOL)用于衡量一只股票相较于自身近期正常水平的交易活跃度:以当日成交股数除以该股的平均日成交量,通常取过去20个交易日计算。RVOL为1表示交易量处于正常水平,2表示成交股数是平时的两倍,0.5表示当日交易活跃度约为平时的一半。本页面的所有数据均根据美国市场分钟级数据测算,每个图表均附有精确查询条件。
什么是相对成交量?通俗定义
单看绝对成交量,信息量很有限:对超大市值股票而言,500万股可能是极其清淡的一天;对小盘股而言,却可能是一年才出现一次的成交规模。相对成交量则明确将成交量与该股票自身的正常水平进行比较:
RVOL = 当日成交量 ÷ 股票的日均成交量(通常取最近20个交易日)
举例来说,某股票日均成交量为1,000万股,收盘前成交量达到2,500万股,则其RVOL为2.5。(Print指报送至综合行情带的成交记录。综合行情带是全市场成交执行记录;交易员通常将该记录简称为“行情带”。)采用20个交易日是行业惯例,但不同平台也可能使用10日、30日或50日均值。这大致相当于一个自然月的交易日。该计算窗口还会受到交易所日历特殊安排的影响:节假日半日市只会将正常交易日部分成交量计入平均值,而市场节假日和提前收市页面会列出这些日期。
为什么交易员关注相对成交量?
RVOL衡量的是市场参与度,而不是价格方向。高RVOL交易日通常集中在可识别的事件附近,例如财报发布、纳入指数和头条新闻。高成交量下形成的价格变动,背后有大量市场参与者;如果同样的变动发生在RVOL为0.3时,可能只是少数几笔订单推动的结果。交易活跃度也会影响可交易性:在不同股票之间,成交最清淡的股票通常具有最宽的买卖价差,这些报价由全天同时提供买价和卖价的做市商挂出;对单只股票而言,成交清淡时段的报价通常也会比成交活跃时段略宽。(成交量也是VWAP,即成交量加权平均价的基础,后者是另一项重要的成交量指标。)
如何计算相对成交量,以及时段陷阱
全天相对成交量的计算只需做一次除法:本交易时段的总成交量 ÷ 过去20个交易时段的日均成交量。只有在收盘后计算,这个结果才具有完整意义。陷阱在于盘中计算:上午10:30时,累计成交量天然只是全天成交量的一部分,因此即使早盘交易剧烈,结果也可能显示成交清淡。盘中成交量随时间呈U形变化,任何盘中RVOL计算都必须以这一形态为基础。
以下是这种成交量形态。数据取自SPY,即标普500 ETF:统计过去30个已完成交易日(包含盘前盘后交易时段,即美国东部时间凌晨4:00至晚上8:00)中,每个30分钟时间区间的每分钟成交股数中位数。
| 东部时间 | 每分钟成交量中位数 k |
|---|---|
| 04:00 | 0.6 |
| 04:30 | 0.3 |
| 05:00 | 0.3 |
| 05:30 | 0.3 |
| 06:00 | 0.4 |
| 06:30 | 0.5 |
| 07:00 | 1.1 |
| 07:30 | 1.6 |
| 08:00 | 2.2 |
| 08:30 | 3.3 |
| 09:00 | 4.7 |
| 09:30 | 113.2 |
| 10:00 | 82.9 |
| 10:30 | 77.6 |
| 11:00 | 64.3 |
| 11:30 | 52.3 |
| 12:00 | 49.3 |
| 12:30 | 43.5 |
| 13:00 | 43.4 |
| 13:30 | 36.8 |
每个数字背后的完整 SQL
SELECT formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
round(quantileDeterministic(0.5)(toFloat64(volume), toUInt64(toUnixTimestamp(window_start))) / 1000, 1) AS median_minute_volume_k
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= now() - INTERVAL 30 DAY
AND toDate(toTimeZone(window_start, 'America/New_York')) < toDate(toTimeZone(now(), 'America/New_York'))
GROUP BY et_time
HAVING et_time >= '04:00' AND et_time < '20:00'
ORDER BY et_time9:30区间是常规交易的第一个半小时,每分钟成交股数中位数为113.2千股;此前的9:00盘前交易区间为4.7千股。到12:30区间,成交速度降至43.5千股,随后临近收盘时回升:3:30区间达到152.6千股,进入收盘竞价前的放量阶段,明显高于午间低谷。下午4:00收盘铃响后,每分钟成交速度在盘后交易中骤降。
日内相对成交量:按时段调整
修正方法是调整分母:将今日截至当前的累计成交量,与过去平均水平在同一时刻的累计成交量进行比较。这需要了解正常交易日截至各个时点通常已完成的成交量占比。下文以SPY最近20个已完成交易日为样本:
| 东部时间检查点 | 平均日成交量完成百分比 |
|---|---|
| 10:00 | 20.7 |
| 12:00 | 42.6 |
| 14:00 | 57.2 |
| 15:30 | 71.2 |
| 16:00 | 87.5 |
每个数字背后的完整 SQL
WITH per_min AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') AS et_min,
sum(toFloat64(volume)) AS v
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= now() - INTERVAL 45 DAY
AND toDate(toTimeZone(window_start, 'America/New_York')) < toDate(toTimeZone(now(), 'America/New_York'))
GROUP BY et_date, et_min
),
last20 AS (
SELECT DISTINCT et_date FROM per_min ORDER BY et_date DESC LIMIT 20
)
SELECT checkpoint AS et_checkpoint,
round(avg(share) * 100, 1) AS avg_pct_of_day_volume_done
FROM (
SELECT et_date,
checkpoint,
sumIf(v, et_min < checkpoint) / sum(v) AS share
FROM (
SELECT et_date, et_min, v, arrayJoin(['10:00', '12:00', '14:00', '15:30', '16:00']) AS checkpoint
FROM per_min
WHERE et_date IN (SELECT et_date FROM last20)
)
GROUP BY et_date, checkpoint
)
GROUP BY checkpoint
ORDER BY checkpoint截至上午10:00,即常规交易开始半小时后,SPY通常仅完成全天最终成交量的20.7%;截至中午为42.6%,截至下午2:00为57.2%,截至下午3:30仍只有71.2%。即使在下午4:00收盘铃响时,累计成交量也只有87.5%。其余成交量会在16:00或之后报告,其中大部分集中在收盘铃响后的最初几分钟,因为收盘竞价及其他日终交易会在此时成交并被记录;盘后交易时段本身的成交量则低得多。
这与上图中的断崖式变化一致:收盘铃响后,每分钟成交速度骤降,但当天总成交量中仍有相当一部分尚未报告。按时间调整的早盘RVOL计算方式,是将今日累计成交量除以20日平均成交量再乘以相应时点的成交量占比。需要注意的是,这一时间分布属于SPY,每只股票都有自己的成交节奏;下方示例采用的是另一只股票的数据。
一个真实的大成交量交易日示例(MU)
2026年6月是美光交易活跃的一个月,MU 2026年6月深度分析完整复盘了整个成交记录。以下是该月成交量最大的一天,并分别采用两种方法计算RVOL:
| 交易时段日期 | 10:30前成交量 m | 10:30前平均成交量 m | 10:30调整后相对成交量 | 10:30简单相对成交量 | 交易时段成交量 m | 滚动ADV m | 全天相对成交量 |
|---|---|---|---|---|---|---|---|
| 2026-06-25 | 32.8 | 17.3 | 1.9 | 0.64 | 77.2 | 51 | 1.5 |
每个数字背后的完整 SQL
WITH mu_daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
sum(toFloat64(volume)) AS day_volume,
sumIf(toFloat64(volume), formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') < '10:30') AS vol_by_1030
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'MU'
AND window_start >= toDateTime('2026-04-15 00:00:00', 'America/New_York')
AND window_start < toDateTime('2026-07-01 00:00:00', 'America/New_York')
GROUP BY et_date
HAVING day_volume > 1000000
),
biggest AS (
SELECT et_date, day_volume, vol_by_1030
FROM mu_daily
WHERE et_date >= toDate('2026-06-01') AND et_date <= toDate('2026-06-30')
ORDER BY day_volume DESC
LIMIT 1
),
trailing AS (
SELECT sum(day_volume) / 20 AS adv, sum(vol_by_1030) / 20 AS avg_by_1030
FROM (
SELECT day_volume, vol_by_1030
FROM mu_daily
WHERE et_date < (SELECT et_date FROM biggest)
ORDER BY et_date DESC
LIMIT 20
)
)
SELECT formatDateTime((SELECT et_date FROM biggest), '%Y-%m-%d') AS session_date,
round((SELECT vol_by_1030 FROM biggest) / 1e6, 1) AS vol_by_1030_m,
round((SELECT avg_by_1030 FROM trailing) / 1e6, 1) AS avg_vol_by_1030_m,
round((SELECT vol_by_1030 FROM biggest) / (SELECT avg_by_1030 FROM trailing), 1) AS rvol_1030_adjusted,
round((SELECT vol_by_1030 FROM biggest) / (SELECT adv FROM trailing), 2) AS rvol_1030_naive,
round((SELECT day_volume FROM biggest) / 1e6, 1) AS session_volume_m,
round((SELECT adv FROM trailing) / 1e6, 1) AS trailing_adv_m,
round((SELECT day_volume FROM biggest) / (SELECT adv FROM trailing), 1) AS rvol_full_dayMU当月成交量最大的一天是2026-06-25。当天上午10:30前,成交量已达到32.8百万股;过去20个交易日截至同一时间的平均成交量为17.3百万股,按时间调整后的RVOL为1.9。如果改用全天平均成交量51百万股来除当天上午的成交量,得出的直观读数为0.64:这看似是一个低于平均水平的交易日,但上午的成交速度接近通常水平的两倍。该日最终成交量为77.2百万股,全天RVOL为1.5。
与成交量达到平均水平十倍的个股截图相比,这一收盘成交量可能显得并不突出。但它是否真的偏低,还要看分布情况,下一步将对此进行衡量。
什么才算相对成交量高?
交易论坛常把“RVOL高于2”视为高水平。以下是基于数据的定义:统计所有在美国上市、20日平均日成交量超过500万股且拥有完整20个历史交易日数据的股票和ETF,计算其全天RVOL,并按数据中最近一个已完成交易日的横截面分位数进行比较。需要说明的是,该筛选按股数而非金额统计。因此,这一高成交量群体既包括超大市值股票和ETF,也包括股价较低、换手频繁的小盘股。股数成交量高,并不等于容易交易。
| 百分位数 | rvol |
|---|---|
| p10 | 0.08 |
| p25 | 0.57 |
| p50 (median) | 0.86 |
| p75 | 1.2 |
| p90 | 1.69 |
| p99 | 3.43 |
每个数字背后的完整 SQL
WITH daily AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
toFloat64(sum(volume)) AS day_volume
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 40 DAY
AND toDate(toTimeZone(window_start, 'America/New_York')) < toDate(toTimeZone(now(), 'America/New_York'))
GROUP BY ticker, et_date
),
spy_days AS (
SELECT et_date,
day_volume,
avg(day_volume) OVER (ORDER BY et_date ROWS BETWEEN 20 PRECEDING AND 1 PRECEDING) AS prior_avg
FROM daily
WHERE ticker = 'SPY' AND day_volume > 10000000
),
sessions AS (
SELECT et_date FROM spy_days
),
latest AS (
SELECT max(et_date) AS d FROM spy_days WHERE prior_avg > 0 AND day_volume >= 0.6 * prior_avg
),
prior20 AS (
SELECT et_date FROM sessions WHERE et_date < (SELECT d FROM latest) ORDER BY et_date DESC LIMIT 20
),
rvols AS (
SELECT ticker, day_vol / adv20 AS rvol
FROM (
SELECT ticker,
sumIf(day_volume, et_date = (SELECT d FROM latest)) AS day_vol,
sumIf(day_volume, et_date IN (SELECT et_date FROM prior20)) / 20 AS adv20,
countIf(day_volume > 0 AND et_date IN (SELECT et_date FROM prior20)) AS sessions_traded
FROM daily
WHERE ticker NOT IN ('SPCX')
GROUP BY ticker
HAVING adv20 > 5000000 AND day_vol > 0 AND sessions_traded = 20
)
)
SELECT pair.1 AS percentile,
round(pair.2, 2) AS rvol
FROM (
SELECT arrayJoin(arrayZip(['p10', 'p25', 'p50 (median)', 'p75', 'p90', 'p99'], quantilesExact(0.1, 0.25, 0.5, 0.75, 0.9, 0.99)(rvol))) AS pair
FROM rvols
)
ORDER BY percentile这一高成交量群体中,样本的中位数成交量为其自身20日平均成交量的0.86倍。十分之九的样本低于1.69倍,只有百分之一超过3.43倍。将上一节中MU的交易日数据与该表对照后,MU的表现就不再显得温和。即使是交易活跃的股票,大多数交易日的成交量也接近自身均值;达到均值数倍的情况很少见。
成交量分布的低端同样值得关注。第10百分位为0.08。如此低的读数通常意味着,某只股票的20日平均成交量中仍包含一次异常巨大的交易日。成交量激增后,偏高的分母会在数周内压低RVOL。这个计算窗口具有记忆效应,向上和向下均如此。
需要注意的是:这里反映的是单个交易日的横截面,分位数会随交易日变化。指数再平衡、期权到期等全市场事件日,可能推高整个分布曲线。
哪些股票成交量异常?RVOL排行榜
同一股票池,按排名列示(固定的每周版本见本周成交量异常的股票):在日均成交量超过500万股的股票中,列出2026-08-21交易日全天RVOL最高的十只股票。这是筛选器会标记为成交量异常的股票池。筛选要求必须有此前完整的20个交易日数据。近期上市股票没有有意义的20日均值,否则会因数据缺失产生异常结果,占满榜单。
| ticker | 交易时段日期 | 交易时段成交量 m | 20日ADV m | rvol |
|---|---|---|---|---|
| HOWL | 2026-08-21 | 265 | 5.3 | 50 |
| CAN | 2026-08-21 | 93 | 11 | 8.5 |
| LGCL | 2026-08-21 | 88.1 | 13.1 | 6.8 |
| MRNA | 2026-08-21 | 88.1 | 16 | 5.5 |
| PURR | 2026-08-21 | 36.7 | 9.8 | 3.8 |
| BABA | 2026-08-21 | 32.1 | 8.7 | 3.7 |
| COIN | 2026-08-21 | 24.5 | 7.1 | 3.4 |
| BITX | 2026-08-21 | 26.7 | 8.3 | 3.2 |
| GOSS | 2026-08-21 | 130.9 | 41 | 3.2 |
| TEM | 2026-08-21 | 16.2 | 5.1 | 3.2 |
每个数字背后的完整 SQL
WITH daily AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
toFloat64(sum(volume)) AS day_volume
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 40 DAY
AND toDate(toTimeZone(window_start, 'America/New_York')) < toDate(toTimeZone(now(), 'America/New_York'))
GROUP BY ticker, et_date
),
spy_days AS (
SELECT et_date,
day_volume,
avg(day_volume) OVER (ORDER BY et_date ROWS BETWEEN 20 PRECEDING AND 1 PRECEDING) AS prior_avg
FROM daily
WHERE ticker = 'SPY' AND day_volume > 10000000
),
sessions AS (
SELECT et_date FROM spy_days
),
latest AS (
SELECT max(et_date) AS d FROM spy_days WHERE prior_avg > 0 AND day_volume >= 0.6 * prior_avg
),
prior20 AS (
SELECT et_date FROM sessions WHERE et_date < (SELECT d FROM latest) ORDER BY et_date DESC LIMIT 20
)
SELECT ticker,
formatDateTime((SELECT d FROM latest), '%Y-%m-%d') AS session_date,
round(day_vol / 1e6, 1) AS session_volume_m,
round(adv20 / 1e6, 1) AS adv_20d_m,
round(day_vol / adv20, 1) AS rvol
FROM (
SELECT ticker,
sumIf(day_volume, et_date = (SELECT d FROM latest)) AS day_vol,
sumIf(day_volume, et_date IN (SELECT et_date FROM prior20)) / 20 AS adv20,
countIf(day_volume > 0 AND et_date IN (SELECT et_date FROM prior20)) AS sessions_traded
FROM daily
WHERE ticker NOT IN ('SPCX')
GROUP BY ticker
HAVING adv20 > 5000000 AND day_vol > 0 AND sessions_traded = 20
)
ORDER BY rvol DESC, ticker
LIMIT 10榜首股票HOWL成交量为265百万股,20日均值为5.3百万股,RVOL为50。榜单中的每只股票成交量都超过了自身均值。此类榜单通常不会偏向公众熟知的大型股。要让规模已经极大的平均成交量翻倍,需要出现极其庞大的成交股数;相比之下,小盘股单日成交量更容易成倍放大。
数据说明:交易日选择与排除规则
两个排名表使用相同的股票池和交易日规则。只有当SPY在某一日期的成交量达到其此前20个交易日平均成交量的至少60%时,该交易日才会被视为完整交易日。最新交易日的数据存在滞后。该检查可避免将数据尚未完整加载的交易日误判为已结束交易日。两个表还会排除一个近期被交易所重新分配给新上市公司的股票代码:供应商数据源将两家不同公司的历史数据归在该代码下,因此其20日均值不具备有效的基准意义。SQL中的排除列表会在每次刷新时与我们的股票代码身份检查保持同步;如发现其他被重复使用的股票代码,也会以相同方式加入。
常见问题
什么样的RVOL数值算好?
没有官方标准。根据我们的数据,在最近一个已完成交易日中,对美国高成交量股票进行统计后,样本中位数为其20日平均成交量的0.86倍,第90百分位为1.69,第99百分位为3.43。
RVOL为2意味着什么?
这表示在统计窗口内,该股票的成交量达到其平均水平的两倍。统计时间很重要:若以当日同一时点的平均成交量为基准,盘中RVOL为2属于较强读数;若收盘时RVOL为2,则表示当天成交量达到正常水平的两倍。
如何计算盘中相对成交量?
将当日累计成交量除以回看窗口内同一时点的平均累计成交量。将盘中早段的累计成交量除以全天平均成交量,会严重低估读数。截至上午10点,SPY通常只完成全天最终成交量的20.7%。
相对成交量是否包含盘前和盘后交易?
不同平台的统计口径不同。本页面统计美国东部时间日历日内的每一分钟K线,包括延长交易时段。对SPY而言,盘前交易的贡献明显较小:在9:00时段,每分钟成交量中位数为4.7万股,而开盘后不久为113.2万股。
高相对成交量是看涨还是看跌?
两者都不是。RVOL衡量的是市场参与度,而不是方向。无论股票处于最佳交易日还是最差交易日,成交活跃度都可能很高。历史上,高RVOL交易日通常与财报、指数调整和头条新闻同时出现;这个数值只能说明市场参与者大量入场,不能说明其倾向哪个方向。
以上每个面板都附有生成相应结果的完整SQL。打开其中一个面板,替换为您自己的ticker,即可在Strasmore终端上衡量您实际交易股票的RVOL。