O que é RVOL e como ler o volume relativo
Entenda o que é o RVOL e como usar esse indicador para comparar o volume atual com a média de vinte dias de um ativo para identificar alta volatilidade.
O volume relativo (RVOL) mede a intensidade de negociação de uma ação em comparação com seu padrão recente: o volume de ações da sessão dividido pela média diária de volume do ativo, geralmente calculada sobre as últimas 20 sessões. Um RVOL de 1 indica um dia comum, 2 significa que o dobro de ações costumava ser negociado e 0,5 marca uma sessão com metade da velocidade habitual. Todos os números desta página são medidos a partir de dados do mercado dos EUA em nível de minuto, com a consulta exata anexada a cada painel.
O que é volume relativo? Uma definição simples
O volume bruto tem pouco valor isoladamente: cinco milhões de ações representam um dia de baixa atividade para uma mega-cap, mas um evento anual para uma small-cap. O volume relativo torna explícita a comparação com a normalidade da própria ação:
RVOL = volume do dia ÷ volume médio diário da ação (geralmente das últimas 20 sessões)
Um exemplo hipotético: uma ação que tem média de 10 milhões de ações por dia e registra 25 milhões no fechamento apresentou um RVOL de 2,5. (Um print é uma operação reportada ao consolidated tape — o registro de execuções de todo o mercado — e "the tape" é o termo usado por traders para esse registro.) O período de análise de 20 sessões é uma convenção — plataformas também utilizam 10, 30 ou 50 dias; equivale a aproximadamente um mês de negociação. Esse intervalo também reflete as particularidades do calendário da bolsa: um feriado com pregão reduzido adiciona apenas uma fração do volume de uma sessão normal à média, e feriados de mercado e fechamentos antecipados mostra quando eles ocorrem.
Por que os traders acompanham o volume relativo?
O RVOL é um indicador de participação, não de direção. Dias com RVOL alto costumam ocorrer em eventos identificáveis — resultados, inclusões em índices ou notícias de grande impacto. Um movimento de preço com volume alto indica que há um grande grupo de investidores por trás dele; o mesmo movimento com um RVOL de 0.3 pode ser resultado de apenas alguns ordens. A atividade também está ligada à liquidez: entre as ações, os ativos menos negociados apresentam os maiores bid-ask spreads, publicados pelos market makers que mantêm cotações de compra e venda o dia todo. Para qualquer ação, as cotações tendem a ser mais largas em sessões de baixa atividade do que em sessões de alta atividade. (O volume também fundamenta o VWAP, o preço médio ponderado pelo volume — a outra grande referência baseada em volume.)
Como calcular o volume relativo — e a armadilha do horário
O cálculo do dia completo consiste em uma divisão: o volume total da sessão ÷ a média de volume diário de vinte sessões. Ele só é confiável após o fechamento. A armadilha é executá-lo durante a sessão: às 10:30, o total acumulado é naturalmente uma fração de qualquer valor de dia completo, então até uma manhã de forte volatilidade parecerá desanimada. O volume intraday segue um formato em U ao longo do relógio, e qualquer RVOL intraday deve considerar esse formato.
Abaixo está o formato, medido no SPY, o ETF do S&P 500: mediana de ações negociadas por minuto em cada intervalo de 30 minutos durante os últimos trinta dias de sessões completas, incluindo o extended hours (das 4:00 às 20:00, horário do Leste).
O SQL exato por trás de cada número
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_timeO intervalo das 9:30 — a primeira meia hora do pregão regular — registrou uma mediana de 136 mil ações por minuto, contra 3.5 mil no intervalo do premarket das 9:00 imediatamente anterior. O ritmo diminui para 49.5 mil no intervalo das 12:30, e depois aumenta em direção ao fechamento: 168.3 mil no intervalo das 15:30, o período que antecede o leilão de fechamento e bem acima do ponto mais baixo do horário de almoço. Após o sino das 16:00, o ritmo por minuto cai drasticamente no after-hours trading.
Volume relativo intraday: ajuste pelo horário
A correção altera o denominador: compara-se o total acumulado de hoje com a média do total acumulado no mesmo horário. Isso exige o conhecimento da parcela do volume de um dia normal já completada em cada ponto do relógio — medida aqui com base nas últimas vinte sessões completas do SPY:
O SQL exato por trás de cada número
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Às 10:00, meia hora após o início do pregão regular, o SPY costuma registrar apenas 12.4% de seu volume total diário; ao meio-dia 34.8%, às 14:00 51.1%, às 15:30 ainda apenas 67.3%. Mesmo no fechamento das 16:00, o total atinge 85.7% — todo o restante é reportado às 16:00 ou depois, e a maior parte ocorre nos primeiros minutos após o sino, quando o leilão de fechamento e outros negócios de fim de dia entram no tape; a sessão after-hours em si é muito mais escassa. Isso é coerente com a queda no gráfico acima: o ritmo por minuto desaba no fechamento, mesmo enquanto uma fatia significativa do total do dia ainda está sendo reportada. Um RVOL matinal ajustado pelo tempo divide o volume acumulado de hoje pela média de vinte dias multiplicada pela parcela do checkpoint. Uma ressalva: este cronograma é do SPY — cada ação possui seu próprio relógio, e o exemplo prático abaixo mede o de um único ativo.
Um exemplo prático: uma sessão de alto volume real (MU)
Junho de 2026 foi um mês de forte movimentação para a Micron — a análise detalhada da MU em junho de 2026 percorre todo o histórico de negociação. Abaixo está a sessão com o maior volume do mês, com o cálculo de RVOL realizado de ambas as formas:
O SQL exato por trás de cada número
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_dayA maior sessão da MU no mês ocorreu em 2026-06-25. Às 10:30 da manhã daquele dia, 32.8 milhões de ações foram negociadas, contra uma média de 17.3 milhões para o mesmo horário nas 20 sessões anteriores — um RVOL ajustado pelo tempo de 1.9. Se dividirmos o total da manhã pela média do dia inteiro de 51 milhões, a leitura direta é 0.64: um dia aparentemente abaixo da média, apesar de uma manhã operando perto do dobro do ritmo habitual. A sessão encerrou com 77.2 milhões de ações, um RVOL do dia completo de 1.5.
Esse valor de fechamento pode parecer modesto perto de prints de ativos que movimentaram dez vezes a média — se ele é realmente modesto é uma questão de distribuição, que será medida a seguir.
O que define um volume relativo alto?
Fóruns de trading costumam citar patamares como "RVOL acima de dois é alto". Aqui está a versão mensurada: o RVOL do dia completo para cada ação e ETF listado nos EUA com média de volume diário de 20 dias acima de cinco milhões de ações (e um histórico completo de 20 sessões anteriores), calculado por percentil em todo o grupo para a sessão completa mais recente em nossos dados. Uma observação sobre o rótulo: o filtro conta ações, não dólares, portanto este grupo de alto volume abrange desde mega-caps e ETFs até small-caps baratas de alta rotatividade — alto volume de ações não é o mesmo que facilidade de negociação.
O SQL exato por trás de cada número
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 percentileO ativo mediano neste grupo de alto volume negociou a 0.73 vezes sua própria média de 20 dias. Nove em cada dez ativos ficaram abaixo de 1.37, e apenas um em cada cem superou 4.71. Compare a sessão da MU da seção anterior com esta tabela e ela deixa de parecer modesta — mesmo ativos movimentados passam a maioria dos dias próximos à sua própria média; múltiplos dela são raros.
A extremidade inferior também é importante: o percentil 10 situou-se em 0.11. Leituras tão baixas geralmente indicam uma ação cuja média de 20 dias ainda é impactada por uma única sessão enorme — após um pico, o denominador inflado mantém o RVOL baixo por semanas. A janela tem memória, em ambas as direções.
Uma ressalva: esta é uma seção transversal de uma única sessão — os percentis variam dia a dia, e dias de eventos em todo o mercado (rebalanceamentos de índices, vencimentos de opções) podem elevar toda a curva.
Quais ações tiveram volume incomum? O ranking de RVOL
Mesmo universo, ranqueado (a versão semanal atualizada está em ações com volume incomum esta semana): as dez maiores leituras de RVOL de dia completo da sessão 2026-07-21 entre ativos com média superior a 5 milhões de ações por dia — o ranking que um screener identificaria como volume incomum. O filtro exige 20 sessões anteriores completas — listagens recentes não possuem uma média de 20 dias significativa e, caso contrário, encheriam o ranking com dados irrelevantes.
O SQL exato por trás de cada número
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 10O topo do ranking, LBGJ, registrou 169.2 milhões de ações contra uma média de 20 dias de 5.1 milhões — um RVOL de 33.3. Todas as linhas superaram suas respectivas médias. Rankings como este tendem a excluir as mega-caps conhecidas — dobrar uma média já enorme exige um número extraordinário de ações, enquanto um ativo de menor capitalização pode multiplicar seu volume em uma única sessão.
Notas de dados: seleção de sessão e exclusões
Ambas as tabelas ranqueadas utilizam o mesmo universo e a mesma regra de sessão. Uma sessão candidata só é considerada completa quando o volume do SPY para aquela data atinge pelo menos 60% da própria média de volume das 20 sessões anteriores do SPY — os dados do dia mais recente chegam com atraso, e este critério evita que um dia parcialmente carregado seja lido como uma sessão finalizada. Ambas as tabelas também excluem um símbolo que as bolsas reatribuíram recentemente a uma nova listagem: os feeds de dados carregam o histórico de duas empresas diferentes sob o mesmo ticker, portanto sua média de 20 dias não serve como uma base comparativa válida. A lista de exclusão no SQL é mantida em sincronia com nossas verificações de identidade de símbolos a cada atualização; qualquer símbolo reutilizado recém-identificado é adicionado da mesma forma.
FAQ
Qual é um bom número de RVOL?
Não existe um limite oficial. Com base em ações de alto volume nos EUA na sessão mais recente concluída em nossos dados, a mediana operou a 0.73 vezes sua média de 20 dias, o percentil 90 foi 1.37 e o 99 foi 4.71.
O que significa um RVOL de 2?
A ação negociou o dobro de seu volume médio no período medido, geralmente nas últimas 20 sessões. O horário é importante: um valor de 2 comparado à média do mesmo horário do dia é uma leitura forte no meio da sessão; 2 no fechamento indica um dia com o dobro do ritmo normal.
Como se calcula o volume relativo intraday?
Divida o volume cumulativo de hoje pelo volume cumulativo médio no mesmo horário do dia durante o seu período de análise. Dividir um total do meio da manhã por uma média de dia completo subestima drasticamente a leitura — até as 10:00, o SPY geralmente completou apenas 12.4% de seu volume final do dia.
O volume relativo inclui o trading de premarket e after-hours?
As convenções das plataformas variam; esta página conta cada barra de minuto no calendário do horário do Leste (Eastern Time), incluindo o horário estendido. Para o SPY, a contribuição do premarket é visivelmente pequena — uma mediana de 3.5 mil ações por minuto no intervalo das 9:00 contra 136 mil logo após a abertura.
Alto volume relativo é bullish ou bearish?
Nenhum dos dois. O RVOL mede a participação, não a direção — o volume intenso aparece tanto nos melhores quanto nos piores dias de uma ação. Sessões de alto RVOL historicamente coincidiram com resultados de balanços, mudanças de índice e notícias de última hora; o número indica que o mercado compareceu, não para qual lado ele pende.
Cada painel acima contém o SQL exato que o produziu — abra um, substitua pelo seu próprio ticker e meça o RVOL para os ativos que você realmente negocia no terminal Strasmore.