Strasmore Research
學習 Matt Connor作者: Matt Connor

哪裡可以取得歷史隱含波動率資料?

比較免費與付費的歷史IV資料來源,解析兩組30天IV序列為何不同,並提供可自行執行的查詢格式與選擇資料時的判斷方法。

歷史隱含波動率資料是推導而來,而非直接記錄。這一點正是其來源比價格歷史資料更困難的原因。IV 是將選擇權的市場價格代入定價模型反推,直到模型計算出的價值與螢幕上的價格相符後得到的數值。交易所不會在交易紀錄中發布 IV,因此每一份已發布的 IV 歷史資料,都涉及模型、報價、契約選擇與插值方法等判斷。兩組都宣稱衡量同一件事的資料序列,差異正是由這些選擇造成。

如果你想先了解定義,什麼是隱含波動率隱含波動率如何計算 將說明其運作原理。以下內容將介紹歷史資料的來源,以及如何辨別兩個版本之間的差異。

為什麼歷史隱含波動率資料比價格資料更難取得?

每日收盤價是可觀察值:市場會實際成交,所有資料供應商回報的數字也相同。IV 水準則是計算結果,而計算所用的四項輸入值,會因資料來源不同而變動。

  • 模型:歐式 Black-Scholes 求解、納入離散股息的美式二項樹模型,或採用自身利率與借券假設的資料供應商變體。
  • 帶入的價格:買價、賣價、中間價、最後成交價,或交易所結算價。
  • 納入哪些契約:一個價平履約價、某個價內外程度區間,或設定成交量及未平倉量篩選條件。
  • 如何換算至固定到期期間:在涵蓋30天的兩個到期日之間插值,或將到期日落在某個剩餘天數區間內的數值取平均。

只要改變一項輸入值,水準就會變動。若四項全部改變,即使兩個嚴謹的資料來源分析同一交易日,得出的波動率也可能相差數個百分點,但兩者都沒有錯。

這種分散情況會先出現在單一標的內。下圖以 AAPL 在2026年6月的資料為例,只保留履約價在現貨價格上下5%以內的契約,並依距離到期的剩餘時間分組。

查詢單一標的、單一月份:按到期剩餘時間區分的隱含波動率(AAPL,2026年6月)
每個數據背後的精確 SQL 語法
SELECT
    dte_band,
    round(100 * quantileDeterministic(0.25)(iv, contract_hash), 1) AS iv_p25_pct,
    round(100 * quantileDeterministic(0.50)(iv, contract_hash), 1) AS iv_median_pct,
    round(100 * quantileDeterministic(0.75)(iv, contract_hash), 1) AS iv_p75_pct,
    count()                                                        AS contract_day_count
FROM
(
    SELECT
        multiIf(days_to_expiry <=   7, '01-07d',
                days_to_expiry <=  21, '08-21d',
                days_to_expiry <=  45, '22-45d',
                days_to_expiry <=  90, '46-90d',
                days_to_expiry <= 180, '91-180d',
                                       '181d+')  AS dte_band,
        toFloat64(implied_volatility)             AS iv,
        cityHash64(ticker)                        AS contract_hash,
        days_to_expiry                            AS dte
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'AAPL'
      AND date >= '2026-06-01'
      AND date <  '2026-07-01'
      AND iv_converged = 1
      AND volume > 0
      AND days_to_expiry > 0
      AND underlying_close > 0
      AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05
)
GROUP BY dte_band
ORDER BY min(dte)
Run this yourself

相同標的、相同月份,且僅納入接近平價的履約價。圖中最短的區間 01-07d,IV 中位數為 29.6%。最長的區間 181d+,則為 28.1%。僅在第一個區間內,第25百分位數與第75百分位數就分別為 24.9% 與 35.8%。不同到期日之間的形狀稱為期限結構;不同履約價之間則有其對應概念 波動率偏斜。這裡不存在單一的 IV。實際上是一個波動率曲面,而任何公布的 AAPL IV 數值,都只是該曲面的一項摘要;我們的 AAPL 隱含波動率頁面追蹤的正是這項資料。

為什麼兩張30日 IV 圖表顯示的數字不同?

選取一個流動性高的標的、涵蓋一年的交易日,並使用相同資料列,以三種方式建立30日 IV。第一欄僅保留履約價距離現貨價格1%以內、到期日介於25至35日的合約,代表可取得的最窄範圍。第二欄將範圍擴大至現貨價格的5%,到期日則延伸至20至45日。當每個交易日都必須產生數值時,這是實務上常用的預設範圍。第三欄再依合約成交量為這組較寬的資料加權,使平均值更接近實際有成交的履約價。

