RVOL 상대 거래량 뜻과 활용 방법
RVOL(Relative Volume, 상대 거래량)은 평균 대비 현재 거래량을 나타냅니다. 1보다 높으면 평소보다 활발한 거래를 의미합니다.
상대 거래량(RVOL)은 특정 주식의 최근 평균 거래량 대비 현재 거래가 얼마나 활발한지를 측정합니다. 이는 해당 세션의 거래량을 보통 직전 20거래일 동안의 평균 일일 거래량으로 나눈 값입니다. RVOL이 1이면 평상시와 같은 거래 수준을 의미하며, 2는 평소보다 두 배 많은 주식이 거래되었음을 나타냅니다. 0.5는 평소의 절반 속도로 거래가 진행되고 있음을 의미합니다. 이 페이지의 모든 수치는 분 단위의 US market(미국 시장) 데이터를 기반으로 측정되었으며, 각 패널에는 해당 데이터의 정확한 쿼리가 포함되어 있습니다.
상대 거래량(Relative Volume)이란 무엇인가? 쉬운 정의
단순 거래량(Raw volume) 자체만으로는 의미가 적습니다. 500만 주라는 수치는 대형주에게는 매우 조용한 거래량인 반면, 소형주에게는 일 년에 한 번 있을 법한 사건일 수 있습니다. 상대 거래량은 해당 주식의 평소 거래량과 비교하여 수치를 명확하게 보여줍니다.
RVOL = 당일 거래량 ÷ 주식의 평균 일일 거래량 (통상 최근 20거래일 기준)
가상의 사례를 들어보겠습니다. 일일 평균 거래량이 1,000만 주인 주식이 장 마감 시점에 2,500만 주를 기록했다면, RVOL은 2.5가 됩니다. (여기서 'print'는 통합 테이프(consolidated tape, 시장 전체의 체결 기록)에 보고된 거래를 의미하며, 'the tape'는 트레이더들이 해당 기록을 지칭할 때 사용하는 약어입니다.) 20거래일 기준은 관행일 뿐이며, 플랫폼에 따라 10일, 30일 또는 50일을 사용하기도 합니다. 이는 대략 한 달간의 거래 기간을 의미합니다. 이 기간은 거래소 일정의 특성도 반영합니다. 공휴일의 조기 종료는 평균 거래량에 일반적인 세션 거래량의 일부만 더하게 됩니다. 시장 공휴일 및 조기 종료에서 해당 일정들을 확인할 수 있습니다.
트레이더들이 상대 거래량(RVOL)을 주시하는 이유는 무엇인가?
RVOL은 방향성이 아닌 참여도를 측정하는 지표입니다. RVOL이 높은 날은 실적 발표, 지수 편입, 주요 뉴스 등 식별 가능한 이벤트와 밀접하게 연관됩니다. 높은 거래량을 동반한 가격 변동은 다수의 참여자가 뒷받침하고 있음을 의미합니다. 반면 RVOL이 0.3인 상황에서의 동일한 가격 변동은 소수의 주문에 의한 결과일 수 있습니다. 거래 활동은 유동성과도 직결됩니다. 여러 종목 중 거래량이 가장 적은 종목은 매수-매도 스프레드(bid-ask spreads)가 가장 넓게 형성됩니다. 이는 하루 종일 양방향 호가를 제시하는 마켓 메이커(market makers)에 의해 결정되며, 개별 종목의 경우 거래가 가장 활발한 날보다 가장 한산한 날에 호가 폭이 넓어지는 경향이 있습니다. (거래량은 또 다른 주요 거래량 기반 기준점인 VWAP, 거래량 가중 평균 가격(volume-weighted average price)의 근거가 되기도 합니다.)
상대 거래량(RVOL) 계산법 — 그리고 시간대별 함정
전일 거래량 계산은 한 번의 나눗셈으로 이루어진다. 세션 총 거래량을 20일 평균 일일 거래량으로 나눈 값이다. 이 수치는 장 마감 후에만 정확하다. 함정은 장 중에 이를 계산하는 것이다. 오전 10시 30분 시점의 누적 거래량은 당연히 전체 거래량의 일부에 불과하므로, 오전의 급격한 거래량 증가도 거래 부진으로 나타날 수 있다. 장중 거래량은 시간 흐름에 따라 U자형 곡선을 그리며, 모든 장중 RVOL은 이 형태를 기준으로 시작해야 한다.
아래는 SPY(S&P 500 ETF)를 기준으로 측정한 형태이다. 지난 30일간의 완료된 세션 동안(연장 시간인 동부 표준시 오전 4시부터 오후 8시 포함) 각 30분 단위 시간대별 분당 중앙값 거래 주식 수이다.
모든 수치 뒤에 숨겨진 정확한 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_time정규 거래 시작 후 첫 30분인 9시 30분 시간대의 분당 중앙값은 136 천 주였다. 이는 바로 직전인 9시 프리마켓(premarket) 시간대의 3.5 천 주와 대비된다. 거래 속도는 12시 30분 시간대에 49.5 천 주로 감소한 뒤, 장 마감 시점까지 다시 증가한다. 3시 30분 시간대에는 종가 경매를 앞두고 점심시간의 저점보다 훨씬 높은 168.3 천 주를 기록했다. 오후 4시 종소리가 울린 후 분당 거래 속도는 시간 외 거래로 접어들며 급격히 떨어진다.
장중 상대 거래량(RVOL): 시간대별 보정
이 방식은 분모를 변경합니다. 오늘의 누적 거래량을 동일한 시각의 평균 누적 거래량과 비교합니다. 이를 위해서는 각 시각에 일반적인 일일 거래량 중 얼마만큼이 완료되었는지 알아야 합니다. 여기서는 SPY의 직전 20거래일 데이터를 기준으로 측정했습니다.
모든 수치 뒤에 숨겨진 정확한 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정규 거래 시작 후 30분이 지난 오전 10시까지, SPY는 통상 하루 전체 거래량의 12.4%만을 기록합니다. 정오에는 34.8%, 오후 2시에는 51.1%, 오후 3시 30분에는 여전히 67.3%에 불과합니다. 장 마감 시각인 오후 4시에도 총 거래량은 85.7% 수준입니다. 그 외의 모든 거래는 16:00 정각 또는 그 이후에 보고되며, 대부분은 종가 경매 및 기타 장 마감 거래가 체결되는 장 마감 직후 몇 분 사이에 발생합니다. 시간 외 거래(after-hours session) 자체는 거래량이 훨씬 적습니다. 이는 위 차트의 급락 구간과 일치합니다. 장 마감 시점에 하루 전체 거래량의 상당 부분이 여전히 보고되고 있음에도 불구하고, 분당 거래 속도는 급격히 떨어집니다. 시간 보정된 오전 RVOL은 오늘의 누적 거래량을 20일 평균에 체크포인트 점유율을 곱한 값으로 나눕니다. 주의할 점은 이 일정은 SPY 기준이라는 것입니다. 각 주식은 고유의 거래 패턴을 가지며, 아래의 예시는 특정 종목 하나를 측정한 결과입니다.
작업 예시: 대규모 거래가 발생한 실제 세션 (MU)
2026년 6월은 Micron(MU)에게 거래량이 많은 달이었습니다. MU 2026년 6월 심층 분석에서 전체 거래 내역을 살펴봅니다. 다음은 해당 월의 단일 최대 거래량 세션이며, RVOL(Relative Volume, 상대 거래량) 계산을 두 가지 방식으로 수행한 결과입니다.
모든 수치 뒤에 숨겨진 정확한 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 million(백만) 주를 기록했습니다. 이는 이전 20개 세션의 동일 시간대 평균인 17.3 million(백만) 주와 비교했을 때, 시간 조정 RVOL이 1.9입니다. 해당 오전 총 거래량을 일일 평균인 51 million(백만) 주로 나누면 단순 수치는 0.64가 됩니다. 평소보다 거의 두 배 빠른 속도로 진행된 오전 거래량임에도 불구하고, 겉보기에는 평균 미만의 거래량을 보인 날입니다. 해당 세션은 77.2 million(백만) 주로 마감되었으며, 일일 RVOL은 1.5를 기록했습니다.
평균 대비 10배의 거래량을 기록한 종목들의 스크린샷과 비교하면 이 종목의 종가 거래량은 적어 보일 수 있습니다. 이것이 실제로 적은 수준인지는 다음에 측정할 분포(distribution)를 통해 확인해야 합니다.
무엇을 높은 상대 거래량으로 간다는 것인가?
거래 포럼에서는 "RVOL(Relative Volume, 상대 거래량)이 2를 초과하면 높다"와 같은 기준을 제시하곤 합니다. 여기에는 측정된 기준이 있습니다. 20일 평균 일일 거래량이 500만 주를 초과하고(이전 20거래일의 데이터가 모두 존재하는 경우) 미국에 상장된 모든 주식 및 ETF를 대상으로, 당사 데이터 내 최근 완료된 세션의 그룹 내 백분위수를 산출했습니다. 라벨에 관한 참고 사항: 이 스크린은 달러 금액이 아닌 주식 수를 기준으로 계산합니다. 따라서 이 고거래량 그룹에는 대형주와 ETF부터 저가형 고회전 소형주까지 포함됩니다. 높은 주식 거래량이 곧 높은 유동성을 의미하는 것은 아닙니다.
모든 수치 뒤에 숨겨진 정확한 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.73배를 기록했습니다. 10개 종목 중 9개는 1.37 미만이었으며, 100개 중 단 하나만이 4.71를 넘었습니다. 이전 섹션의 MU 세션을 이 표와 비교해 보면 결코 낮지 않다는 것을 알 수 있습니다. 거래가 활발한 종목이라도 대부분의 날에는 자신의 평균 근처에서 거래되며, 평균의 배수로 거래되는 경우는 드뭅니다.
하위 구간도 중요합니다. 10백분위수는 0.11를 기록했습니다. 이처럼 낮은 수치는 대개 20일 평균에 여전히 하나의 거대한 세션이 포함된 종목을 나타냅니다. 급등 이후에는 부풀려진 분모로 인해 몇 주 동안 RVOL이 낮게 유지됩니다. 데이터 윈도우는 양방향 모두에서 기억력을 가집니다.
주의 사항: 이것은 단일 세션의 단면입니다. 백분위수는 매일 변동하며, 시장 전체의 이벤트 발생일(index rebalance, option expiration)에는 곡선 전체가 상승할 수 있습니다.
어떤 종목의 거래량이 이례적이었는가? RVOL 리더보드
동일한 유니버스(Universe) 내에서 순위를 매겼습니다(주간 버전은 이번 주 이례적 거래량 종목에서 확인 가능합니다). 일평균 거래량이 500만 주를 초과하는 종목 중 2026-07-21 세션에서 가장 높은 일간 RVOL(Relative Volume, 상대적 거래량)을 기록한 10개 종목입니다. 이 목록은 스크리너가 이례적 거래량으로 분류할 만한 종목들로 구성됩니다. 스크리너는 직전 20거래일의 데이터를 요구합니다. 최근 상장된 종목은 유의미한 20일 평균치가 없으므로, 데이터 오류를 방지하기 위해 제외됩니다.
모든 수치 뒤에 숨겨진 정확한 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리더보드 상위 종목인 LBGJ는 20일 평균인 5.1 million 주 대비 169.2 million 주를 기록하며 33.3의 RVOL을 나타냈습니다. 모든 종목이 각자의 평균치를 상회했습니다. 이러한 리더보드는 대형주(Mega-caps)에서는 나타나기 어렵습니다. 이미 거대한 평균 거래량을 두 배로 늘리려면 엄청난 수의 주식이 필요하지만, 시가총액이 작은 종목은 단 한 세션 만에 거래량을 몇 배로 늘릴 수 있기 때문입니다.
데이터 참고 사항: 세션 선택 및 제외 기준
두 순위 표는 동일한 유니버스와 동일한 세션 규칙을 사용합니다. 후보 세션은 해당 날짜의 SPY 거래량이 SPY 자체의 직전 20거래일 평균 거래량의 최소 60%에 도달해야 완료된 것으로 간주됩니다. 최신 데이터는 지연되어 도착하므로, 이 검증을 통해 데이터가 불완전한 날이 완료된 세션으로 오인되는 것을 방지합니다. 또한 두 표 모두 거래소가 최근 새로운 상장 종목으로 재지정한 티커(Ticker) 하나를 제외합니다. 데이터 제공업체의 피드에 해당 티커로 두 회사의 이력이 섞여 있어, 20일 평균치를 유의미한 기준점으로 사용할 수 없기 때문입니다. SQL 내 제외 목록은 매번 새로고침할 때마다 당사의 심볼 식별 검사와 동기화됩니다. 새로 식별된 재사용 심볼도 동일한 방식으로 추가됩니다.
FAQ
적절한 RVOL(Relative Volume, 상대 거래량) 수치는 얼마인가요?
공식적인 기준치는 존재하지 않습니다. 당사 데이터의 가장 최근 거래일을 기준으로 거래량이 많은 미국 주식을 측정했을 때, 중앙값은 20일 평균의 0.73배였으며, 상위 10%는 1.37, 상위 1%는 4.71였습니다.
RVOL이 2라는 것은 무엇을 의미하나요?
해당 주식이 측정 기간(통상 직전 20거래일) 동안 평균 거래량의 두 배만큼 거래되었음을 의미합니다. 시간대가 중요합니다. 동일 시간대 평균 대비 2배라면 장 중 매우 강력한 수치이며, 장 마감 시점의 2배는 평소보다 두 배 빠른 속도로 거래가 이루어졌음을 나타냅니다.
장중 상대 거래량은 어떻게 계산하나요?
오늘의 누적 거래량을 설정된 기간 내 동일 시간대의 평균 누적 거래량으로 나눕니다. 오전 시간대의 총량을 하루 전체 평균으로 나누면 수치가 실제보다 크게 낮게 측정됩니다. 예를 들어 오전 10시 기준으로 SPY는 통상 하루 전체 거래량의 12.4%만을 완료한 상태입니다.
상대 거래량에 프리마켓(Premarket, 장전 거래)과 애프터아워스(After-hours, 시간 외 거래)가 포함되나요?
플랫폼마다 기준이 다릅니다. 본 페이지는 시간 외 거래를 포함하여 동부 표준시 기준 하루의 모든 분봉을 집계합니다. SPY의 경우 프리마켓의 기여도는 매우 낮습니다. 9시 시간대의 중앙값은 분당 3.5%천 주인 반면, 개장 직후에는 136%천 주에 불과합니다.
높은 상대 거래량은 상승 신호인가요, 하락 신호인가요?
둘 다 아닙니다. RVOL은 방향성이 아닌 참여도를 측정합니다. 대량 거래는 주식의 상승일과 하락일 모두에서 나타납니다. 높은 RVOL 세션은 역사적으로 실적 발표, 지수 편입/편출, 주요 뉴스 발표 시점과 일치해 왔습니다. 이 수치는 투자자들이 몰렸음을 의미할 뿐, 어느 방향으로 움직일지는 알려주지 않습니다.
위의 모든 패널에는 해당 데이터를 생성한 SQL 쿼리가 포함되어 있습니다. 쿼리를 열어 원하는 티커(Ticker)로 변경하면 Strasmore 터미널에서 실제 거래하는 종목의 RVOL을 측정할 수 있습니다. SQL 쿼리 확인하기