Volume relatif (RVOL) : définition et lecture
Le volume relatif (RVOL) compare le volume d'un titre à sa moyenne 20 jours : au-dessus de 1, la séance est plus active que d'habitude. Courbe en U incluse.
Le volume relatif, ou RVOL (pour relative volume), mesure l'activité d'une action par rapport à sa propre normale récente : le volume de la séance divisé par le volume quotidien moyen du titre, calculé le plus souvent sur les 20 dernières séances. Un RVOL de 1 correspond à une journée ordinaire, un RVOL de 2 signifie que deux fois plus d'actions que d'habitude ont changé de mains, et 0,5 marque une séance qui tourne à mi-régime. Chaque chiffre de cette page est mesuré à partir de données de marché américaines à la minute, avec la requête exacte attachée à chaque panneau.
Qu'est-ce que le volume relatif ? Définition simple
Le volume brut ne dit pas grand-chose à lui seul : cinq millions d'actions, c'est une journée très calme pour une méga-capitalisation et un événement annuel pour une petite valeur. Le volume relatif rend explicite la comparaison avec la normale du titre :
RVOL = volume du jour ÷ volume quotidien moyen du titre (en général les 20 dernières séances)
Un exemple hypothétique : une action qui échange en moyenne 10 millions de titres par jour et qui en imprime 25 millions à la clôture termine à un RVOL de 2,5. (Un print, dans le jargon des traders, est une transaction rapportée au registre consolidé des exécutions, la « bande » du marché ; imprimer, c'est y inscrire une transaction.) La fenêtre de 20 séances est une convention : les plateformes utilisent aussi 10, 30 ou 50 jours ; cela représente environ un mois calendaire de bourse. La fenêtre hérite aussi des particularités du calendrier boursier : une demi-séance de veille de jour férié n'ajoute qu'une fraction du volume d'une séance normale à la moyenne, et jours fériés boursiers et clôtures anticipées cartographie où elles tombent.
Pourquoi les traders surveillent-ils le volume relatif ?
Le RVOL est une jauge de participation, pas une jauge de direction. Les journées à fort RVOL se regroupent autour d'événements identifiables : résultats, entrées dans un indice, actualité de premier plan. Un mouvement de prix imprimé sur un gros volume avait une foule derrière lui ; le même mouvement à un RVOL de 0,3 peut être l'œuvre d'une poignée d'ordres. L'activité voyage aussi avec la facilité de négociation : d'une action à l'autre, les valeurs les moins échangées portent les plus larges fourchettes achat-vente, affichées par les teneurs de marché qui cotent les deux côtés toute la journée, et pour un même titre, les cotations tendent à être un peu plus larges lors de ses séances les plus calmes que lors des plus actives. (Le volume sous-tend aussi le VWAP, le prix moyen pondéré par les volumes, l'autre grande référence fondée sur le volume.)
Comment calculer le volume relatif : le piège de l'heure
Le calcul journée entière tient en une division : volume total de la séance ÷ volume quotidien moyen sur 20 séances. Il n'est honnête qu'après la clôture. Le piège consiste à le faire tourner en cours de séance : à 10 h 30, le cumul n'est naturellement qu'une fraction de tout chiffre journée entière, si bien qu'une matinée pourtant agitée paraît endormie. Le volume intraday suit une courbe en U au fil de l'horloge, et tout RVOL intraday doit partir de cette forme.
Voici cette forme, mesurée sur SPY, l'ETF S&P 500 : la médiane d'actions échangées par minute dans chaque tranche de 30 minutes, sur les 30 derniers jours de séances terminées, séances étendues comprises (de 4 h 00 à 20 h 00, heure de l'Est).
Le SQL exact derrière chaque chiffre
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_timeLa tranche de 9 h 30, la première demi-heure de la séance régulière, a tourné à une médiane de 136.9 milliers d'actions par minute, contre 3.7 milliers dans la tranche de préouverture de 9 h 00 juste avant. Le rythme retombe à 50.1 milliers dans la tranche de 12 h 30, puis remonte vers la clôture : 174.2 milliers dans la tranche de 15 h 30, la montée vers le fixing de clôture, bien au-dessus du creux de la mi-journée. Après la cloche de 16 h 00, le rythme par minute tombe d'une falaise à l'entrée des échanges after-hours.
Volume relatif intraday : ajuster selon l'heure
La correction change le dénominateur : comparez le cumul du jour au cumul moyen à la même heure de l'horloge. Cela suppose de connaître la part du volume d'une journée normale déjà réalisée à chaque point de l'horloge, mesurée ici sur les 20 dernières séances terminées de SPY :
Le SQL exact derrière chaque chiffre
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 h 00, une demi-heure après l'ouverture de la séance régulière, SPY n'a typiquement imprimé que 12.2 % de son volume final de la journée ; à midi 35.3 % ; à 14 h 00 51.5 % ; à 15 h 30 encore seulement 67.7 %. Même à la cloche de 16 h 00, le total n'atteint que 86.1 % : tout le reste est rapporté à 16 h 00 ou après, et l'essentiel tombe dans les premières minutes qui suivent la cloche, quand le fixing de clôture et les autres transactions de fin de journée arrivent sur la bande ; la session after-hours elle-même est bien plus mince. Cela cadre avec la falaise du graphique ci-dessus : le rythme par minute s'effondre à la cloche alors même qu'une part significative du total de la journée reste à rapporter. Un RVOL matinal ajusté de l'heure divise le cumul du jour par la moyenne 20 jours multipliée par la part du point de contrôle. Une réserve : ce calendrier est celui de SPY ; chaque action garde sa propre horloge, et l'exemple ci-dessous mesure celle d'un seul titre.
Exemple concret : une vraie séance à fort volume (MU)
Juin 2026 a été un mois chargé pour Micron : l'analyse approfondie de MU en juin 2026 parcourt toute la bande. Voici la séance au plus fort volume de ce mois, avec le calcul du RVOL fait des deux manières :
Le SQL exact derrière chaque chiffre
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_dayLa plus grosse séance du mois pour MU est tombée le 2026-06-25. À 10 h 30 ce jour-là, 32.8 millions d'actions avaient changé de mains, contre une moyenne de 17.3 millions à la même heure sur les 20 séances précédentes, soit un RVOL ajusté de l'heure de 1.9. Divisez plutôt ce total matinal par la moyenne journée entière de 51 millions et la lecture naïve donne 0.64 : une journée sous la moyenne, en apparence, dans une matinée qui tournait à près du double de son rythme habituel. La séance a terminé à 77.2 millions d'actions, un RVOL journée entière de 1.5.
Ce chiffre de clôture peut sembler modeste à côté des captures d'écran de valeurs à dix fois leur moyenne ; savoir s'il l'est vraiment est une question de distribution, mesurée ci-dessous.
Qu'est-ce qu'un volume relatif élevé ?
Les forums de trading avancent des seuils du type « un RVOL au-dessus de 2 est élevé ». Voici la version mesurée : le RVOL journée entière de chaque action et ETF cotés aux États-Unis dont le volume quotidien moyen sur 20 jours dépasse 5 millions de titres (avec 20 séances complètes d'historique), mis en percentiles sur l'ensemble du groupe pour la dernière séance terminée dans nos données. Une précision sur l'étiquette : le filtre compte des actions, pas des dollars, si bien que ce groupe à fort volume va des méga-capitalisations et des ETF jusqu'aux petites valeurs bon marché à forte rotation ; un fort volume en titres n'est pas synonyme de négociation facile.
Le SQL exact derrière chaque chiffre
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 percentileLa valeur médiane de ce groupe à fort volume s'est négociée à 0.86 fois sa propre moyenne 20 jours. Neuf valeurs sur dix sont restées sous 1.41, et une sur cent seulement a dépassé 2.92. Replacez la séance de MU de la section précédente dans ce tableau et elle cesse de paraître modeste : même les valeurs actives passent la plupart de leurs journées près de leur propre moyenne ; les multiples de cette moyenne sont rares.
La queue basse compte aussi : le 10e percentile se situait à 0.07. Des lectures aussi basses signalent le plus souvent une action dont la moyenne 20 jours porte encore une séance énorme : après un pic, le dénominateur gonflé maintient le RVOL bas pendant des semaines. La fenêtre a une mémoire, dans les deux sens.
Une réserve : il s'agit de la coupe d'une seule séance ; les percentiles dérivent d'un jour à l'autre, et les journées d'événements de marché (rééquilibrages d'indices, expirations d'options) peuvent soulever toute la courbe.
Quelles actions ont eu un volume inhabituel ? Le classement RVOL
Même univers, classé (la version hebdomadaire permanente vit sur actions à volume inhabituel cette semaine) : les dix plus hauts RVOL journée entière de la séance du 2026-07-17 parmi les valeurs échangeant plus de 5 millions d'actions par jour en moyenne, le tableau qu'un screener signalerait comme volume inhabituel. Le filtre exige 20 séances complètes d'historique : les cotations récentes n'ont pas de moyenne 20 jours significative et rempliraient sinon le tableau d'artefacts.
Le SQL exact derrière chaque chiffre
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 10La tête du classement, MUU, a imprimé 70.2 millions d'actions contre une moyenne 20 jours de 6.9 millions, soit un RVOL de 10.2. Chaque ligne a dépassé sa propre moyenne. Ce genre de tableau penche loin des méga-capitalisations connues du grand public : doubler une moyenne déjà énorme demande un nombre extraordinaire d'actions, tandis qu'une valeur plus petite peut multiplier sa bande en une seule séance.
Notes sur les données : sélection de la séance et exclusions
Les deux tableaux classés utilisent le même univers et la même règle de séance. Une séance candidate ne compte comme terminée que lorsque la bande de SPY pour cette date atteint au moins 60 % du volume moyen de SPY sur ses 20 séances précédentes : les données du jour le plus récent arrivent avec un décalage, et ce contrôle évite de lire une journée partiellement chargée comme une séance finie. Les deux tableaux excluent aussi un symbole que les Bourses ont récemment réattribué à une nouvelle cotation : les flux des fournisseurs portent l'historique de deux sociétés différentes sous ce symbole, si bien que sa moyenne 20 jours n'est pas une référence significative. La liste d'exclusion dans le SQL est maintenue en phase avec nos contrôles d'identité des symboles à chaque rafraîchissement ; tout symbole réutilisé nouvellement repéré est ajouté de la même façon.
FAQ
Qu'est-ce qu'un bon niveau de RVOL ?
Il n'existe pas de seuil officiel. Mesurée sur les actions américaines à fort volume lors de la dernière séance terminée dans nos données, la valeur médiane tournait à 0.86 fois sa moyenne 20 jours, le 90e percentile était à 1.41 et le 99e à 2.92.
Que signifie un RVOL de 2 ?
L'action a échangé deux fois son volume moyen sur la fenêtre mesurée, en général les 20 dernières séances. L'heure compte : un 2 face à une moyenne à la même heure de la journée est une lecture forte en cours de séance ; un 2 à la clôture marque une journée au double du rythme normal.
Comment calculer le volume relatif en intraday ?
Divisez le cumul de volume du jour par le cumul moyen à la même heure sur votre fenêtre de référence. Diviser un total de milieu de matinée par une moyenne journée entière sous-estime fortement la lecture : à 10 h 00, SPY n'a typiquement réalisé que 12.2 % de son volume final de la journée.
Le volume relatif inclut-il la préouverture et l'after-hours ?
Les conventions varient selon les plateformes ; cette page compte chaque barre d'une minute du jour calendaire en heure de l'Est, séances étendues comprises. Pour SPY, l'apport de la préouverture est visiblement faible : une médiane de 3.7 milliers d'actions par minute dans la tranche de 9 h 00 contre 136.9 milliers juste après l'ouverture.
Un volume relatif élevé est-il haussier ou baissier ?
Ni l'un ni l'autre. Le RVOL mesure la participation, pas la direction : une bande chargée apparaît aussi bien lors des meilleures journées d'une action que lors des pires. Les séances à fort RVOL ont historiquement coïncidé avec les résultats, les changements d'indices et l'actualité de premier plan ; le chiffre dit que la foule était présente, pas de quel côté elle penche.
Chaque panneau ci-dessus porte le SQL exact qui l'a produit : ouvrez-en un, remplacez le ticker par le vôtre et mesurez le RVOL des valeurs que vous négociez réellement sur le terminal Strasmore.