查詢以同一組資料列為基礎建立 SPY 30天期 IV 的三種方法
每個數據背後的精確 SQL 語法
WITH
    near_money AS
    (
        SELECT
            toMonday(date)                                                 AS week_start,
            toFloat64(implied_volatility)                                  AS iv,
            days_to_expiry                                                 AS dte,
            volume                                                         AS vol,
            abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) AS moneyness
        FROM global_markets.options_greeks
        WHERE underlying_symbol = 'SPY'
          AND date >= '2025-08-01'
          AND date <  '2026-08-01'
          AND iv_converged = 1
          AND volume > 0
          AND underlying_close > 0
          AND days_to_expiry BETWEEN 20 AND 45
          AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05
    ),
    weekly AS
    (
        SELECT
            week_start,
            avgIf(iv, dte BETWEEN 25 AND 35 AND moneyness < 0.01) AS tight_atm,
            avg(iv)                                               AS wide_atm,
            sum(iv * vol) / sum(vol)                              AS volume_weighted
        FROM near_money
        GROUP BY week_start
        HAVING countIf(dte BETWEEN 25 AND 35 AND moneyness < 0.01) > 0
    )
SELECT
    toString(week_start) AS week,
    concat(monthName(week_start), ' ', toString(toDayOfMonth(week_start)), ', ', toString(toYear(week_start))) AS week_label,
    round(100 * tight_atm, 1)       AS tight_atm_pct,
    round(100 * wide_atm, 1)        AS wide_atm_pct,
    round(100 * volume_weighted, 1) AS volume_weighted_pct,
    round(100 * (greatest(tight_atm, wide_atm, volume_weighted)
               - least(tight_atm, wide_atm, volume_weighted)), 1) AS spread_pp
FROM weekly
ORDER BY week_start
Run this yourself

在圖表涵蓋的第一週,即July 28, 2025,三種計算方式分別得到16.6%、16.4%及16.7%。其中最高值與最低值相差0.2個百分點;spread 欄則追蹤這項差距在全部53週期間的變化。三者都不是該基金真正的30日 IV。它們各自回答略有不同的問題,而供應商圖表只是採用其中一種方式,卻未在標籤中說明計算方法。

每份合約的隱含波動率歷史資料可追溯多久?

這些面板背後的資料集是 global_markets.options_greeks:每一列代表某份合約在某一交易日的資料,將隱含波動率與 delta、gamma、vega、theta 及 rho 並列,另含履約價格、到期日、距到期天數、標的代號及標的收盤價。這是每日收市資料,不是即時選擇權鏈快照。下方面板統計每季至少有一列收斂 IV 資料的不同標的名稱數量。

查詢每日 IV 已收斂的標的,按季度
每個數據背後的精確 SQL 語法
SELECT
    concat(toString(toYear(date)), '-Q', toString(toQuarter(date))) AS quarter,
    uniqExact(underlying_symbol)                                    AS underlyings_covered
FROM global_markets.options_greeks
WHERE iv_converged = 1
  AND volume > 0
  AND underlying_symbol NOT IN ('SPCX')
  AND date < '2026-07-01'
GROUP BY quarter
ORDER BY min(date)
Run this yourself

資料涵蓋 2014-Q22026-Q2,共 49 季;在顯示的最後一個完整季度中,有 5799 個標的名稱具備已收斂的每日 IV 資料。

查詢這類資料集時,四個篩選條件最為重要。

  • 保留 iv_converged = 1。求解器不一定能得到收斂結果;未收斂的資料列代表配適失敗,而不是隱含波動率偏低。
  • 保留 volume > 0。從未成交的合約,其 IV 是根據過時報價求解而來。
  • underlying_symbol 分組。ticker 欄位存放 OCC 合約代碼,因此依此分組會針對每個履約價格與到期日回傳一列,而不是每家公司一列。
  • 有意識地選擇合約,挑選接近平值且位於特定距到期天數區間內的合約。略過這一步,會把波動率偏斜與期限結構平均成單一數值。

是否有免費的 implied volatility API?

免費來源確實存在,但各自都有特定限制。

  • 券商平台會根據自家選擇權鏈計算 IV,並即時顯示。可下載的歷史資料通常很短,或根本沒有提供;而且數值是該券商模型的結果,不是標準化數據。
  • 交易所發布的波動率指數可追溯數十年,且免費提供。每個指數都是針對一籃子標的計算的單一綜合數值,因此回答的是整體市場問題,而非個別股票的波動率。
  • 一般市場資料 API 多半只提供價格。幾乎所有服務都將逐契約 greeks 視為獨立產品;免費方案即使包含這些資料,通常也只回傳即時快照,不提供歷史存檔。我們的 免費股票市場資料 API 整理了開放方案實際提供的內容。
  • 逐契約歷史資料通常由資料供應商定價。長期的個股歷史資料多以按月或按年計價的日終檔案形式銷售;即時選擇權鏈的價格則遠高於歷史資料集。即時市場資料的成本 說明了這類價目表的架構。

