赫斯頓

Mathematica 中 Heston SDE 的 Euler 離散化

  • April 6, 2015

下面是使用 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 數字來減少樣本變異數。

一些簡單的改進:

  1. 將波動率的 Euler 離散化近似替換為 Milstein 離散化近似。參見例如Rouah 的這些筆記

  2. 100 Paths 是非常少的路徑數,會導致您的估計出現很大的標準誤差。所以這應該增加〜100倍。

3)您應該使用某種形式的變異數減少。對立變數很容易實現,並且可以極大地改善您的標準錯誤。

正如 Phun 提到的,您可以使用許多更複雜的方法來建構路徑。這些可以減少您的偏差,因為這些方法通常可以避免變異數變為負數。

但我建議先嘗試上述簡化,因為偏差不應太大。使用此方案,您應該能夠非常接近由傅立葉定價方法確定的隱含波動率。

最後,進行一些健全性檢查:您是否也使用零利率校準了 Heston 模型?您是否對最終的 HestonPaths 取冪以獲得“實際”Heston Paths?(因為你正在近似 $ d\log[S] $ ).

引用自:https://quant.stackexchange.com/questions/17064