IV rank và IV percentile: Công thức và ví dụ
Tìm hiểu IV rank và IV percentile qua hai công thức, một ví dụ tự kiểm tra và trường hợp hai chỉ số lệch nhau rõ rệt trên cùng một ticker.
IV rank và IV percentile khác nhau ở hai phép tính dựa trên cùng một bộ dữ liệu. IV rank đo vị trí của implied volatility hôm nay trong biên độ 52 tuần, từ mức thấp nhất đến mức cao nhất. IV percentile tính tỷ lệ số ngày giao dịch trong khoảng thời gian xem xét có mức đóng cửa thấp hơn mức hôm nay. Cùng một ticker, vào cùng một buổi chiều, có thể đạt 18 theo một chỉ số và 70 theo chỉ số còn lại.
Hai công thức, viết đầy đủ
IV rank = (IV hiện tại trừ IV thấp nhất trong 52 tuần) / (IV cao nhất trong 52 tuần trừ IV thấp nhất trong 52 tuần) x 100
IV percentile = (số ngày giao dịch trong khoảng thời gian có IV thấp hơn IV hôm nay) / (tổng số ngày giao dịch trong khoảng thời gian) x 100
Cả hai đều nằm trong khoảng từ 0 đến 100. Cả hai cần cùng hai đầu vào: chuỗi biến động ngụ ý hằng ngày của cổ phiếu và một khoảng thời gian nhìn lại, thường là 252 ngày giao dịch. Bản thân biến động ngụ ý là ước tính thường niên của thị trường quyền chọn về mức độ biến động của cổ phiếu, được suy ra từ giá quyền chọn thực tế. biến động ngụ ý đo lường điều gì giải thích khái niệm này từ đầu.
Điểm khác biệt nằm ở mức độ dữ liệu trong khoảng thời gian mà mỗi chỉ báo sử dụng. IV rank chỉ xem xét đúng hai ngày trong 252 ngày: ngày có IV cao nhất và ngày có IV thấp nhất. Các mức IV ở giữa không ảnh hưởng đến kết quả. IV percentile xem xét mọi ngày như nhau và không quan tâm khoảng cách giữa các mức IV. Một chỉ báo đo vị trí trong một khoảng. Chỉ báo còn lại đếm số ngày.
Ví dụ minh họa có thể tự kiểm tra
Hãy lấy một chuỗi IV giả định trong mười ngày, mỗi phiên có một mức ghi nhận: 22, 24, 21, 60, 26, 25, 23, 27, 24 và hôm nay là 28. Mức thấp nhất là 21 và mức cao nhất là 60.
IV rank: (28 - 21) / (60 - 21) x 100 = 7 / 39 x 100 = 17,9.
Có bảy trong mười mức ghi nhận, gồm 22, 24, 21, 26, 25, 23 và 24, thấp hơn 28. Vì vậy, IV percentile: 7 / 10 x 100 = 70,0.
IV rank ở mức 17,9 cho thấy volatility đang ở mức thấp. IV percentile ở mức 70 cho thấy volatility từng thấp hơn mức hiện tại trong phần lớn số ngày của khoảng thời gian này. Cả hai đều mô tả đúng cùng một bộ mười số liệu.
Bây giờ thay đổi một giá trị. Thay 60 bằng 30 và giữ nguyên chín mức còn lại. IV rank trở thành (28 - 21) / (30 - 21) x 100 = 77,8. IV percentile không thay đổi, vẫn là 70,0. Một phiên duy nhất, tức phiên xác lập mức cao nhất, có ảnh hưởng 60 điểm đến IV rank nhưng hoàn toàn không ảnh hưởng đến IV percentile.
Đó là điểm yếu mang tính cấu trúc của IV rank. Một đợt tăng vọt đơn lẻ trong khoảng thời gian, chẳng hạn khoảng trống giá do công bố kết quả kinh doanh hoặc một phiên hoảng sợ, sẽ mở rộng mẫu số và ghim rank gần đáy trong mười hai tháng tiếp theo, rất lâu sau khi đợt tăng vọt đó không còn phản ánh trong chuỗi giá quyền chọn. Khi hai điểm số chênh lệch rõ rệt, nguyên nhân thường là có một outlier trong khoảng thời gian quan sát. Khi đó, percentile mô tả sát hơn mức độ volatility thực sự duy trì trong khoảng thời gian này. IV rank phù hợp hơn khi biên độ biến động tương đối ổn định và cả hai cực đều được xác lập trong nhiều hơn một phiên. Không chỉ số nào cho biết hướng biến động.
Hình dạng thực tế của một chuỗi IV
Đây là dữ liệu đầu vào mà cả hai công thức sử dụng. Biểu đồ bên dưới xây dựng chỉ số biến động hàm ý tại giá thực hiện (at the money) hằng ngày cho AAPL, dựa trên các hợp đồng còn từ 20 đến 45 ngày đến ngày đáo hạn và có giá thực hiện nằm trong phạm vi 5% so với giá cổ phiếu. Sau đó, chỉ số được lấy trung bình theo tuần.
Câu lệnh SQL chính xác đằng sau mỗi con số
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)Chuỗi này gồm 54 điểm dữ liệu theo tuần, bắt đầu từ tuần của Jul 28, 2025 với mức trung bình 30.03%, và kết thúc ở tuần của Aug 3, 2026 với mức 27.7%. Hình dạng của đường này quyết định việc rank và percentile có cho cùng một kết quả hay không. Một đường có một đỉnh tăng vọt đơn lẻ sẽ tạo ra sự khác biệt giữa hai thước đo. Một đường dao động trong một biên độ ổn định sẽ khiến chúng có kết quả gần nhau. Trang biến động hàm ý của AAPL theo dõi mã này theo thời gian. Nếu bạn chỉ quan tâm đến mức tuyệt đối mà không cần dữ liệu lịch sử, hãy xem IV 30% có cao không.
So sánh IV rank và IV percentile trên tám ticker
Cùng công thức, cùng khoảng thời gian nhìn lại, tám mã có thanh khoản tốt trong một phiên. Cột gap là khoảng cách tuyệt đối giữa hai điểm số.
Câu lệnh SQL chính xác đằng sau mỗi con số
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 DESCTính đến Aug 3, 2026, mức chênh lệch lớn nhất trong bảng là 35.6 điểm tại AAPL, khi IV rank ở mức 32.4 còn IV percentile là 68. Ở đầu kia của bảng, TSLA giữ khoảng cách giữa hai chỉ số trong phạm vi 6.5 điểm. Bộ lọc dựa trên một chỉ số sẽ trả về danh sách khác với bộ lọc dựa trên chỉ số còn lại. Đây là lý do thực tế để biết nền tảng của bạn hiển thị chỉ số nào. Bộ lọc cổ phiếu có IV rank cao nhất sắp xếp thị trường theo chỉ số đầu tiên.
Các dữ liệu đầu vào về biên độ được sử dụng cho mọi rank trong bảng
Đưa các cột hiện tại, thấp nhất và cao nhất vào công thức rank, bạn sẽ nhận lại cột rank ở trên.
Câu lệnh SQL chính xác đằng sau mỗi con số
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 DESCVì sao hai nền tảng báo các giá trị khác nhau cho cùng một ticker
Không công thức nào trong hai công thức này là mơ hồ. Vấn đề nằm ở các dữ liệu đầu vào. Các nhà cung cấp hiếm khi công bố chuỗi IV nào được sử dụng. Những lựa chọn phổ biến thường nằm ở hai đầu khác nhau của chuỗi dữ liệu: IV có kỳ hạn cố định 30 ngày, được nội suy giữa hai kỳ hạn nằm hai bên mốc 30 ngày; hoặc hợp đồng at-the-money của tháng gần nhất, vốn biến động mạnh hơn nhiều. Một số nền tảng lại lấy bình quân của toàn bộ chuỗi quyền chọn. Phần này chạy cùng một cổ phiếu qua ba định nghĩa về dữ liệu IV đầu vào trong cùng 52 tuần.
Câu lệnh SQL chính xác đằng sau mỗi con số
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 DESCTrong phiên gần nhất, Wide net, any expiry ghi nhận 37.6%, trong khi Near 30 day ATM ghi nhận 27.7%; IV rank của chúng lần lượt là 23.1 và 32.4. Cùng một cổ phiếu, cùng một phiên, cùng một công thức, nhưng định nghĩa về dữ liệu đầu vào khác nhau.
Yếu tố thứ hai là độ dài khoảng thời gian nhìn lại. 52 tuần là quy ước phổ biến. Nhiều nền tảng cũng cung cấp các tùy chọn 30, 60 hoặc 90 ngày.
Câu lệnh SQL chính xác đằng sau mỗi con số
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_daysVới khoảng thời gian nhìn lại 1 month, cổ phiếu này có IV rank là 0.4 và IV percentile là 4.8. Khi kéo dài khoảng thời gian lên 24 months, cùng phiên đó cho kết quả lần lượt là 23.4 và 63.3. Chuỗi quyền chọn không thay đổi giữa hai dòng dữ liệu. Chỉ có khoảng thời gian nhìn lại thay đổi. Khi hai màn hình cho kết quả khác nhau về một ticker, độ dài khoảng thời gian nhìn lại và chuỗi IV là hai yếu tố đầu tiên cần kiểm tra.
Cách sử dụng hai chỉ số
Cả hai chỉ số đều được dùng để sàng lọc việc lựa chọn chiến lược, không phải để dự báo. Những trader bán premium, trong đó có covered call và put có tài sản bảo đảm bằng tiền mặt, thường tìm các mức cao. Ở đó, quyền chọn được định giá cho mức biến động lớn hơn mức cổ phiếu thường ghi nhận trong khoảng thời gian được xét. Trader mua premium lại chú ý đến các mức thấp, vì logic tương tự diễn ra theo chiều ngược lại. Điểm số tương đối phù hợp hơn con số IV tuyệt đối cho mục đích này: IV 40% là mức bình thường với một cổ phiếu nhưng có thể là mức cực đoan với cổ phiếu khác. Việc so sánh một cổ phiếu với chính lịch sử của nó giúp loại bỏ vấn đề đó. Implied volatility cao có tốt không phụ thuộc vào sự đánh đổi ở mỗi phía.
Có một điểm mà các chỉ số này không thể trả lời thay bạn. Một mức cao có thể tiếp tục tăng. Xếp hạng 95 vào thứ Hai có thể trở thành xếp hạng 60 vào thứ Sáu dù vị thế của bạn không thay đổi. Không chỉ số nào cho biết hướng biến động: IV cao nghĩa là thị trường đã định giá một biến động lớn, nhưng không thể hiện quan điểm biến động sẽ đi theo hướng nào.
Câu hỏi thường gặp
IV rank hay IV percentile tốt hơn?
Hai chỉ báo này trả lời những câu hỏi khác nhau. IV percentile phù hợp hơn khi khoảng thời gian quan sát có một phiên tăng vọt mạnh, vì chỉ báo này đếm số ngày thay vì so sánh với một cực trị duy nhất. IV rank trực quan hơn khi dữ liệu trong khoảng dao động đủ dày, vì nó cho biết trực tiếp IV hôm nay đang gần mức cao nhất trong 12 tháng đến đâu.
IV rank ở mức nào được xem là cao?
Hầu hết trading desk xem mức trên 50 là nửa trên trong biên độ riêng của cổ phiếu, còn mức trên 80 là thực sự cao đối với mã đó. Điểm số này mang tính tương đối theo bản chất. Vì vậy, IV rank ở mức 80 trên một cổ phiếu hàng tiêu dùng ổn định và IV rank ở mức 80 trên một cổ phiếu tăng trưởng biến động mạnh thể hiện hai mức IV tuyệt đối rất khác nhau.
IV rank và IV percentile có dùng cùng khoảng thời gian quan sát không?
Thông thường, cả hai đều dùng 252 ngày giao dịch, dù người dùng có thể điều chỉnh thiết lập này trên hầu hết các nền tảng và giá trị mặc định thay đổi tùy nhà cung cấp. Bảng phía trên cho thấy cùng một cổ phiếu có điểm số khác nhau ở mỗi độ dài khoảng thời gian. Đây là điều đầu tiên cần kiểm tra khi hai công cụ cho kết quả không giống nhau.
IV rank có thể bằng 0 hoặc 100 không?
Có. IV rank đạt 100 vào ngày cổ phiếu ghi nhận mức cao mới trong 52 tuần của implied volatility, và đạt 0 khi lập mức thấp mới, vì mức IV hôm nay chính là một đầu mút của biên độ. IV percentile hiếm khi chạm một trong hai mức cực trị này, vì phiên hôm nay cũng nằm trong mẫu số.
Vì sao IV rank thay đổi dù IV không biến động?
Khoảng thời gian quan sát được cập nhật sau mỗi phiên. Khi một mức tăng vọt cũ rời khỏi 52 tuần gần nhất, mức cao trong mẫu số giảm xuống và IV rank tăng lên, dù IV hôm nay không đổi. IV crush mô tả một bất ngờ phổ biến khác: IV tự giảm mạnh ngay sau khi doanh nghiệp công bố kết quả kinh doanh.
Mỗi bảng tại đây đều đi kèm câu lệnh SQL chính xác ở phía dưới. Hãy thay ticker trong bất kỳ bảng nào để chấm điểm một mã khác trên terminal Strasmore.