即時快照與日終資料的差異,和價格本身同樣重要。下午4:00(ET)取得的快照,使用的是該時點的報價。以結算價建立的檔案,採用的輸入資料完全不同;在波動最快的交易日,兩者的差異最為明顯。

綜合指數波動率與個股波動率也不能互換。指數選擇權反映一籃子標的的變動,成分股之間的相互抵銷走勢會降低整體波動。個股選擇權反映的是單一公司的價格路徑。下方面板在相同篩選條件下,將市場熟知的個股放在一起比較一個月的表現。

查詢接近價平的 IV 中位數,到期剩餘20至45天(2026年6月)
每個數據背後的精確 SQL 語法
SELECT
    underlying_symbol                                              AS symbol,
    round(100 * quantileDeterministic(0.50)(iv, contract_hash), 1) AS median_iv_pct,
    count()                                                        AS contract_day_count
FROM
(
    SELECT
        underlying_symbol,
        toFloat64(implied_volatility) AS iv,
        cityHash64(ticker)            AS contract_hash
    FROM global_markets.options_greeks
    WHERE underlying_symbol IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'AMZN', 'KO', 'XOM', 'TLT')
      AND date >= '2026-06-01'
      AND date <  '2026-07-01'
      AND iv_converged = 1
      AND volume > 0
      AND underlying_close > 0
      AND days_to_expiry BETWEEN 20 AND 45
      AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05
)
GROUP BY symbol
ORDER BY median_iv_pct DESC
Run this yourself

2026年6月期間,在20至45天的區間內,接近平值的 IV 中位數介於 38.5% 的 NVDA10.4% 的 TLT 之間,共涵蓋 8 檔個股。區間相同、篩選條件相同,計算方法也相同。這類排名只有在每檔個股都維持相同計算規則時才成立。

IV rank 與 IV percentile 的資料來源重要嗎?

這會直接決定答案。IV rank 是將今日的 IV 與回溯期間的最高值和最低值比較,回溯期間通常為一年;IV percentile 則計算該期間內低於今日 IV 的交易日占比。兩者都會從頭到尾讀取同一條時間序列,因此即使市場完全沒有變化,只要序列改變,評分就會跟著變動。若將券商的中間報價 IV 接到資料供應商以結算價為基礎的歷史資料上,回溯期間中間就會出現永久性的跳變;凡是跨越該位置計算的 rank,都會承接這個跳變。IV rank 與 IV percentile將逐步說明這兩種計算方式。比較 implied movement 與 realized movement 時,也有相同要求:historical volatility 與 implied volatility涵蓋這組比較。

實務上的標準是遵循資料來源追溯原則。選定一個資料來源、一個模型、一套合約選擇方式,以及一種到期期間定義,並在整個回溯期間固定這四項。內部一致、即使與其他來源略有不同的序列,價值高於分段拼接、只在不同區段分別符合各家資料供應商的序列。

常見問題

哪裡可以取得歷史隱含波動率資料?

較長期間的單一股票歷史資料,通常來自銷售逐契約日終 Greeks 的選擇權資料供應商,檔案多以月度或年度形式提供。交易所則會免費發布指數層級的波動率歷史資料。券商平台會在選擇權鏈上顯示即時 IV,但可下載的歷史資料通常很少。上述面板是根據逐契約的每日資料集運算,涵蓋所有已掛牌契約,並採用收斂後的估計結果。

是否有免費的隱含波動率 API?

包含逐契約 Greeks 的免費方案相當少見。現有方案通常只提供即時快照,而非歷史資料庫。指數波動率歷史資料是主要真正免費的長期序列。深入的單一股票歷史資料通常屬於付費產品。

為什麼兩個來源對同一檔股票顯示不同的隱含波動率?

原因可能包括定價模型不同、輸入報價不同、契約選取方式不同,以及到期日插值方式不同。上述面板從同一組資料列建立三條30日序列,光是在第一週,三者就相差 0.2 個百分點。因此,兩家供應商之間出現差距屬於預期情況,不代表資料有誤。

隱含波動率資料可以追溯多久?

這取決於資料來源。各地的逐契約資料庫存檔期間都比價格資料庫短。此頁面所使用的資料集始於 2014-Q2,此後涵蓋每一個已收斂契約的每日資料列。


本頁的每個面板都附有產出結果的 SQL。展開面板即可查看哪些契約被納入計算。若要針對另一檔標的、另一個期間或另一種計算方式建立相同序列,請在 Strasmore terminal 以自然語言提出需求。