§01學習重點
- 用「部位視角」逐一說出五個 Greeks 的意義:對沖多少(delta)、賺誰的錢(gamma、vega)、每天付多少(theta)、誰可以先不管(rho)
- 解釋 delta 對沖後的部位為什麼變成「用 theta 換 gamma」的交易,寫出每日損益的二次近似式與損益兩平的日振幅
- 說出「買選擇權並持續 delta 對沖」的損益為什麼由隱含波動率與實現波動率之差決定,並用模擬重現這件事
- 讀懂波動率微笑與偏斜:低履約價隱波偏高是市場為左尾風險付的保費,期限結構則刻畫事件風險在時間軸上的分布
- 列出波動率曲面的基本無套利約束(價格對履約價遞減、凸性、日曆單調),說明為什麼插值要在隱波空間做、且做完必須回頭驗證
- 走完 Breeden–Litzenberger 的完整邏輯:選擇權價格對履約價的二階導數就是貼現後的風險中性密度,並用有限差分親手萃取一條
- 區分風險中性密度與真實世界機率:前者是「機率 × 風險偏好」的乘積,說出這個區分對交易與風控各意味著什麼
§02課程內容
一、定價之後:部位是活的
第 14 章建立了風險中性定價的世界觀,第 15 章把定價工具落到實務。到此為止,問題都是「這張選擇權值多少錢」——算出一個數,交易完成,故事結束。但對真正持有部位的人,故事才剛開始:你手上的選擇權部位每一秒都在隨市場變形。標的價格動、隱含波動率動、時間一天天流逝,任何一個維度的變化都會改寫你的損益。定價回答「值多少」,風險管理要回答的是「會怎麼變」。
回答這個問題的工具箱,是一組以希臘字母命名的敏感度——Greeks。它們的數學身分毫不神祕:選擇權價格對各個輸入變數的偏導數。這個思路我們在第 5 章其實已經演練過一輪:那裡我們對神經網路求 Jacobian,問「每個輸入動一點、輸出動多少」,把黑盒子攤開成因子語言;這裡我們對定價公式做一模一樣的事,只是被微分的對象從資料學出來的模型換成了 Black-Scholes 公式,輸入從特徵向量換成了標的價、波動率、時間與利率。同一把尺,換個對象再量一次。
但 Greeks 不只是數學練習。交易台上的人用 Greeks 交談、用 Greeks 設限額、用 Greeks 把一天的損益拆帳——「今天賠的錢,多少來自標的動(delta、gamma)、多少來自隱波動(vega)、多少是時間流掉的(theta)」。學會 Greeks,等於學會選擇權世界的母語。本章前半講這門語言,後半把鏡頭拉遠:把所有履約價與到期日的隱含波動率拼成一張波動率曲面,然後示範一個漂亮的反向操作——從市場價格裡把整條機率分布讀出來。
二、Greeks 全家福:五個偏導數,五種暴險
設 \(C\) 為選擇權價格、\(S\) 為標的價、\(\sigma\) 為隱含波動率、\(T\) 為到期年限、\(r\) 為利率。五個一線 Greeks 依序是:
Delta(\(\Delta = \partial C/\partial S\)):標的動 1 元,選擇權價格動多少。部位視角:它是對沖比率——持有 1 口買權、放空 \(\Delta\) 股標的,組合對小幅價格變動就免疫。買權的 delta 介於 0 與 1:深價外趨近 0(標的怎麼動都與我無關),深價內趨近 1(幾乎就是持股)。實務上市場常直接用 delta 描述選擇權的「價內外程度」,例如「25-delta 的價外賣權」。
Gamma(\(\Gamma = \partial^2 C/\partial S^2\)):標的動的時候,delta 本身動多少——凸性的量尺。部位視角:gamma 是你真正想買的東西。想要單純的方向暴險,買現股或期貨就好,何必付權利金?買選擇權買的是那個「彎」:市場往有利方向走,你賺得比 delta 預告的多;往不利方向走,賠得比 delta 預告的少。這種不對稱天生討喜,所以持有它要付費——付給誰、怎麼付,下一節揭曉。
Vega(\(\nu = \partial C/\partial \sigma\)):隱含波動率動 1 個百分點,價格動多少。部位視角:這是對「市場恐慌程度」的暴險。做多選擇權就是做多波動率——恐慌升溫、隱波跳升,部位增值;市場歸於平靜,部位縮水。vega 與 gamma 高度連動:長 gamma 的結構幾乎都長 vega。
Theta(\(\theta = \partial C/\partial t\)):其他條件全部不動,時間過一天,價格掉多少。部位視角:買方每天付的租金。選擇權的時間值隨到期日逼近而蒸發,且蒸發速度非線性——越接近到期掉得越兇,價平附近尤其陡峭。
Rho(\(\rho = \partial C/\partial r\)):利率動的影響。對短天期股票選擇權通常是最不要緊的一個,先放進口袋,處理利率商品時(第 17 章)再拿出來。
在 Black-Scholes 模型裡這些全有閉式解。令 \(d_1 = \frac{\ln(S/K) + (r + \sigma^2/2)T}{\sigma\sqrt{T}}\),則買權的前三個 Greeks 是:
逐項拆解:\(\Phi\) 是標準常態的累積分布函數、\(\varphi\) 是其密度;\(d_1\) 綜合了價內外程度與剩餘的波動空間,可以粗略讀成「以波動為尺度,現在離履約價有多遠」。delta 是一個機率形狀的量(介於 0 與 1,價平約 0.5);gamma 分母裡的 \(S\sigma\sqrt{T}\) 說明:波動越小、到期越近,同樣的價格變動「彎」得越劇烈——到期前夕的價平選擇權是 gamma 的火藥庫;vega 的 \(\sqrt{T}\) 則說明長天期選擇權對隱波更敏感。gamma 與 vega 對同履約價的買權賣權完全相同——凸性不分方向。
上代碼。既然 Greeks 就是偏導數,我們可以用第 5 章驗證 Jacobian 的同一招來驗證它:解析公式算一遍,有限差分(把輸入挪一小步、重算價格)再算一遍,兩者必須對上:
import numpy as np
from math import erf, sqrt, exp, log, pi
def Phi(x): return 0.5 * (1.0 + erf(x / sqrt(2.0)))
def phi(x): return exp(-0.5 * x * x) / sqrt(2.0 * pi)
def bs_call(S, K, r, sig, T):
d1 = (log(S / K) + (r + 0.5 * sig**2) * T) / (sig * sqrt(T))
return S * Phi(d1) - K * exp(-r * T) * Phi(d1 - sig * sqrt(T))
def bs_greeks(S, K, r, sig, T):
d1 = (log(S / K) + (r + 0.5 * sig**2) * T) / (sig * sqrt(T))
d2 = d1 - sig * sqrt(T)
delta = Phi(d1)
gamma = phi(d1) / (S * sig * sqrt(T))
vega = S * phi(d1) * sqrt(T)
theta = -S * phi(d1) * sig / (2 * sqrt(T)) - r * K * exp(-r * T) * Phi(d2)
return delta, gamma, vega, theta
S0, K, r, sig, T = 100.0, 100.0, 0.02, 0.25, 0.25 # 價平、3 個月
C0 = bs_call(S0, K, r, sig, T)
d, g, v, th = bs_greeks(S0, K, r, sig, T)
print(f"價格 {C0:.4f}|delta {d:.4f}|gamma {g:.4f}|vega {v:.4f}|theta/日 {th/365:.4f}")
# 輸出:價格 5.2245|delta 0.5408|gamma 0.0317|vega 19.8426|theta/日 -0.0299
eps = 0.01 # 有限差分核對(中央差分)
d_fd = (bs_call(S0+eps, K, r, sig, T) - bs_call(S0-eps, K, r, sig, T)) / (2*eps)
g_fd = (bs_call(S0-eps, K, r, sig, T) - 2*C0 + bs_call(S0+eps, K, r, sig, T)) / eps**2
print(f"有限差分 delta {d_fd:.6f}(解析 {d:.6f})gamma {g_fd:.6f}(解析 {g:.6f})")
# 輸出:有限差分 delta 0.540820(解析 0.540820)gamma 0.031748(解析 0.031748)中央差分與解析解對到小數第六位。這一步在教學裡是驗證,在實務裡是日常:一旦模型比 Black-Scholes 複雜(隨機波動率、跳躍、路徑相依的奇異選擇權),Greeks 多半沒有閉式解,bump-and-reprice——挪一下輸入、重新定價、算差商——就是業界的標準做法。同一套差分代碼可以伺候任何定價器,這是它最大的美德。
把四條曲線並排看(圖 16-1),有一個結構性事實跳出來:gamma 與 theta 都在價平處達到極值,而且正負相反。這不是巧合——BS 偏微分方程把兩者鎖在一起:delta 對沖掉一階項之後,剩下的損益就由 gamma 項與 theta 項互相抵銷來平衡。這個拉鋸是選擇權交易的心臟,值得專開一節。
三、theta 與 gamma 的拉鋸:delta 對沖者的日常
把部位 delta 對沖掉之後,你以為自己「中性」了——其實你剛剛把一個方向性賭注,換成了一個更有趣的賭注。對沖後的部位在一小段時間內的損益,可以用泰勒展開逼近:
逐項拆解:\(\Delta S\) 是這段時間標的的變動、\(\Delta t\) 是流逝的時間。第一項是 gamma 收入:注意 \((\Delta S)^2\) 帶平方——不管漲跌,只要動,長 gamma 的部位就收錢,動得越大收越多;第二項是 theta 支出:\(\theta\) 為負,時間流逝穩定扣款。一收一付,每天結算。令兩項相等(忽略量級小得多的利率項)可解出損益兩平的日振幅:\(|\Delta S| = S\,\sigma_{\text{imp}}\sqrt{\Delta t}\)。用第二節的參數算:\(100 \times 0.25 \times \sqrt{1/252} \approx 1.57\) 美元——標的一天動超過 1.57 元,gamma 收入蓋過 theta 租金,這天你賺;動不到,這天你賠。
比喻: 長 gamma 的部位像租了一張漁網。網租(theta)天天照付,不管有沒有魚;魚群衝進來的日子(市場大動),網子撈到的漁獲(gamma 收入)遠超網租。租網划不划算,不看任何一天,看整季的魚況——實現波動率——夠不夠付掉整季的租金——隱含波動率。租金是簽約當下就定死的,魚況要到季末才知道。
比喻裡藏著本章最重要的一條等式:買進選擇權並持續 delta 對沖之後,損益被綁在兩個波動率的差上——成本端在簽約當下就由隱含波動率定死(權利金裡的時間值,總租金),收入端要等持有期走完、由實現波動率結算(gamma 收入的總和,總漁獲)。模擬驗證:
import numpy as np
from math import erf, sqrt, exp, log
def Phi(x): return 0.5 * (1.0 + erf(x / sqrt(2.0)))
S0, K, r, sig, T = 100.0, 100.0, 0.02, 0.25, 0.25 # 以隱波 25% 買入並對沖
n_paths, n_steps = 20000, 63 # 3 個月、每日重平衡
dt = T / n_steps
d1 = (log(S0/K) + (r + 0.5*sig**2)*T) / (sig*sqrt(T))
C0 = S0*Phi(d1) - K*exp(-r*T)*Phi(d1 - sig*sqrt(T))
rng = np.random.default_rng(16)
def hedged_pnl(sig_real):
"""買 1 口 ATM 買權,每日用 BS delta(隱波 25%)對沖到期"""
S = np.full(n_paths, S0)
dlt = np.full(n_paths, Phi(d1))
cash = -C0 + dlt * S0 # 付權利金、放空 delta 股
for i in range(1, n_steps + 1):
z = rng.standard_normal(n_paths)
S = S * np.exp((r - 0.5*sig_real**2)*dt + sig_real*sqrt(dt)*z)
cash *= exp(r * dt)
tau = T - i * dt
if i < n_steps:
d1v = (np.log(S/K) + (r + 0.5*sig**2)*tau) / (sig*np.sqrt(tau))
new_dlt = 0.5 * (1.0 + np.vectorize(erf)(d1v / sqrt(2.0)))
else:
new_dlt = (S > K).astype(float)
cash += (new_dlt - dlt) * S # 調整空頭:加空收現、減空付現
dlt = new_dlt
pnl = np.maximum(S - K, 0.0) + cash - dlt * S # 履約收益+現金-回補空頭
return pnl.mean(), pnl.std()
for sr in (0.15, 0.25, 0.35):
m, s = hedged_pnl(sr)
print(f"實現波動率 {sr:.0%}:平均損益 {m:+.4f} 標準差 {s:.4f}")
# 輸出:
# 實現波動率 15%:平均損益 -1.9987 標準差 0.6456
# 實現波動率 25%:平均損益 +0.0003 標準差 0.5453
# 實現波動率 35%:平均損益 +1.9988 標準差 1.1724數字把邏輯釘死:實現波動率恰好等於隱含的 25% 時,平均損益是 0.0003——付出的與收回的打平,權利金 5.22 一毛不多收;實現只有 15%,平均賠 2.00;實現衝到 35%,平均賺 2.00。損益幾乎正好是 vega 乘上波動率差(\(19.84 \times 0.10 \approx 1.98\))——對沖後的選擇權部位就是一張波動率的遠期合約。同時注意標準差不是零:0.55 到 1.17 的殘餘震盪,正是第 10 章算過的離散對沖殘餘風險——每日重平衡消不掉的部分。第 10 章的 QLBS 把這件事做成了強化學習:它的最適行動 \(u_t\)(每期持有的對沖股數)就是 delta 的 RL 版本,而且因為考慮了離散重平衡與風險趨避,它給出的對沖帶比 BS delta 更誠實。還有一個細節值得咀嚼:實現 35% 那行的標準差(1.17)比實現 25% 那行(0.55)大一倍——因為我們始終用隱波 25% 算 delta,模型的波動率錯了,對沖比率就系統性地錯,殘餘風險跟著放大。對沖的品質取決於你對波動率的認識,這句話下一節會長出一整張曲面。
順帶補一句賣方視角:上面每一行取負號就是賣方的世界——收租金、賠大波動。收益曲線變成「多數日子小賺、少數日子巨賠」,這種不對稱正是波動率風險溢酬的來源:市場長期觀察到隱含波動率平均高於事後實現的波動率,因為願意承接「平時收小錢、崩盤賠大錢」這種部位的人,要求額外補償。
四、隱含波動率:微笑、偏斜與期限結構
到目前為止,「波動率」都是一個數。現在把它攤開。隱含波動率是把市場成交價塞回 BS 公式反解出來的那個 \(\sigma\)——它不是誰測量到的物理量,而是市場價格的另一種座標表示。如果 BS 模型是對的,同一個標的所有選擇權反解出來的 \(\sigma\) 應該是同一個數。事實不是:
固定到期日、掃過履約價,反解出的隱波畫出一條曲線——低履約價那端明顯偏高,越往高履約價越低,這叫偏斜(skew);有些市場(例如外匯)兩端都翹、中間低,形狀像微笑,所以統稱微笑(smile)。股票與股指市場幾乎清一色是往左翹的偏斜——1987 年股災之後就再也沒平過。
比喻: 走一趟醫院藥庫,你會發現每種藥的安全庫存水位差很多:藥師把「一旦斷貨最致命」的藥囤得特別滿——多囤的每一箱都是實打實的倉儲成本,照付不誤。把「各藥品庫存水位」畫成一張圖,你讀到的不是疫情預報,而是藥師群體對「哪種斷貨最要命」的集體評估。隱波偏斜就是選擇權市場的庫存水位圖:低履約價(崩盤區)的隱波囤得特別高,因為那是所有人最怕斷貨的保命藥——這張圖同時混合了「市場認為的斷貨機率」與「大家願意為安心多付的倉儲費」。
偏斜在說兩件事,別混成一件。第一,市場的分布信念不是對數常態:真實的報酬分布左尾比 BS 假設的厚(崩盤比常態世界頻繁),低履約價的賣權作為崩盤保險,照對數常態定價就是低估,市場把價格抬上去,反解回來隱波就偏高。第二,風險偏好:即使機率算對了,投資人也願意為「在崩盤時刻拿到賠付」這件事多付錢——保險在你最需要的時候賠付,本身就值溢價。機率信念與風險溢酬糾纏在同一條曲線裡,這個糾纏第六節會再回來。
換一個軸:固定價平、掃過到期日,得到期限結構。短天期隱波通常對事件敏感——財報、央行會議、選舉前後,短端隱波會被單一事件撐起來;長天期隱波則被均值回歸的力量拉平,反映「拉長看波動率總會回到常態」的預期。倒掛的期限結構(短端高於長端)多半出現在市場正在恐慌的當下。
把兩個軸合起來——履約價 × 到期日——每個格子放一個隱含波動率,就是波動率曲面。圖 16-2 用的是本章自建的示範曲面:三個月期的偏斜(K=80 隱波 0.378、K=120 隱波 0.176)比一年期(0.295 對 0.192)陡得多,價平隱波則從一個月的 0.262 滑到兩年的 0.221。這兩個形狀特徵——短天期偏斜更陡、期限結構長端趨平——是股票市場曲面的標準長相。
五、波動率曲面與無套利:插值是地雷區
市場只在有限的履約價與到期日上有可靠報價,曲面的其他位置要靠插值補。這聽起來像純技術活,其實是地雷區,因為曲面不是任意的函數——它每一處都受無套利約束管束:
- 對履約價:買權價格必須隨履約價遞減(否則買高履約價、賣低履約價白撿錢),而且必須是履約價的凸函數——下一節會看到,凸性直接等價於「機率非負」。對應到隱波空間,就是偏斜不能陡到某個界限之外。
- 對到期日:同一履約價、更長到期的(美式或經標準化的歐式)選擇權不能更便宜——日曆價差的價值不能為負。對應:總變異數 \(\sigma^2(T)\,T\) 必須隨 \(T\) 不減。
天真的做法——直接對價格做線性插值——必死無疑:兩點之間拉直線,二階導數為零,中間所有價位的隱含機率被壓成零,密度出現空洞。在隱波空間做平滑插值好得多(隱波曲線平緩得多,樣條不容易亂跑),這也是實務主流;但「在隱波空間插值」只是降低犯規機率,不提供保證——插出來的曲面仍然必須回頭做 butterfly 與日曆檢查。事實上本章第六節自建的示範曲面就是現成的反面教材:它通過了 butterfly 檢查(萃取出的密度處處非負),卻在「密度均值必須等於遠期價」這條約束上悄悄犯規(100.83 對 100.50)——無套利檢查是一張清單,不是一個開關,通過一條不代表通過全部。
這裡正好接回第 3 章。那一章我們用高斯過程在報價稀疏處補隱含波動率微笑,GP 附贈的誤差帶在外推區爆寬,警告你「這裡的插值別信」;也看到先驗設錯時連誤差帶都會失真。現在可以把那個例子放進更完整的座標:GP 是插值機器裡誠實度最高的一種——它至少告訴你自己哪裡不可靠——但GP 的核函數同樣不懂無套利,它保證平滑,不保證凸性與日曆單調。成熟的管線是兩層:先用平滑工具(樣條、GP、或參數化的曲面模型)把形狀補出來,再用無套利條件當驗收閘門,不過閘門的補值一律退回重做。
曲面不只是定價的查價表。它是市場的體檢報告:偏斜變陡=市場更擔心左尾;短端隱波跳升=事件風險逼近;整張曲面平移=恐慌水位漲落。交易台每天盯的「vol 圖」,就是這張曲面的各種切片。而要把這份體檢報告讀到底——直接讀出市場心裡那條機率分布——需要本章壓軸的工具。
六、Breeden–Litzenberger:從價格表讀出市場的機率信念
第 2 章講過貝葉斯的世界觀:機率是信念的刻度,資訊進來、信念更新。現在做一件很貝葉斯的事——把選擇權市場當成一個巨大的信念表達機制,從價格裡反解出市場的信念分布。
比喻: 預測市場裡,「某候選人當選」合約的成交價 0.62 元(贏了付 1 元),就是市場隱含的當選機率 62%——價格即信念。選擇權市場是這件事的連續版:它不只開「指數三個月後會不會站上某個價位」一張合約,而是每個價位都開了一張。把整排合約的價格攤開,理論上就能把市場對「三個月後指數落在哪」的整條機率分布拼出來。Breeden–Litzenberger 就是那條拼裝公式。
推導只要兩步微分的直覺。歐式買權的風險中性價格是履約收益對密度的積分:\(c(K) = e^{-rT}\int_K^\infty (S_T - K)\,\varphi(S_T)\,dS_T\)。對 \(K\) 微分一次,積分裡的 \((S_T - K)\) 掉出一個 \(-1\),剩下「尾部機率」——一次微分給出累積分布;再微分一次,尾部機率對 \(K\) 的變化率就是密度本身:
逐項拆解:左邊是標的到期價落在 \(K\) 附近的風險中性密度;中間說密度就是價格曲線的彎度(乘上 \(e^{rT}\) 把貼現還原);右邊用第二節同款的中央差分逼近二階導。注意右邊分子的三項組合——買一口 \(K-h\)、賣兩口 \(K\)、買一口 \(K+h\)——正是蝶式價差(butterfly)的配方。所以這條公式同時是一句市場語言:緊縮履約價間距的蝶式價差,其價格就是「標的到期落在中間履約價附近」的機率標價。蝶式的履約收益永遠非負,所以無套利下它的價格不能為負——這就是上一節「凸性=機率非負」的來歷。
上代碼。用第四節的偏斜曲面生成一排密集履約價的買權價格(充當「市場報價」),差分出密度,並與平坦曲面(單一隱波)的對數常態密度對照:
import numpy as np
from math import erf, sqrt, exp, log
def Phi(x): return 0.5 * (1.0 + erf(x / sqrt(2.0)))
S0, r, T = 100.0, 0.02, 0.25
Fwd = S0 * exp(r * T) # 遠期價 100.50
def smile(K, T_):
"""自建偏斜曲面:低履約價隱波高(示範用,非市場數據)"""
m = log(K / (S0 * exp(r * T_)))
return (0.22 + 0.05*exp(-2.0*T_)) - (0.24/sqrt(T_))*m + (0.35/sqrt(T_))*m**2*0.5
def bs_call(S, K, sig):
d1 = (log(S/K) + (r + 0.5*sig**2)*T) / (sig*sqrt(T))
return S*Phi(d1) - K*exp(-r*T)*Phi(d1 - sig*sqrt(T))
Ks = np.arange(50.0, 160.0 + 1e-9, 0.5); h = 0.5
c_skew = np.array([bs_call(S0, k, smile(k, T)) for k in Ks]) # 帶偏斜
c_flat = np.array([bs_call(S0, k, smile(Fwd, T)) for k in Ks]) # 平坦對照
def density(c): # B-L:二階差分 × e^{rT}
return exp(r*T) * (c[:-2] - 2*c[1:-1] + c[2:]) / h**2
dens_s, dens_f, Km = density(c_skew), density(c_flat), Ks[1:-1]
print(f"積分 {np.trapz(dens_s, Km):.4f}|均值 {np.trapz(Km*dens_s, Km):.2f}"
f"(遠期 {Fwd:.2f})|最小值 {dens_s.min():.6f}")
lo, hi = Km <= 80.0, Km >= 115.0
print(f"P(S_T<=80):偏斜 {np.trapz(dens_s[lo], Km[lo]):.4f} vs 平坦 {np.trapz(dens_f[lo], Km[lo]):.4f}")
print(f"P(S_T>=115):偏斜 {np.trapz(dens_s[hi], Km[hi]):.4f} vs 平坦 {np.trapz(dens_f[hi], Km[hi]):.4f}")
# 輸出:
# 積分 0.9999|均值 100.83(遠期 100.50)|最小值 -0.000000
# P(S_T<=80):偏斜 0.0641 vs 平坦 0.0392
# P(S_T>=115):偏斜 0.1002 vs 平坦 0.1273讀三件事。第一,萃取成功:密度積分 0.9999、處處非負(最小值是 \(10^{-7}\) 量級的數值零),二階差分真的把一條機率分布從價格表裡拎了出來。第二,偏斜的分布語意現形:與平坦曲面的對數常態相比,偏斜密度的左尾厚了 64%(跌破 80 的隱含機率 6.4% 對 3.9%)、右尾反而變薄、峰值右移——市場用偏斜表達的正是「大跌比對數常態世界常見、小漲比大漲常見」這幅圖像。第三,誠實的瑕疵:密度均值 100.83 高於遠期價 100.50,前面說過,這代表我們手畫的示範曲面本身帶著一絲對遠期的套利空間——真實市場的曲面由造市商的套利掃描盯著,不會留這個口子;自建曲面沒人盯,就露了餡。用自己的工具抓到自己例子的毛病,是這類管線最好的品管示範。
實務上的 B-L 沒有教科書這麼順:真實報價只在稀疏的履約價上存在、帶著買賣價差的雜訊,而二階差分是雜訊放大器——作業三會讓你親手體會「教科書公式在真實資料上碎成負機率」是什麼景象,以及為什麼實務流程總是「先在隱波空間平滑、再回價格空間差分」。
最後,也是認識論上最重要的一點:這條密度是風險中性的,不是真實世界的預測分布。它是「市場的機率信念」與「風險偏好」的乘積——左尾特別厚,一部分是市場真的認為崩盤機率高,一部分是崩盤狀態的一塊錢比平時的一塊錢更值錢(第 14 章風險中性定價的核心邏輯)。所以拿風險中性密度直接當預報是系統性偏悲觀的;反過來,把風險中性密度與你自己估計的真實分布並排比對,兩者的差就是市場各處標價的風險溢酬地圖——這是波動率交易者真正的獵場。
七、策略速覽:用 Greeks 讀三個經典結構
有了 Greeks 與密度的語言,經典選擇權結構可以一眼讀穿。挑三個最有教學價值的,重點不是背損益圖,而是每個結構都是對分布某個部位的精準下注:
跨式(straddle)=押注波動本身。 同履約價的買權加賣權各一口,通常選在價平——此處買賣權 delta 恰好一正一負抵銷,結構天生 delta 中性。剩下的暴險純粹是波動:大量正 gamma、正 vega,付大量 theta。第三節的漁網比喻在這裡最貼切:買跨式再持續 delta 對沖,就是純付隱含、純收實現的波動率交易——也是研究隱含對實現波動率溢酬的標準載具。
賣權價差(put spread)=有折扣的下檔保護。 買一口較高履約價的賣權、賣一口較低履約價的賣權。與單買賣權相比,把「跌破下履約價之後」的保護賣回給市場換取權利金折扣。Greeks 讀法:負 delta、價外時正 gamma 負 theta;但結構深入價內後 gamma 翻負、theta 翻正——它的凸性是會變臉的。在偏斜陡峭的市場它特別受歡迎:賣出的低履約價賣權正好站在隱波最貴的位置,等於高價賣出最貴的保險來補貼自己買的保險。
蝶式(butterfly)=直接購買一格機率。 上一節已經揭曉:買一賣二買一的三腳結構就是 B-L 公式的分子,緊間距蝶式的價格就是市場對「到期落在中間履約價附近」的機率標價。想表達「指數三個月後就停在這附近」的觀點,蝶式是最純粹的工具;反過來,若你自估的真實分布在某價位的機率高於風險中性密度,買那一格的蝶式就是把分布觀點變成部位的直接翻譯。
三個結構合起來的方法論教訓:選擇權市場是一個分布的樂高系統——任何你對「分布形狀」的觀點(波動、偏斜、某一格的機率),都存在一個 Greeks 組合恰好把它分離出來。先想清楚要押分布的哪個部位,再挑結構,順序不能反。
八、誠實限界:Greeks 不是免死金牌
按本課程的慣例,收尾前把工具的邊界說清楚。
Greeks 是局部的。 偏導數只描述小變動。標的跳空 15% 開盤,你的 delta 對沖在跳空瞬間毫無防禦——gamma 的二次項近似在大幅變動下也失準,更別提跳過程中根本無法交易。2021 年初美股散戶軋空事件是活教材:造市商賣出深價外買權後對沖,股價暴漲使 delta 急速膨脹,被迫追買股票、進一步推升股價——對沖行為本身成了火上的油。Greeks 假設「我對沖、市場不動」,當部位大到市場會回應你,這個假設就翻車(第 1 章高頻縮影裡「監督式預測管不了自身市場衝擊」的老問題,換了個舞台重演)。
Greeks 是模型的產物。 delta 的定義人人同意,數值卻因模型而異:BS 假設隱波不隨標的動,但股票市場明明「跌市帶動隱波升」,把這層連動算進來的修正 delta 與 BS delta 可以差出好幾個百分點——對沖比率不同,損益路徑就不同。vega 更麻煩:在單參數的 BS 裡它定義清晰,換到多參數的隨機波動率模型,「波動率動一下」就有平移、變陡、變彎多種動法,一個 vega 攤成一組。用哪個模型的 Greeks 對沖,本質上是在賭哪個模型更接近市場的動力學——這件事沒有免費答案,只能用歷史資料做樣本外對沖回測來裁決(第 4 章樣本外紀律的又一次現身)。
隱含波動率不是預測。 隱波是價格的座標變換,內含風險溢酬;長期而言隱含系統性高於事後實現,把隱波當成對未來波動的無偏預報會一直高估。同理,風險中性密度的厚左尾不等於「市場預測會崩盤」。這些量最有價值的用法從來不是當預言,而是當比價基準:隱含對實現、風險中性對真實估計,差值才是資訊。
流動性是所有公式的隱藏前提。 對沖要成交才算數。深度價外的報價稀疏、價差巨大,B-L 在那裡萃出的「機率」主要是雜訊;壓力時刻價差拉開,連續對沖的成本假設整個失效。曲面最漂亮的部分永遠在流動性最好的價平附近——越往邊角走,越要記得你看的是插值不是市場。
下一章把這套「定價—敏感度—曲面」的裝備帶進利率、信用與外匯市場——那裡的曲面不只一張,而且互相糾纏。
§03原書對照
本課以部位風險的敘事線重組了原書第 11、12 兩章,以下內容原書有、本課未展開。其一,Greeks 的模型相依性專節:delta、theta 這類概念在任何模型都存在,vega 卻完全繫於所選的隨機過程;Heston 模型裡沒有單一波動率參數,長期均衡波動與初始波動兩個參數對應出「平移曲面」等多種 vega 定義,並討論寬客需把務實模型的風險映射回 BS 語言與交易員溝通的日常困境(pp.274–275)。其二,smile-adjusted delta 的完整處理:以鏈鎖律把「標的動時隱波跟著動」寫進 delta,並以美元兌巴西幣選擇權為例,校準 Heston 後比較三種 delta 的數值差異(pp.276–278,式 11.14–11.18)。其三,對沖實務專節:行事曆式與觸價式兩種重平衡規則的取捨、vega 對沖以價平跨式為工具的對沖比率公式(式 11.20),以及用歷史資料做 Greeks 的樣本外驗證——最好的對沖定義為歷史損益變異最小者(pp.278–281)。其四,交易結構圖鑑:掩護性買權、買賣權價差、跨式與勒式、蝶式與兀鷹、日曆價差、風險逆轉、一比二價差各配損益圖與多空波動屬性表(pp.282–291)。其五,「波動率作為資產類別」與隱含對實現波動率溢酬的實證:以 VIX 對照標普實現波動率,量測平均約 3.5% 的正溢酬,並警告溢酬伴隨崩盤時的巨幅回吐——賣方處境被喻為「a proverbial penny in front of a steamroller」(p.294)(pp.291–294)。其六,GameStop 個案:散戶集中買進深價外買權,造市商 delta 對沖的追買形成回饋迴圈的完整敘事(pp.295–296)。其七,第 12 章的密度萃取進階路線:非參數密度的最佳化框架——以機率向量為變數、市價為約束(式 12.10–12.16);加權蒙地卡羅法以最大熵或對先驗分布的相對熵為目標函數(式 12.17–12.26),能把買賣價差寫成不等式約束、並以加權模擬路徑串接不同到期日的密度(pp.303–308)。其八,數位選擇權與買權價差逼近累積分布的關係(pp.302–303)。其九,風險中性對真實測度的比較實務:以拔靴法建真實分布、辨識兩測度分歧處的風險溢酬,並以蝶式做多真實測度質量較高的區段(pp.310–312)。其十,參數式與非參數式定價的總評:非參數法把過度決定問題翻轉為欠決定問題的代價是 Greeks 失去自然定義(p.313)。原書第 11 章對應印刷頁 pp.265–296、第 12 章 pp.297–313。
§04作業和解答
作業一:賣權的 Greeks 與買賣權對稱
延續第二節的參數(S=100、K=100、r=2%、σ=25%、T=0.25)。(1) 用買賣權平價(put-call parity)從買權價格推出賣權價格;(2) 寫出賣權的 delta 與 theta 解析式並計算數值,用有限差分核對;(3) 驗證同履約價的買權與賣權 gamma、vega 完全相同,並說明為什麼。
解答 SOLUTION
import numpy as np
from math import erf, sqrt, exp, log, pi
def Phi(x): return 0.5 * (1.0 + erf(x / sqrt(2.0)))
def phi(x): return exp(-0.5 * x * x) / sqrt(2.0 * pi)
S0, K, r, sig, T = 100.0, 100.0, 0.02, 0.25, 0.25
d1 = (log(S0/K) + (r + 0.5*sig**2)*T) / (sig*sqrt(T)); d2 = d1 - sig*sqrt(T)
C = S0*Phi(d1) - K*exp(-r*T)*Phi(d2)
P_parity = C - S0 + K*exp(-r*T) # (1) 平價關係
P_direct = K*exp(-r*T)*Phi(-d2) - S0*Phi(-d1)
print(f"平價推得賣權 {P_parity:.4f}|直接公式 {P_direct:.4f}")
# 輸出:平價推得賣權 4.7257|直接公式 4.7257
delta_p = Phi(d1) - 1.0 # (2) 賣權 delta
theta_p = (-S0*phi(d1)*sig/(2*sqrt(T)) + r*K*exp(-r*T)*Phi(-d2)) / 365
def bs_put(S):
dd1 = (log(S/K) + (r + 0.5*sig**2)*T) / (sig*sqrt(T))
return K*exp(-r*T)*Phi(-(dd1 - sig*sqrt(T))) - S*Phi(-dd1)
eps = 0.01
delta_fd = (bs_put(S0+eps) - bs_put(S0-eps)) / (2*eps)
print(f"賣權 delta {delta_p:.4f}(差分 {delta_fd:.4f})|theta/日 {theta_p:.4f}")
# 輸出:賣權 delta -0.4592(差分 -0.4592)|theta/日 -0.0244
gamma_p = (bs_put(S0-eps) - 2*bs_put(S0) + bs_put(S0+eps)) / eps**2 # (3)
print(f"賣權差分 gamma {gamma_p:.6f}(買權解析 {phi(d1)/(S0*sig*sqrt(T)):.6f})")
# 輸出:賣權差分 gamma 0.031748(買權解析 0.031748)(1) 平價關係 \(C - P = S - Ke^{-rT}\) 給出賣權 4.7257,與直接公式一致。(2) 賣權 delta 為 \(\Phi(d_1) - 1 = -0.4592\):永遠介於 \(-1\) 與 0,價平約 \(-0.46\)(不是恰好 \(-0.5\),因為遠期價略高於現價);每日 theta \(-0.0244\),比買權的 \(-0.0299\) 溫和——賣權的時間值裡有一部分被「延後收到履約金」的利息效果抵回。(3) gamma 與 vega 相同的原因一句話:平價關係右邊 \(S - Ke^{-rT}\) 對 \(S\) 是線性函數,二階導與對 \(\sigma\) 的導數都是零,所以買權與賣權的所有「二階以上與波動率」暴險必然逐項相等——凸性不分買賣權方向。
作業二:對沖頻率與殘餘風險的收縮
延續第三節的模擬,固定實現波動率=隱含波動率=25%(平均損益為零的公平情境),把重平衡頻率從每週(13 次)調到每日(63 次)再到每日四次(252 次),觀察殘餘損益標準差的收縮速度,並對照第 10 章「殘餘風險以 \(1/\sqrt{N}\) 收縮」的結論。
解答 SOLUTION
import numpy as np
from math import erf, sqrt, exp, log
def Phi(x): return 0.5 * (1.0 + erf(x / sqrt(2.0)))
S0, K, r, sig, T = 100.0, 100.0, 0.02, 0.25, 0.25
d1 = (log(S0/K) + (r + 0.5*sig**2)*T) / (sig*sqrt(T))
C0 = S0*Phi(d1) - K*exp(-r*T)*Phi(d1 - sig*sqrt(T))
def hedge_std(n_steps, seed):
rng = np.random.default_rng(seed)
dt = T / n_steps
S = np.full(20000, S0); dlt = np.full(20000, Phi(d1)); cash = -C0 + dlt*S0
for i in range(1, n_steps + 1):
S = S * np.exp((r - 0.5*sig**2)*dt + sig*sqrt(dt)*rng.standard_normal(20000))
cash *= exp(r*dt); tau = T - i*dt
if i < n_steps:
d1v = (np.log(S/K) + (r + 0.5*sig**2)*tau) / (sig*np.sqrt(tau))
nd = 0.5*(1.0 + np.vectorize(erf)(d1v / sqrt(2.0)))
else:
nd = (S > K).astype(float)
cash += (nd - dlt)*S; dlt = nd
return (np.maximum(S - K, 0.0) + cash - dlt*S).std()
for n in (13, 63, 252):
print(f"N={n:>3d}:殘餘損益標準差 {hedge_std(n, 7):.4f}")
# 輸出:
# N= 13:殘餘損益標準差 1.1526
# N= 63:殘餘損益標準差 0.5417
# N=252:殘餘損益標準差 0.2730頻率每升約 4–5 倍,標準差約砍半:\(1.1526/0.5417 = 2.13 \approx \sqrt{63/13} = 2.20\)、\(0.5417/0.2730 = 1.98 \approx \sqrt{252/63} = 2.00\)——與 \(1/\sqrt{N}\) 律吻合,複驗了第 10 章離散對沖的結論。兩個延伸觀察:一、收縮是平方根速度,把殘餘風險再砍一半要付四倍的交易次數,真實世界還有交易成本在另一頭排隊,所以存在一個最適頻率而不是越頻繁越好——這正是第 10 章 QLBS 把「對沖政策」變成最佳化變數的動機;二、即使 N=252,標準差 0.28 仍不是零,離散世界裡完美複製不存在,殘餘只能管理、不能消滅。
作業三:雜訊下的 Breeden–Litzenberger
第六節的萃取用了間距 0.5 的密集無雜訊價格。真實市場沒這麼慷慨:(1) 把履約價網格放粗到間距 2.5,並對每個價格加上 ±0.05 美元的均勻雜訊(模擬買賣價差的中價誤差),重新差分出密度,數一數出現幾個負密度點;(2) 解釋為什麼二階差分對雜訊特別敏感;(3) 提出至少兩個實務上的補救方向。
解答 SOLUTION
import numpy as np
from math import erf, sqrt, exp, log
def Phi(x): return 0.5 * (1.0 + erf(x / sqrt(2.0)))
S0, r, T = 100.0, 0.02, 0.25
def smile(K):
m = log(K / (S0*exp(r*T)))
return (0.22 + 0.05*exp(-2.0*T)) - (0.24/sqrt(T))*m + (0.35/sqrt(T))*m**2*0.5
def bs_call(K, sig):
d1 = (log(S0/K) + (r + 0.5*sig**2)*T) / (sig*sqrt(T))
return S0*Phi(d1) - K*exp(-r*T)*Phi(d1 - sig*sqrt(T))
rng = np.random.default_rng(7)
Ks, h = np.arange(60.0, 140.0 + 1e-9, 2.5), 2.5 # 粗網格
c = np.array([bs_call(k, smile(k)) for k in Ks])
c_noisy = c + rng.uniform(-0.05, 0.05, size=len(Ks)) # ±5 美分中價雜訊
dens = exp(r*T) * (c_noisy[:-2] - 2*c_noisy[1:-1] + c_noisy[2:]) / h**2
print(f"負密度點 {(dens < 0).sum()} / {len(dens)}|積分 {np.trapz(dens, Ks[1:-1]):.4f}")
# 輸出:負密度點 7 / 31|積分 0.9760(1) 31 個內部格點裡有 7 個出現負機率——教科書公式在帶雜訊的粗網格上直接碎裂。(2) 原因看差分公式的結構:分子是三個價格的組合,雜訊量級 \(\varepsilon\) 不變,但分母是 \(h^2\)。對 \(h=2.5\),一次 0.05 美元的雜訊經過 \(\varepsilon/h^2\) 放大成約 0.008 的密度誤差——與密度本身的量級(峰值約 0.037)相比已是兩成上下;網格越細雜訊放大越兇(\(h=0.5\) 時同樣的雜訊放大 25 倍)。微分是雜訊放大器,二階微分是平方級的放大器——這與第 5 章對神經網路求導時「模型微小的抖動會放大成敏感度的大抖動」是同一個數學現象。(3) 補救方向:一、先平滑再微分——把價格轉到隱波空間(曲線平緩、雜訊相對小),用樣條或第 3 章的 GP 平滑後轉回價格空間再差分,這是實務主流;二、改用最佳化萃取——放棄逐點差分,直接求一組非負、總和為一、且能在買賣價差範圍內複現所有報價的機率向量,把無套利當成約束而非事後檢查(原書第 12 章的加權蒙地卡羅正是這條路);三、把買賣價差寫進目標函數的權重,報價越寬的點越不值得信。共同精神:別對雜訊求導,先讓結構性假設吸收雜訊,再求導。
作業四:當 BS delta 不夠用(概念題)
股票市場有一個頑固的實證規律:指數下跌時,隱含波動率傾向上升(跌市帶恐慌)。(1) 說明在這個規律下,用 BS 公式的 \(\Phi(d_1)\) 當對沖比率會產生什麼系統性偏差;(2) 寫出把「隱波隨標的動」納入之後的修正 delta(鏈鎖律形式),並判斷修正方向;(3) 這件事與第五節「Greeks 是模型的產物」如何呼應?
解答 SOLUTION
(1) BS 的 delta 只計算「標的動、隱波不動」的價格變化。若實際上標的下跌伴隨隱波上升,買權的損益就多了一條隱藏通道:跌市時隱波升、vega 為正的買權因此少賠一點。只按 BS delta 對沖的人,等於忽略這條通道,對沖比率系統性偏高——跌市時空頭對沖部位賺得比買權賠得多,部位悄悄變成押注「跌市伴隨恐慌」不發生。(2) 鏈鎖律把兩條通道合併:
逐項拆解:第一項是 BS delta;第二項是 vega 乘上「隱波對標的的反應斜率」。股票市場 \(\partial\sigma/\partial S < 0\)(跌市隱波升)、買權 vega \(> 0\),第二項為負——修正後的 delta 小於 BS delta,該放空的對沖股數更少。修正幅度取決於偏斜的陡峭程度,偏斜越陡、修正越大。(3) 呼應在於:\(\partial\sigma/\partial S\) 不是市場直接報價的量,它得從你選的模型(隨機波動率模型的相關係數、或對偏斜動態的經驗假設)推出來——所以「正確的 delta」有好幾個版本,分別對應對「標的與波動如何共舞」的不同信念。選 delta 就是選模型,選模型就該用第 4 章的紀律:拿歷史資料做樣本外對沖回測,讓「哪個 delta 的對沖損益最平穩」來投票,而不是讓數學的美感投票。
§05參考資料
- Greeks (finance) — Wikipedia — 各階 Greeks 的定義、閉式解與符號慣例的完整彙整,本章第二節的速查表。
- Volatility smile — Wikipedia — 微笑、偏斜與期限結構的現象整理,含 1987 年股災前後股票偏斜形態轉變的背景。
- Gatheral, J. & Jacquier, A. (2012). Arbitrage-free SVI Volatility Surfaces. arXiv:1204.0646 — 業界最常用的曲面參數化 SVI 及其無套利條件,本章第五節「插值必須過無套利閘門」的嚴格版。
- Malz, A. M. (2014). A Simple and Reliable Way to Compute Option-Based Risk-Neutral Distributions. NY Fed Staff Report 677 — 在隱波空間平滑後萃取風險中性密度的實務方法,正是作業三補救方向的完整實作。
- Risk-neutral measure — Wikipedia — 風險中性測度與真實測度的關係,理解第六節「密度=機率×風險偏好」的理論底座。
- Cboe VIX Index 官方頁 — 以整排選擇權價格加權出的隱含波動率指數:波動率曲面資訊被壓縮成單一數字的最著名應用。
- Kelliher, C. (2022). Quantitative Finance with Python. CRC Press / Taylor & Francis — 本課程 Part 4 對照之原書,第 11 章 pp.265–296、第 12 章 pp.297–313。