Strasmore Research
學習 Matt Connor作者: Matt Connor · data as of August 6, 2026 · refreshed weekly

IV rank 與 IV percentile:公式與手算範例

比較 IV rank 與 IV percentile 的公式,示範可手算的範例,並說明同一 ticker 上兩者數值可能大幅不同的情況。

IV rank 與 IV percentile 的差異,取決於對同一組資料進行的兩種算術計算。IV rank 衡量今日 implied volatility 在過去52週區間內的位置,該區間涵蓋最低讀數至最高讀數。IV percentile 則計算回溯期間內,收盤 implied volatility 低於今日讀數的交易日占比。同一個 ticker 在同一個下午,兩者的數值可能分別為18與70。

兩個公式的完整寫法

IV rank =(當前 IV − 52週 IV 最低值)/(52週 IV 最高值 − 52週 IV 最低值)× 100

IV percentile =(觀察期間內 IV 低於今日 IV 的交易日數)/(觀察期間的交易日總數)× 100

兩者的結果都介於 0 至 100 之間。兩者也都需要相同的兩項輸入資料:該股票的每日隱含波動率序列,以及一段回溯期間,通常為 252個交易日。隱含波動率本身是選擇權市場根據即時選擇權價格反推出的年化估計值,用來衡量股票可能出現多大幅度的波動;隱含波動率衡量的內容將從基礎開始說明。

兩者的差異,在於各自讀取觀察期間的方式不同。IV rank 僅確切查看 252天中的兩天:最高值與最低值。中間的所有數值都只是背景。IV percentile 則平等看待每一天,完全不考慮各次讀值之間相差多少。一個衡量的是數值在區間中的位置,另一個計算的是交易日數。

可手動核對的計算範例

假設有一組虛構的十日 IV 序列,每個交易日讀取一次: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:十筆讀值中,有七筆低於 28,分別是 22、24、21、26、25、23 和 24,因此為 7 / 10 x 100 = 70.0。

IV rank 為 17.9,代表波動率偏低。IV percentile 為 70,代表在這段觀察期間,多數交易日的波動率都低於目前水準。這兩者都是對同一組十筆數據的正確描述。

現在修改其中一筆數值。將 60 改為 30,其餘九筆讀值維持不變。IV rank 變為(28 - 21)/(30 - 21)x 100 = 77.8。IV percentile 不變,仍為 70.0。那一個創下最高值的交易日,會影響 IV rank 60 點,卻完全不影響 IV percentile。

這就是 IV rank 的結構性弱點。觀察期間內只要出現一次尖峰,例如財報公布後的跳空或單日恐慌,就會大幅拉寬分母,使 IV rank 在接下來十二個月內接近區間底部。即使這次尖峰已經不再反映於選擇權鏈中,影響仍會持續。當兩個分數出現明顯差異時,通常代表觀察期間內有離群值;而 percentile 更能準確描述波動率實際上大多時間處於何種水準。當區間變化平順,且最高值與最低值都由不只一個交易日構成時,IV rank 的參考價值較高。兩個數值都無法說明方向。

真實的 IV 序列長什麼樣

以下是兩個公式所使用的原始資料。下方圖表建立 AAPL 的每日價平 implied volatility 數值,樣本為距離到期日 20 至 45 天、且履約價在股價上下 5% 以內的合約,之後再按週計算平均值。

查詢AAPL 平價隱含波動率,週資料,追蹤52週
每個數據背後的精確 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)
Run this yourself

此序列共有 54 個週度資料點,涵蓋自 Jul 28, 2025 當週(平均值為 30.03%)至 Aug 3, 2026 當週(數值為 27.7%)。這條線的形狀決定 rank 與 percentile 是否一致。若序列出現單一且高聳的孤立尖峰,兩者就會產生分歧。若序列在穩定區間內波動,兩者則會維持接近。我們的 AAPL implied volatility 頁面會追蹤該標的隨時間的變化;若要了解沒有歷史資料背景下的絕對水準問題,請參閱 30% IV 是否偏高

八檔股票的 IV rank 與 IV percentile

公式相同、回溯期間相同,選取八檔流動性高的股票,觀察同一個交易時段。gap欄位表示兩項分數之間的絕對差距。

查詢IV 排名與 IV 百分位,8檔高流動性標的,回溯52週
每個數據背後的精確 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 DESC
Run this yourself

