有限差分法期權定價:由導數定義到 Black-Scholes 數值解|Quant Math 第 6 講筆記
第 6 課・共 14 課
目錄
這是 Roman Paolucci 量化金融數學系列第 6 講的筆記。前面幾講建立了隨機微積分與期權定價模型的基礎,本講處理一個實務上繞不開的問題:模型推導出來的定價偏微分方程 Pricing PDE,多數沒有解析解(closed-form solution)。講者由導數的極限定義出發,推導有限差分法 Finite Differences 的逼近邏輯,先解一個可以手算的玩具常微分方程(ODE),再推廣到一維熱方程(PDE),最後落到 Black-Scholes 方程的數值解與網格選擇問題。
學習重點
- 定價 PDE 的定位:假設模型框架(Black-Scholes、Heston 等)→ 推導定價微分方程 → 解出給定輸入下的期權價格函數。Black-Scholes 方程有解析解,Heston 方程沒有,這就是數值方法存在的理由。
- 導數的逼近:極限定義中 $h \to 0$ 改成「$h$ 很小」,等號變約等號,就得到向前差分逼近 $f'(x) \approx \frac{f(x+h)-f(x)}{h}$——全部有限差分法的起點。
- 遞推求解:把逼近式重整為 $f(x+h) \approx f(x) + h f'(x)$,配合初始條件即可由左至右逐格「畫出」定價函數,這就是 Euler 方法的精神。
- PDE 與 ODE 難度相若:一維熱方程用時間向前差分、空間二階中央差分,代入後同樣是遞推更新,但多了邊界條件與穩定性條件 $\alpha \Delta t / (\Delta x)^2 \le \tfrac{1}{2}$。
- 網格決定精度:Black-Scholes 實例顯示,股價上限 $S_{\max}$ 取得太細,數值解會嚴重偏離解析解;逼近網格必須覆蓋你關心的輸入範圍,外插(extrapolation)不可靠。
詳細筆記
為何需要數值方法:有解析解與沒有解析解的分水嶺
講者開場先釐清整個定價流程:我們先假設一個模型框架(例如 Black-Scholes,或 Heston 一類的隨機波動率 Stochastic Volatility 框架),經過一套論證構造出定價微分方程;解出它,就得到一個函數,告訴我們在該模型假設下應為合約付多少錢。
Black-Scholes 方程的美妙之處是有解析解:給定五個參數——波動率、股價、無風險利率、行使價、到期時間——代入公式即得期權價格。但 Heston 模型的定價 PDE 沒有解析解,無法同樣代入了事。一個很合理的追問是:既然 Black-Scholes 有解析解,何不就用它?講者的回答是,Black-Scholes 的假設與市場實況不一致(常數波動率假設產不出市場上觀察到的隱含波動率曲面形狀),用它報價會出現前後不一致、甚至被套利的價格。因此交易台需要 Heston 這類更複雜模型的解——沒有解析解,就只能逼近,有限差分法正是為此而設。
玩具模型:一條可以手算的定價 ODE
為了看清「解定價方程」到底在做甚麼,講者自創一個玩具「Quant Guild 模型」,其定價微分方程為:
$$f'(x) = \frac{1}{2\sqrt{x}}$$兩邊積分即得通解 $f(x) = \sqrt{x} + C$,代入初始條件 $f(0) = 1$ 得 $C = 1$,於是特解為:
$$f(x) = \sqrt{x} + 1$$這條綠色曲線就是「任何股價 $x$ 之下,該玩具模型的期權價格」。講者強調:之後處理 Black-Scholes、Heston 時做的完全是同一件事——由模型假設推導微分方程、求解、得到以輸入定價的函數——分別只在於這個玩具例有解析解,而真實模型沒有。
導數的極限定義與差分逼近
微積分課堂上,導數以極限定義:
$$f'(x) = \lim_{h \to 0} \frac{f(x+h) - f(x)}{h}$$學生對它的印象通常很差——用它手證幂法則(power rule)是一場災難。但講者指出,這個定義的真正威力在於逼近:$h$ 不必「無窮小」,只要「很小」,等號就可以改成約等號:
$$f'(x) \approx \frac{f(x+h) - f(x)}{h} \qquad \text{當 } h \text{ 很小}$$這稱為向前差分 Forward Difference。講者以 $f(x) = x^2$ 在 $x = 1$ 為例:真實導數是 $2$,取 $h = 10^{-6}$ 算出逼近值 \$2.000001$,完全毋須動用任何求導法則——只需要原函數在 $x$ 與 $x+h$ 兩點的取值。
由逼近到遞推:Euler 方法的精神
關鍵一步是重整上式。兩邊乘以 $h$ 再移項:
$$f(x+h) \approx f(x) + h\, f'(x)$$這條式子同時涉及原函數與其導數——而微分方程恰好就是「告訴你導數是甚麼」的方程。於是求解流程變成:
- 離散化空間:$x_n = n h$,$n = 0, 1, \dots, N$;$h$ 是網格間距,越細越準。
- 代入差分逼近:把微分方程左邊的導數換成差商。
- 重整成遞推式:由 $y_n$ 求 $y_{n+1}$。
- 由初始條件起步,逐格迭代:初始條件給出 $y_0$,微分方程給出各點導數,於是 $y_1, y_2, \dots$ 逐一解出,逼近出整條定價函數。
以玩具模型實作,初始條件 $y_0 = 1$,導數函數 $f'(x) = \tfrac{1}{2} x^{-1/2}$,Python 核心不過數行:
x = np.linspace(0.0001, 5, 2000) # 離散化網格(起點避開 0,因導數含 1/√x)
f_prime = lambda x: .5 * x ** (-.5) # 微分方程給出的導數
x_d = [0] # 已逼近點的定義域
y_hat = [1] # 初始條件 y_0 = 1
for i in range(1, len(x)):
x_d.append(x[i])
y_hat.append(y_hat[-1] + f_prime(x_d[-2]) * (x[i] - x[i-1]))
講者特別提醒外插陷阱:若只逼近到 $x = 5$,這段逼近對 $x = 50$ 毫無意義。解析解「處處正確」,數值解只在網格覆蓋的範圍內可靠——想用股價 3 定價,網格就得鋪到遠超過 3。這是幾乎所有數值方法(連神經網絡亦然)的共通弱點。
推廣到 PDE:一維熱方程
Black-Scholes 方程屬二階拋物型 PDE,與物理學的熱方程同族,因此講者用一維熱方程示範 PDE 的有限差分:
$$\frac{\partial u}{\partial t} = \alpha \frac{\partial^2 u}{\partial x^2}$$這裡 $u(x, t)$ 是位置 $x$、時間 $t$ 的溫度——對照定價問題,就是「股價與時間(或股價與波動率)映射到期權價格」的曲面。處理步驟與 ODE 完全平行:
- 離散化兩個輸入:空間 $x_i = i\,\Delta x$、時間 $t_j = j\,\Delta t$,記 $u_i^j = u(x_i, t_j)$。
- 召回差分逼近:時間用向前差分(一階),空間用二階中央差分: $$\frac{\partial u}{\partial t} \approx \frac{u_i^{j+1} - u_i^j}{\Delta t}, \qquad \frac{\partial^2 u}{\partial x^2} \approx \frac{u_{i+1}^j - 2u_i^j + u_{i-1}^j}{(\Delta x)^2}$$
- 代入方程並解出下一時間層: $$u_i^{j+1} = u_i^j + \alpha \frac{\Delta t}{(\Delta x)^2}\left(u_{i+1}^j - 2u_i^j + u_{i-1}^j\right)$$
- 施加初始條件與邊界條件後,用雙重迴圈逐時間層迭代。
穩定性條件:誤差會否隨迭代爆炸
PDE 比 ODE 多一個新問題:穩定性 Stability。顯式格式要求:
$$\alpha \frac{\Delta t}{(\Delta x)^2} \le \frac{1}{2}$$不滿足的話,誤差會隨時間步迭代不斷放大,解直接失效。實作上講者取 $\alpha = 1.0$、$L = 1.0$、$T = 1.0$、$\Delta x = 0.1$、$\Delta t = 0.005$,並在程式開頭加一道檢查:if alpha * dt / dx**2 > 0.5 就印出警告。現場示範把 $\Delta t$ 改成 $0.05$ 即違反條件——網格參數不是隨便挑的。
實作層面與 ODE 例子的分別只在維度:用 np.meshgrid 建立時空網格、以二維陣列 U 儲存曲面、先施加初始與邊界條件,再用巢狀迴圈按上式更新,並以 np.isfinite 檢查更新值是否有限。方法論與 ODE「字面上是同一個算法」。
落回 Black-Scholes:網格質素的實證
講者最後把整套流程套到 Black-Scholes 方程:
$$\frac{\partial V}{\partial t} + \frac{1}{2}\sigma^2 S^2 \frac{\partial^2 V}{\partial S^2} + rS \frac{\partial V}{\partial S} - rV = 0$$其中 $V$ 是期權價值、$S$ 是股價、$\sigma$ 是波動率、$r$ 是無風險利率。離散化 $S_i = i\,\Delta S$($\Delta S = S_{\max}/M$)、$t_j = j\,\Delta t$($\Delta t = T/N$),記 $V_i^j = V(S_i, t_j)$,再代入各階差分即可遞推。

