赫斯頓模型與波動率微笑解析
單一波動率數值無法為整個選擇權鏈定價。本文探討赫斯頓模型如何透過隨機變異數捕捉市場波動,並分析各參數如何影響波動率微笑與偏斜現象。
赫斯頓模型(Heston model)
赫斯頓模型是一種選擇權定價模型,它將波動率視為隨機變數,而非固定數值。該模型包含兩個變動因子:股價與該價格的變異數,兩者各自具備獨立的隨機衝擊。正是這種第二來源的隨機性,使模型得以產生波動率微笑(volatility smile)。布萊克-休斯模型(Black-Scholes)所採用的單一常數波動率假設,在不同履約價(strike price)下僅能繪製出一條水平線,然而現實中從未出現過平坦的選擇權鏈(option chain)。
為何單一波動率數值無法適用於整個選擇權鏈
隱含波動率(implied volatility)是將選擇權市場價格代入定價公式後,所反推出的波動率輸入值。如我們在 如何計算隱含波動率 頁面所述,若針對每一份合約逐一反推,會發現同一到期日的選擇權在不同履約價(strike)上會呈現出一條曲線,而非單一水準。下方的圖表選取了 2026年上半年期間,剩餘天數在 20 至 45 天之間的所有 SPY 合約,並依據履約價與現貨價格的距離,將其劃分為 2% 的區間,再計算各區間內的平均隱含波動率。
每個數據背後的精確 SQL 語法
WITH
(
SELECT avg(implied_volatility)
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date BETWEEN '2026-01-02' AND '2026-06-30'
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.01
) AS atm_iv
SELECT
concat(if(m_bucket > 0, '+', ''), toString(m_bucket), '%') AS moneyness,
round(avg(iv) * 100, 2) AS iv_pct,
round((avg(iv) - atm_iv) * 100, 2) AS iv_vs_atm_pts,
count() AS contracts
FROM
(
SELECT
implied_volatility AS iv,
toInt16(round((toFloat64(strike_price) / toFloat64(underlying_close) - 1) * 50) * 2) AS m_bucket
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date BETWEEN '2026-01-02' AND '2026-06-30'
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.12
)
GROUP BY m_bucket
HAVING count() >= 100
ORDER BY m_bucket-12% 區間(履約價遠低於現貨價格)的平均隱含波動率為 28.05%,比同期間價平(at-the-money)選擇權的平均值高出 11.61 個波動率點。+12% 區間(買權端)的平均值則為 15.56%。中間各區間的數值描繪出了該效應名稱的由來,這種向側邊傾斜的現象稱為 波動率偏斜(volatility skew)。若模型僅採用單一波動率參數,將無法捕捉此現象:因為該模型假設所有履約價均基於同一種到期價格分配進行定價,依此模型反推,在任何履約價下都會得到相同的數值。
Heston 模型帶來的改變
Heston 模型保留了股票的隨機衝擊,並為變異數(variance)增加了第二個過程。若以文字而非符號說明:
- 股票在下一瞬間的變動為趨勢(drift)加上隨機衝擊,並以當前變異數的平方根進行縮放。
- 變異數的變動則是向長期水準的拉回(pull),以固定速度進行,再加上其自身的衝擊,並以波動率的波動率(vol-of-vol)參數及當前變異數的平方根進行縮放。
- 這兩項衝擊之間存在相關性,數值介於負一與一之間。
這種平方根縮放形式即為 Cox-Ingersoll-Ross 形式,其具備一項值得注意的功能:當變異數趨近於零時,變異數衝擊會縮小至零,從而防止變異數變為負值。當兩倍的拉回速度乘以長期變異數大於波動率的波動率之平方時(此條件以 Feller 命名),變異數將保持嚴格為正。
變異數本身無法直接觀察,但其隱含變異數(implied counterpart)則可觀察,且該數值並非靜止不動。下方的圖表繪製了兩檔標的在 2026 年第2季期間的價平(at-the-money)隱含波動率,每個交易日記錄一次。
每個數據背後的精確 SQL 語法
SELECT
toString(date) AS session_date,
round(avgIf(implied_volatility, underlying_symbol = 'SPY') * 100, 2) AS spy_atm_iv_pct,
round(avgIf(implied_volatility, underlying_symbol = 'NVDA') * 100, 2) AS nvda_atm_iv_pct
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('SPY', 'NVDA')
AND date BETWEEN '2026-04-01' AND '2026-06-30'
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
HAVING countIf(underlying_symbol = 'SPY') > 0
AND countIf(underlying_symbol = 'NVDA') > 0
ORDER BY dateSPY 在 2026-04-01 以 20.39% 開啟該觀察視窗,並於 2026-06-30 以 14.45% 結束。NVDA 在相同的 62 個交易日中,數值從 36.83% 變動至 38.22%。兩條線均未保持靜止,也未出現單邊發散:兩者皆呈現隨機漫步並持續回歸至某個鄰近區間。要為該圖表兩端的價格進行定價,需設定一個起始水準、一個長期水準,以及兩者之間拉回的速度。
各項 Heston 參數如何影響波動率曲面
平均回歸與長期水準決定期限結構
選擇權價值取決於其存續期間內的預期平均變異數,而非當下的變異數。對於下週到期的合約,今日的變異數對該平均值影響最大;對於一年後到期的合約,長期水準則佔主導地位。速度參數(speed parameter)設定了預期值在兩者間轉換的快慢,這決定了隱含波動率從近期到遠期合約的斜率陡峭程度。
每個數據背後的精確 SQL 語法
SELECT
tenor,
round(avgIf(implied_volatility, underlying_symbol = 'SPY') * 100, 2) AS spy_iv_pct,
round(avgIf(implied_volatility, underlying_symbol = 'NVDA') * 100, 2) AS nvda_iv_pct
FROM
(
SELECT
implied_volatility,
underlying_symbol,
days_to_expiry,
multiIf(
days_to_expiry <= 7, '1 to 7 days',
days_to_expiry <= 21, '8 to 21 days',
days_to_expiry <= 45, '22 to 45 days',
days_to_expiry <= 90, '46 to 90 days',
days_to_expiry <= 180, '91 to 180 days',
'181 to 365 days') AS tenor
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('SPY', 'NVDA')
AND date BETWEEN '2026-01-02' AND '2026-06-30'
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 1 AND 365
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) <= 0.02
)
GROUP BY tenor
HAVING countIf(underlying_symbol = 'SPY') > 0
AND countIf(underlying_symbol = 'NVDA') > 0
ORDER BY min(days_to_expiry)2026年上半年,SPY 近價平(near-the-money)合約在 1 to 7 days 區間的平均值為 17.05%,而在 181 to 365 days 區間則為 18.77%。NVDA 在這兩個區間的成交數據分別為 41.22% 與 44.94%。單一數值模型會以相同的波動率為所有期限定價,而 Heston 模型則賦予近期與遠期合約各自的水準,並由速度參數控制兩者間的曲線形狀。更多此類曲線請見我們的 隱含波動率期限結構 頁面。
波動率的波動率(Vol of vol)使波動率微笑彎曲
波動率的波動率(Vol of vol)即變異數本身的波動率。若將其設為零,變異數將呈現平滑路徑:期限結構雖仍具斜率,但跨履約價的微笑曲線將趨於平坦。若調高此參數,到期時價格分配在兩端尾部的權重會增加,這會使遠離現貨價格的履約價波動率高於價平履約價。變異數實際的變動幅度因標的資產而異,下方的面板直接衡量了此變動。
每個數據背後的精確 SQL 語法
SELECT
symbol,
round(min(daily_iv) * 100, 2) AS low_iv_pct,
round(max(daily_iv) * 100, 2) AS high_iv_pct,
round((max(daily_iv) - min(daily_iv)) * 100, 2) AS swing_pts
FROM
(
SELECT
underlying_symbol AS symbol,
date,
avg(implied_volatility) AS daily_iv
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'AMZN', 'KO')
AND date BETWEEN '2026-01-02' AND '2026-06-30'
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
)
GROUP BY symbol
ORDER BY swing_pts DESCAMZN 在面板中涵蓋了最廣的範圍:價平隱含波動率最低為 28.21%,最高達 74.42%,六個月內波動率點數差距為 46.22。KO 的波動範圍最窄,僅為 10.75 點。Vega 是價格對波動率的敏感度,如 我們的 Vega 頁面 所定義,用於衡量曲面的水準。在隨機波動率模型下,當曲面形狀而非水準發生變動時,兩份 Vega 相同的合約表現可能截然不同。
相關係數使微笑曲線傾斜為偏斜(Skew)
股票價格衝擊與變異數衝擊之間的相關係數,會將對稱的微笑曲線轉變為不對稱的偏斜曲線。在負相關的情況下,股價下跌的路徑往往伴隨著變異數上升,導致到期時分配的左尾權重高於右尾。此時,距離現貨價格相同幅度的賣權隱含波動率,其定價會高於買權隱含波動率。
每個數據背後的精確 SQL 語法
SELECT
underlying_symbol AS symbol,
round(avgIf(iv, ratio <= 0.95) * 100, 2) AS otm_put_iv_pct,
round(avgIf(iv, ratio >= 1.05) * 100, 2) AS otm_call_iv_pct,
round((avgIf(iv, ratio <= 0.95) - avgIf(iv, ratio >= 1.05)) * 100, 2) AS put_minus_call_pts
FROM
(
SELECT
underlying_symbol,
implied_volatility AS iv,
toFloat64(strike_price) / toFloat64(underlying_close) AS ratio
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'AMZN', 'KO')
AND date BETWEEN '2026-01-02' AND '2026-06-30'
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.20
)
GROUP BY underlying_symbol
HAVING countIf(ratio <= 0.95) > 0
AND countIf(ratio >= 1.05) > 0
ORDER BY put_minus_call_pts DESC2026年上半年,SPY 在面板中顯示出最顯著的差距:履約價低於現貨價格至少 5% 的合約平均為 27%,而履約價高於現貨價格至少 5% 的合約則為 14.76%,兩者相差 12.23 個波動率點數。在另一端,MSFT 的相同測量值為 3.9 點。每個標的資產僅需一個相關係數參數,即可涵蓋上述所有傾斜範圍。
初始變異數設定曲面水準
第五個參數是模型今日啟用的初始變異數。它會抬升或降低整個曲面,而不會大幅改變其形狀,這也是為何該參數需要最頻繁地重新擬合:它能確保模型維持在市場當前的水準,而其他四個參數則負責維持幾何結構。
模型買入的標的及其成本
此項買入操作是一個從五個可解釋數值出發、向兩個方向彎曲的曲面,定價速度極快。Heston 模型透過特徵函數與一個數值積分來評估歐式選擇權(European options),無需進行模擬,這使得在幾分之一秒內完成整條選擇權鏈的擬合變得切實可行。其成本值得明確說明。
- 這五個參數是經過校準的,它們是擬合觀察到的選擇權價格所得,而非從任何事物中直接測量而來。
- 校準結果僅為一個時間點的快照。若明日重新擬合,數值便會變動,這意味著模型的常數並非真正的常數。
- 單一參數集極少能同時擬合所有到期日。極短天期的觀察波動率微笑(observed smiles)彎曲程度,往往超過此變異數過程所能模擬的範圍。
- 市場價格會出現跳空。在此模型中,變異數與現貨價格均連續變動,因此任何跳空缺口都必須由擬合後的數值來吸收。
對於從波動率頁面閱讀至此的讀者,有一點提醒至關重要。變異數過程描述的是為選擇權定價的動態機制,這與股票後續實際實現的波動率是不同的對象。兩者之間的差距正是 隱含波動率與實現波動率 的探討主題。
模型仍存在的缺口
針對上述每個缺口,目前皆有擴充模型。Bates 模型在 Heston 的變異數基礎上加入了價格過程的跳躍(jumps),這能使短期波動率微笑曲線(short-dated smile)更為陡峭。粗糙波動率模型(rough volatility models)則保留了隨機變異數,並將驅動因子替換為比標準布朗運動更為「粗糙」的路徑,藉此更精確地擬合極短期的市場表現。然而,這些模型都未能解決校準(calibration)問題:兩者皆增加了必須針對特定時刻進行擬合,且事後仍需重新調整的參數。
常見問題
簡單來說,赫斯頓模型(Heston model)是什麼?
這是一種將波動率視為隨機變數的選擇權定價模型。變異數(variance)遵循其自身的隨機路徑,並會向長期平均水準回歸;由於變異數的隨機性與股價變動相關,該模型能定價出呈現曲線的波動率微笑(volatility smile),而非平坦的直線。
為什麼布萊克-休斯模型(Black-Scholes model)會產生平坦的波動率微笑?
該模型假設波動率為常數,這意味著到期時的價格分佈是固定的。所有履約價(strike price)皆由同一分佈定價,因此將公式反推後,每個履約價都會得出相同的波動率。平坦的直線是該模型假設下的產物,而非對市場實際情況的發現。
赫斯頓模型的五個參數代表什麼?
初始變異數設定了當前的波動率曲面水準。長期變異數設定了變異數隨時間回歸的目標值,而均值回歸速度則決定了回歸的快慢。波動率的波動率(vol of vol)決定了微笑的曲率,而兩者隨機衝擊之間的相關性則決定了微笑的傾斜度。
赫斯頓模型是否能準確擬合實際的選擇權價格?
該模型能精確擬合典型波動率曲面的中間區域,但在極短天期的部分較為吃力,因為觀察到的波動率微笑彎曲程度,往往比其變異數過程所允許的更為劇烈。此外,擬合後的參數會隨時間變動,這使得參數校準(calibration)成為一項需要持續進行的作業,而非一次性的測量。
上述每個面板均附帶產生該數據的 SQL 語法,可隨時調整以應用於其他標的或時間窗口。若欲針對選擇權數據以自然語言查詢上述問題,請開啟 Strasmore 終端機。