截至 Aug 3, 2026,表中差異最大的是 35.6 個百分點,出現在 AAPL。該標的的 IV rank 為 32.4,IV percentile 則為 68。表中另一端的 TSLA,兩項數值僅相差 6.5 個百分點。以其中一項數值建立的篩選清單,會與以另一項數值建立的清單不同。這也是了解交易平台顯示哪一項數值的實際原因。[[highest-iv-rank-stocks|IV rank 最高的股票]]篩選會依前者對市場排序。

每一項 rank 背後的區間輸入值

將當前值、低點與高點欄位代入 rank 公式,即可得到上方的 rank 欄位。

查詢各標的目前、52週低點與52週高點的平價 IV
每個數據背後的精確 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
Run this yourself

為何不同平台對同一 ticker 顯示不同數值

兩種公式都沒有歧義,真正不同的是輸入值。資料供應商很少公布所採用的 IV 序列,而常見選擇位於計算鏈的兩端:一種是 30 天固定到期時間的 IV,根據 30 天前後兩個到期日插值計算;另一種是最前月份、價平合約的 IV,波動明顯更大。有些平台則改用整條選擇權鏈的平均值。本面板以同一檔股票為例,在相同的 52 週期間內,套用三種 IV 輸入定義。

查詢單一股票、單一交易時段,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
Run this yourself

在最近一個交易日,Wide net, any expiry 顯示 37.6%,而 Near 30 day ATM 顯示 27.7%;兩者的 IV rank 分別為 23.132.4。同一檔股票、同一個交易日、同一套公式,輸入值的定義不同,結果就會不同。

第二個關鍵變數是回溯期間。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_days
Run this yourself

1 month 的回溯期間下,這檔股票的 IV rank 為 0.4,IV percentile 為 4.8。將期間拉長至 24 months 後,同一交易日的數值變為 23.463.3。這兩列之間的選擇權鏈沒有任何變化,改變的只有回溯期間。當兩個畫面對同一 ticker 顯示不同結果時,應先檢查回溯設定與 IV 序列。

兩個數字如何運用

兩項讀數都可用來篩選策略,但不能用來預測行情。賣出權利金的交易者,包括備兌買權與現金擔保賣權交易者,通常會尋找較高的讀數。這表示期權價格反映的預期波動,大於該股票在觀察期間通常實現的波動。買進權利金的交易者則會關注較低的區間,邏輯正好相反。相對分數比原始 IV 數值更適合這項用途:對一檔股票而言,40% IV 可能很普通;對另一檔股票而言,卻可能極端偏高。以股票自身的歷史資料進行評分,可以排除這項問題。高 implied volatility 是否有利,取決於交易兩方各自需要承擔的取捨。

有一點需要注意,這些數字無法替你回答。讀數偏高後仍可能繼續走高;週一排名第95的股票,到了週五可能變成第60名,即使你的部位完全沒有變化。兩項分數都不包含方向資訊:IV 偏高代表市場已反映較大的價格變動,但沒有表示價格將朝哪個方向移動。

常見問答

IV rank 和 IV percentile 哪一個比較好?

兩者回答的是不同問題。當回溯期間包含一次劇烈飆升時,IV percentile 通常更穩健,因為它計算的是高於目前數值的交易日比例,而不是拿目前數值與單一極端值比較。當數值分布在區間內較為均勻時,IV rank 更直觀,因為它會直接告訴你今天的數值距離過去12個月高點有多近。

什麼是高 IV rank?

多數交易團隊會將高於50視為個股自身波動區間的上半部,高於80則視為該股的 IV 確實偏高。IV rank 本質上是相對值,因此,波動平穩的民生必需品股若 IV rank 為80,與高波動成長股的 IV rank 為80,所代表的絕對 IV 水準可能截然不同。

IV rank 和 IV percentile 使用相同的回溯期間嗎?

通常兩者都使用252個交易日,但多數平台允許調整設定,而且預設值會因資料供應商而異。上方面板顯示,同一檔股票在不同回溯期間的評分可能不同。當兩項工具的結果不一致時,這是首先應檢查的地方。

IV rank 可以是0或100嗎?

可以。當股票的隱含波動率創下52週新高時,IV rank 會達到100;創下新低時則會降至0,因為當日數值本身就是區間的一個端點。IV percentile 很少觸及這兩個極端,因為當日交易時段本身也列入分母。IV crush描述的是另一種常見情況,也就是財報公布後 IV 本身立即下滑。


本頁每個面板下方都附有完全相同的 SQL 查詢。你可以替換其中任一面板的 ticker,在 Strasmore 終端機上為不同股票計算評分。