截圖出自原片(Roman Paolucci,2025):Black-Scholes PDE、符號說明,以及股價與時間的網格設定。
注意本例處理的是歐式認購期權 European Call;不同合約結構會改變邊界條件,進而改變整個解的動態。

截圖出自原片(Roman Paolucci,2025):三圖並列——$S_{\max}=150$ 的「差網格」、$S_{\max}=2000$ 的「好網格」、解析解;網格越完善,數值解越貼近真實解。
三圖並列的結論很直接:$S_{\max}=150$ 的網格產出的解嚴重失真,$S_{\max}=2000$ 則與解析解幾乎重合。沒有解析解可對照時(例如 Heston),我們無法這樣目測驗證,唯一自保的方法就是使用遠比需求寬裕、足夠細密的網格。講者亦預告未來會推導 Black-Scholes 與 Heston 方程本身(連續時間對沖論證、無套利定價、風險中性測度),並討論更進階的離散格式與誤差分析。
🙏 覺得內容有用?本站所有內容免費提供,使用推薦碼開戶就是支持我們繼續營運的最大鼓勵:
ZA Bank 邀請碼 P20923
—— 你享 HKD 2,000 迎新獎賞,本站獲得營運支持。
立即開戶 →
(聯盟連結|投資涉及風險,受條款及細則約束,此資料僅可於香港境內分發)
欣利克的看法
- 有限差分是「無解析解時的保底工具」,不是首選。 有解析解(Black-Scholes)或有半解析方法(Heston 的特徵函數配合 FFT,見第 7 講)時,速度與精度都遠勝有限差分。有限差分的真正價值在於通用——美式期權、奇異期權這類無法用特徵函數處理的結構,PDE 方法配合相應邊界條件仍是最可靠的選項之一。方法之間是互補,不是取代。
- 穩定性條件是顯式格式的硬成本。 $\alpha\Delta t/(\Delta x)^2 \le \tfrac{1}{2}$ 意味空間網格加密一倍,時間步就要細四倍,計算量按立方級增長。實務上交易台多用隱式或 Crank-Nicolson 格式繞過此限制(講者亦預告未來講解);讀者自行實作時,宜先把本講的顯式格式當教學起點,而非生產工具。
- 「網格要比需求寬裕」這條原則,與回測的樣本外驗證是同一思想。 本講證明逼近解不能外插到網格之外;本站在配對交易實戰見過同一邏輯——在擬合範圍內亮麗、範圍外失效。無論是數值逼近還是統計模型,「只在你驗證過的範圍內可信」是值得內化的紀律。
- 資料時效提醒: 影片於 2025 年 8 月上載。有限差分本身屬長期有效的數學工具,但講者提及的 Quant Guild 平台功能與程式庫連結會隨時間變動,動手重現時以其 GitHub 的 Quant Guild library 最新版本為準。
名詞解釋
- 期權 Option:賦予持有人於到期日或之前以指定價格買賣資產的權利而非義務的衍生合約。
- 認購期權 Call Option:給予持有人以行使價買入相關資產權利的期權。
- 行使價 Strike Price:期權合約約定的行使買賣價格。
- 波動率 Volatility:量度資產價格變動幅度的統計指標,是期權定價的核心輸入。
- 無風險利率 Risk-Free Rate:理論上零風險投資的回報率,定價模型中用作貼現與漂移項。
- 蒙地卡羅模擬 Monte Carlo Simulation:以大量隨機抽樣路徑逼近期望值的數值方法,是有限差分之外的另一條定價路線。
- 無套利 No Arbitrage:不存在無風險套戥機會的市場假設,是所有定價方程推導的邏輯起點。
- Python:量化金融實作最常用的程式語言,本講以其配合 NumPy 實現差分格式。
常見問題 FAQ
有限差分法和蒙地卡羅模擬有何分別?
兩者都是沒有解析解時的數值定價路線。有限差分直接逼近定價 PDE 的解,一次性產出整個「輸入→價格」曲面,適合美式或路徑依賴特徵可用邊界條件表達的合約;蒙地卡羅則模擬大量隨機路徑取平均收益,實現簡單、維度不受限,但每次只產一個價格點且收斂較慢。實務上按合約類型與模型維度二選一或互相驗證。
為甚麼向前差分逼近會準?
由導數的極限定義,$h \to 0$ 時差商收斂到真實導數;取足夠小的 $h$(如 $10^{-6}$),誤差自然壓到可忽略水平。代價是電腦浮點精度與計算量——$h$ 不能無限度小,且網格越密迭代次數越多,PDE 情形下還要受穩定性條件約束。
穩定性條件違反了會怎樣?
顯式格式下若 $\alpha\Delta t/(\Delta x)^2 > \tfrac{1}{2}$,每個時間步引入的捨入與逼近誤差會被後續迭代放大,數值解迅速發散、與真實解完全脫節。這不是「誤差大一點」的問題,而是解不可用。實作時應像講者示範那樣,在程式開頭硬性檢查該不等式。
原影片
本文整理自以下影片,版權屬原創作者所有,建議配合原片觀看: