赫斯頓
Mathematica 中 Heston SDE 的 Euler 離散化
下面是使用 Euler 離散化的 Heston SDE 數值解的實現。在 Mathematica 上執行需要不到一秒鐘的時間。
使用特徵函式/傅里葉變換技術,校準參數很好地擬合了波動率表面。
我正在嘗試使用以下程式碼通過 MC 模擬為奇異衍生品定價,但我無法將波動率表面作為第一步進行匹配。我懷疑程式碼只是需要太長時間才能收斂。
是否有任何快速修復可以顯著加快此程式碼的速度?
\[Rho] = -0.4042; v0 = 0.2577^2; \[Kappa] = 0.2656; vbar = .1851; \[Sigma]v = 0.2992; n = 100; NPaths = 100; Tmax = 574/365; dt = Tmax/n; dw = RandomVariate[ BinormalDistribution[{Sqrt[dt], Sqrt[dt]}, \[Rho]], {NPaths, n}]; HestonPaths[G0_] := Module[{XPaths, X, v}, XPaths = {}; Do[ X = {Log[G0]}; v = {v0}; Do[ v = Append[v, Abs[Last[v] + \[Kappa] (vbar - Last[v]) dt + Sqrt[Last[v]] \[Sigma]v dw[[idx, i]][[1]]]]; X = Append[X, Last[X] - 1/2 Last[v] dt + Sqrt[Last[v]] dw[[idx, i]][[2]]]; , {i, 1, n}]; XPaths = Append[XPaths, X]; , {idx, 1, NPaths}]; Exp[XPaths] ] ListLinePlot[HestonPaths[500]]
改變離散化並使用 QE-M 方法:Andersen (2006) 偏差遠小於簡單歐拉的偏差。進一步你可以嘗試使用控制變數/anthitetic 數字來減少樣本變異數。
一些簡單的改進:
將波動率的 Euler 離散化近似替換為 Milstein 離散化近似。參見例如Rouah 的這些筆記。
100 Paths 是非常少的路徑數,會導致您的估計出現很大的標準誤差。所以這應該增加〜100倍。
3)您應該使用某種形式的變異數減少。對立變數很容易實現,並且可以極大地改善您的標準錯誤。
正如 Phun 提到的,您可以使用許多更複雜的方法來建構路徑。這些可以減少您的偏差,因為這些方法通常可以避免變異數變為負數。
但我建議先嘗試上述簡化,因為偏差不應太大。使用此方案,您應該能夠非常接近由傅立葉定價方法確定的隱含波動率。
最後,進行一些健全性檢查:您是否也使用零利率校準了 Heston 模型?您是否對最終的 HestonPaths 取冪以獲得“實際”Heston Paths?(因為你正在近似 $ d\log[S] $ ).