IV Rank와 IV Percentile 차이 및 계산 공식
IV Rank와 IV Percentile의 정의와 계산 공식을 상세히 설명합니다. 두 지표의 산출 방식 차이를 비교하고 동일한 Ticker에서 수치가 다르게 나타나는 이유와 실제 사례를 통해 내재변동성 지표를 해석하는 방법을 정리했습니다.
IV Rank와 IV Percentile의 차이
IV Rank와 IV Percentile은 동일한 데이터를 바탕으로 산출되는 두 가지 산술적 지표입니다. IV Rank는 현재의 내재변동성(Implied Volatility, IV)이 지난 52주간의 최저치와 최고치 범위 내에서 어느 지점에 위치하는지를 측정합니다. 반면 IV Percentile은 설정된 기간 내 전체 거래일 중 현재의 IV 수치보다 낮은 값을 기록한 날이 며칠인지를 백분율로 나타냅니다. 동일한 Ticker라 하더라도 오후 장 마감 시점에 따라 한 지표는 18, 다른 지표는 70으로 나타날 수 있습니다.
두 가지 공식
IV rank(내재변동성 순위) = (현재 IV - 52주 최저 IV) / (52주 최고 IV - 52주 최저 IV) x 100
IV percentile(내재변동성 백분위수) = (해당 기간 중 오늘보다 IV가 낮았던 거래일 수) / (해당 기간의 총 거래일 수) x 100
두 지표 모두 0에서 100 사이의 값을 갖습니다. 두 지표를 산출하려면 주식의 일별 내재변동성(implied volatility) 시계열과 관측 기간(일반적으로 252 거래일)이라는 두 가지 입력값이 필요합니다. 내재변동성 자체는 옵션 시장에서 실시간 옵션 가격을 역산하여 도출한, 해당 주식이 향후 얼마나 움직일지에 대한 연율화된 추정치이며, 내재변동성이 측정하는 것에서 기초부터 다룹니다.
이 두 지표의 차이는 관측 기간 내 데이터를 얼마나 활용하느냐에 있습니다. IV rank는 252일 중 단 이틀, 즉 최고치와 최저치만을 고려합니다. 그 사이의 모든 값은 무시됩니다. 반면 IV percentile은 모든 거래일을 동일하게 취급하며, 각 수치 간의 격차는 고려하지 않습니다. 하나는 범위 내에서의 위치를 나타내고, 다른 하나는 날짜의 빈도를 나타냅니다.
직접 검증 가능한 예시
가상의 10일간 내재변동성(IV, Implied Volatility) 수열을 가정해 봅니다. 각 거래일의 수치는 22, 24, 21, 60, 26, 25, 23, 27, 24, 그리고 오늘 28입니다. 최저치는 21이고 최고치는 60입니다.
IV rank: (28 - 21) / (60 - 21) x 100 = 7 / 39 x 100 = 17.9입니다.
IV percentile: 10개의 수치 중 22, 24, 21, 26, 25, 23, 24 등 7개가 28보다 낮으므로, 7 / 10 x 100 = 70.0이 됩니다.
IV rank 17.9는 변동성이 저렴하다는 것을 의미합니다. IV percentile 70은 해당 기간 대부분의 날보다 변동성이 높았음을 의미합니다. 두 지표 모두 동일한 10개의 숫자를 정확하게 설명합니다.
이제 수치 하나를 변경해 봅니다. 60을 30으로 바꾸고 나머지 9개 수치는 그대로 둡니다. IV rank는 (28 - 21) / (30 - 21) x 100 = 77.8이 됩니다. 반면 IV percentile은 70.0으로 변함이 없습니다. 최고치를 기록했던 단 하루의 거래일이 IV rank에는 60포인트만큼의 영향을 주었지만, IV percentile에는 아무런 영향을 주지 못한 것입니다.
이것이 IV rank의 구조적 취약점입니다. 특정 기간 내의 단발성 급등, 즉 실적 발표로 인한 갭 상승이나 하루 동안의 시장 공포는 분모를 크게 확대하여, 해당 급등이 옵션 체인에서 사라진 이후에도 12개월 동안 rank를 낮은 수준에 고착시킵니다. 두 지표가 크게 엇갈릴 경우, 이는 대개 해당 기간 내 이상치(outlier)가 존재함을 나타내며, 변동성이 실제로 머물렀던 위치를 더 충실하게 설명하는 지표는 percentile입니다. IV rank는 변동성 범위가 완만하고 양쪽 극단값에 여러 거래일이 분포할 때 더 유용한 지표입니다. 두 지표 모두 변동성의 방향성에 대해서는 아무것도 말해주지 않습니다.
실제 내재변동성(IV) 시계열의 모습
다음은 두 공식이 모두 사용하는 원천 데이터입니다. 아래 패널은 만기까지 20일에서 45일 남은 계약 중 주가 대비 5% 이내에 있는 옵션을 사용하여 AAPL의 일간 등가격(at-the-money) 내재변동성 수치를 산출한 뒤, 이를 주간 단위로 평균한 것입니다.
모든 수치 뒤에 숨겨진 정확한 SQL
WITH daily AS
(
SELECT
date,
avg(toFloat64(implied_volatility)) * 100 AS atm_iv
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date >= today() - 371
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 20 AND 45
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05
GROUP BY date
)
SELECT
toString(toMonday(date)) AS week,
formatDateTime(toMonday(date), '%b %e, %Y') AS week_label,
round(avg(atm_iv), 2) AS aapl_atm_iv_pct,
round(min(atm_iv), 2) AS week_low_iv_pct,
round(max(atm_iv), 2) AS week_high_iv_pct
FROM daily
GROUP BY toMonday(date)
ORDER BY toMonday(date)이 시계열은 54개의 주간 데이터 포인트를 포함하며, Jul 28, 2025 주차의 평균 30.03%부터 Aug 3, 2026 주차의 27.7%까지 이어집니다. 이 선의 형태에 따라 순위(rank)와 백분위수(percentile)의 일치 여부가 결정됩니다. 높고 고립된 급등 구간이 하나 있는 선은 두 지표를 갈라놓습니다. 반면 안정적인 범위 내에서 움직이는 선은 두 지표를 유사하게 유지합니다. 당사의 AAPL 내재변동성 페이지에서 이 종목의 시계열 변화를 추적할 수 있으며, 과거 데이터 없이 절대적인 수준만을 확인하려면 IV 30%는 높은 수준인가를 참조하십시오.
8개 티커에 걸친 IV rank와 IV percentile 비교
동일한 공식과 산출 기간(lookback)을 적용하여 유동성이 높은 8개 종목을 대상으로 한 세션의 데이터를 분석했습니다. gap 열은 두 지표 간의 절대적 차이를 나타냅니다.
모든 수치 뒤에 숨겨진 정확한 SQL
WITH daily AS
(
SELECT
underlying_symbol AS symbol,
date,
avg(toFloat64(implied_volatility)) * 100 AS atm_iv
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'TSLA', 'SPY', 'QQQ', 'KO')
AND date >= today() - 371
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 20 AND 45
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05
GROUP BY symbol, date
),
latest AS
(
SELECT
symbol,
argMax(atm_iv, date) AS iv_now,
max(date) AS as_of
FROM daily
GROUP BY symbol
)
SELECT
d.symbol AS symbol,
round(100 * (l.iv_now - min(d.atm_iv)) / nullIf(max(d.atm_iv) - min(d.atm_iv), 0), 1) AS iv_rank,
round(100 * countIf(d.atm_iv < l.iv_now) / count(), 1) AS iv_percentile,
round(abs(iv_rank - iv_percentile), 1) AS gap,
formatDateTime(any(l.as_of), '%b %e, %Y') AS as_of_label
FROM daily AS d
INNER JOIN latest AS l ON l.symbol = d.symbol
GROUP BY d.symbol, l.iv_now
ORDER BY gap DESCAug 3, 2026 기준, 표에서 가장 큰 격차를 보이는 종목은 AAPL로 그 차이는 35.6 포인트입니다. 해당 종목의 IV rank는 32.4인 반면, IV percentile은 68를 기록했습니다. 반면 TSLA은 두 지표 간 차이가 6.5 포인트 이내로 가장 작았습니다. 특정 지표를 기준으로 스크리닝을 수행하면 결과 목록이 달라지는데, 이는 사용 중인 플랫폼이 어떤 지표를 출력하는지 파악해야 하는 실질적인 이유입니다. IV rank가 가장 높은 종목 스크리너는 이 중 첫 번째 지표를 기준으로 시장을 정렬합니다.
표에 나타난 각 rank의 산출 범위
현재가, 저가, 고가 열의 값을 rank 공식에 대입하면 위 표의 rank 열 값이 도출됩니다.
모든 수치 뒤에 숨겨진 정확한 SQL
WITH daily AS
(
SELECT
underlying_symbol AS symbol,
date,
avg(toFloat64(implied_volatility)) * 100 AS atm_iv
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'TSLA', 'SPY', 'QQQ', 'KO')
AND date >= today() - 371
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 20 AND 45
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05
GROUP BY symbol, date
),
latest AS
(
SELECT
symbol,
argMax(atm_iv, date) AS iv_now,
max(date) AS as_of
FROM daily
GROUP BY symbol
)
SELECT
d.symbol AS symbol,
round(l.iv_now, 2) AS current_iv_pct,
round(min(d.atm_iv), 2) AS low_52w_iv_pct,
round(max(d.atm_iv), 2) AS high_52w_iv_pct,
count() AS observations,
formatDateTime(any(l.as_of), '%b %e, %Y') AS as_of_label
FROM daily AS d
INNER JOIN latest AS l ON l.symbol = d.symbol
GROUP BY d.symbol, l.iv_now
ORDER BY current_iv_pct DESC왜 두 플랫폼이 동일한 티커에 대해 서로 다른 값을 보고하는가
두 공식 모두 모호하지 않습니다. 문제는 입력값입니다. 데이터 제공업체는 어떤 내재변동성(IV, Implied Volatility) 시리즈를 사용하는지 거의 공개하지 않으며, 일반적으로 선택되는 방식은 체인의 양 끝단에 위치합니다. 30일 만기 IV를 기준으로 30일 전후의 두 만기 사이에서 보간법을 사용하거나, 훨씬 변동성이 큰 근월물 등가격(ATM, At-the-money) 계약을 사용합니다. 일부 플랫폼은 전체 체인의 평균을 사용하기도 합니다. 본 패널은 동일한 주식 하나를 대상으로 52주 동안 세 가지 IV 입력 정의를 적용하여 분석했습니다.
모든 수치 뒤에 숨겨진 정확한 SQL
WITH contracts AS
(
SELECT
date,
days_to_expiry,
abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) AS moneyness,
toFloat64(implied_volatility) * 100 AS iv_pct
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date >= today() - 371
AND iv_converged = 1
AND volume > 0
),
defs AS
(
SELECT
spec.1 AS iv_series,
spec.2 AS min_dte,
spec.3 AS max_dte,
spec.4 AS max_moneyness
FROM
(
SELECT arrayJoin([
('Near 30 day ATM', 20, 45, 0.05),
('Front month ATM', 1, 19, 0.05),
('Wide net, any expiry', 1, 400, 0.30)
]) AS spec
)
),
daily AS
(
SELECT
s.iv_series AS iv_series,
c.date AS date,
avg(c.iv_pct) AS atm_iv
FROM contracts AS c
CROSS JOIN defs AS s
WHERE c.days_to_expiry BETWEEN s.min_dte AND s.max_dte
AND c.moneyness < s.max_moneyness
GROUP BY iv_series, date
),
latest AS
(
SELECT
iv_series,
argMax(atm_iv, date) AS iv_now
FROM daily
GROUP BY iv_series
)
SELECT
d.iv_series AS iv_series,
round(l.iv_now, 2) AS current_iv_pct,
round(min(d.atm_iv), 2) AS low_52w_iv_pct,
round(max(d.atm_iv), 2) AS high_52w_iv_pct,
round(100 * (l.iv_now - min(d.atm_iv)) / nullIf(max(d.atm_iv) - min(d.atm_iv), 0), 1) AS iv_rank,
round(100 * countIf(d.atm_iv < l.iv_now) / count(), 1) AS iv_percentile
FROM daily AS d
INNER JOIN latest AS l ON l.iv_series = d.iv_series
GROUP BY d.iv_series, l.iv_now
ORDER BY current_iv_pct DESC최근 세션에서 Wide net, any expiry는 37.6%을 기록한 반면 Near 30 day ATM는 27.7%를 기록했으며, 이들의 IV 순위는 각각 23.1과 32.4로 나타났습니다. 같은 주식, 같은 세션, 같은 공식임에도 입력값의 정의가 다르기 때문입니다.
두 번째 변수는 과거 데이터 조회 기간(lookback length)입니다. 52주가 관례적으로 사용되지만, 많은 플랫폼이 30일, 60일 또는 90일 설정도 함께 제공합니다.
모든 수치 뒤에 숨겨진 정확한 SQL
WITH daily AS
(
SELECT
date,
avg(toFloat64(implied_volatility)) * 100 AS atm_iv
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date >= today() - 800
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 20 AND 45
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05
GROUP BY date
),
latest AS
(
SELECT
argMax(atm_iv, date) AS iv_now,
max(date) AS as_of
FROM daily
),
windows AS
(
SELECT
spec.1 AS lookback_label,
spec.2 AS lookback_days
FROM
(
SELECT arrayJoin([
('1 month', 30),
('3 months', 90),
('6 months', 180),
('12 months', 371),
('24 months', 742)
]) AS spec
)
)
SELECT
w.lookback_label AS lookback_label,
round(100 * (l.iv_now - min(d.atm_iv)) / nullIf(max(d.atm_iv) - min(d.atm_iv), 0), 1) AS iv_rank,
round(100 * countIf(d.atm_iv < l.iv_now) / count(), 1) AS iv_percentile,
count() AS observations
FROM daily AS d
CROSS JOIN windows AS w
CROSS JOIN latest AS l
WHERE d.date >= l.as_of - w.lookback_days
GROUP BY w.lookback_label, w.lookback_days, l.iv_now
ORDER BY w.lookback_days1 month 조회 기간 설정에서 이 주식의 IV 순위는 0.4, IV 백분위수는 4.8입니다. 기간을 24 months로 늘리면 동일한 세션의 수치는 23.4와 63.3으로 변합니다. 해당 행들 사이에서 옵션 체인에 변화가 있었던 것은 아닙니다. 오직 조회 기간만 변경되었습니다. 두 화면이 특정 티커에 대해 서로 다른 값을 보여준다면, 가장 먼저 조회 기간 설정과 IV 시리즈를 확인해야 합니다.
두 수치가 활용되는 방식
두 수치 모두 전략 선택을 위한 필터로 작동하며, 결코 예측 도구로 사용되지 않습니다. 커버드콜(covered calls)이나 현금 담보 풋옵션(cash secured puts) 매도와 같이 옵션 프리미엄을 매도하는 트레이더들은 일반적으로 해당 기간 동안 주식이 실제로 움직인 폭보다 옵션 가격이 더 큰 변동성을 반영하고 있는 높은 수치를 선호합니다. 반대로 프리미엄을 매수하는 트레이더들은 동일한 논리에 따라 낮은 수치를 찾습니다. 이 작업에는 단순 IV(내재변동성, Implied Volatility) 수치보다 상대적 점수가 더 유용합니다. 어떤 주식에게 40%의 IV는 평범한 수준일 수 있지만 다른 주식에게는 극단적인 수치일 수 있기 때문이며, 해당 주식의 과거 이력과 비교하여 등급을 매기면 이러한 문제를 해결할 수 있습니다. 높은 내재변동성이 좋은가라는 질문은 각 측면의 장단점을 분석하여 다룹니다.
수치가 답해줄 수 없는 한 가지 주의사항이 있습니다. 높은 수치는 더 높아질 수 있으며, 월요일에 95였던 순위가 포지션의 변화 없이도 금요일에는 60이 될 수 있습니다. 두 점수 모두 방향성에 대한 정보는 제공하지 않습니다. 내재변동성이 높다는 것은 시장이 큰 움직임을 가격에 반영했다는 의미일 뿐, 그 방향이 어디인지는 나타내지 않습니다.
자주 묻는 질문(FAQ)
IV rank와 IV percentile 중 무엇이 더 나은가?
두 지표는 서로 다른 질문에 답합니다. IV percentile은 과거 데이터 기간(lookback window)에 극단적인 급등락이 한 번 포함되어 있을 때 더 유용합니다. 단일 극단값과 비교하는 대신 날짜 수를 세기 때문입니다. IV rank는 범위 내 데이터가 고르게 분포되어 있을 때 더 직관적입니다. 오늘 수준이 12개월 최고치에 얼마나 근접했는지를 직접적으로 보여주기 때문입니다.
높은 IV rank란 어느 정도인가?
대부분의 트레이딩 데스크(trading desk)는 50을 넘으면 해당 종목의 자체 범위에서 상위 절반에 해당한다고 보며, 80을 넘으면 해당 종목 기준으로 확실히 높은 수준이라고 판단합니다. 이 점수는 구조적으로 상대적인 수치입니다. 따라서 변동성이 낮은 필수소비재 종목의 80과 변동성이 큰 성장주의 80은 절대적인 IV 수준에서 큰 차이가 있습니다.
IV rank와 IV percentile은 동일한 과거 데이터 기간을 사용하는가?
대개 두 지표 모두 252 거래일을 사용하지만, 대부분의 플랫폼에서 설정 변경이 가능하며 기본값은 제공업체마다 다를 수 있습니다. 위 패널은 동일한 종목이라도 기간 설정에 따라 점수가 다르게 나타날 수 있음을 보여줍니다. 두 지표의 결과가 다를 때 가장 먼저 확인해야 할 사항입니다.
IV rank가 0이나 100이 될 수 있는가?
그렇습니다. IV rank는 특정 종목의 내재변동성(IV)이 52주 신고가를 기록하는 날 100이 되고, 신저가를 기록하는 날 0이 됩니다. 오늘의 수치가 범위의 양 끝단이 되기 때문입니다. 반면 IV percentile은 오늘 당일의 세션이 분모에 포함되므로 양 끝단에 도달하는 경우가 드뭅니다.
IV는 변하지 않았는데 왜 IV rank가 바뀌는가?
데이터 기간은 매 세션마다 앞으로 이동합니다. 과거의 급등락이 52주 기간에서 벗어나면 분모인 최고값이 더 낮은 값으로 재설정되면서, 오늘의 IV가 그대로여도 rank는 상승합니다. IV crush는 또 다른 흔한 변수로, 실적 발표 직후 IV 자체가 급락하는 현상을 의미합니다.
여기에 있는 모든 패널은 그 아래에 정확한 SQL을 포함하고 있습니다. Strasmore 터미널에서 티커(ticker)를 바꾸면 다른 종목의 점수를 확인할 수 있습니다.