隨機波動率

Matlab中的赫爾懷特隨機波動率模型

  • July 10, 2016

我正在嘗試使用 matlab 對 Hull White 隨機波動率模型進行編碼,而我的程式碼似乎在某個地方搞砸了。我也編寫了 SABR 模型,並且執行良好。當我比較我的兩個模型之間獲得的價格時,似乎存線上性關係(如果我正確地完成了 Hull White,這是我所期望的)。 船體白 SABR 價格比較

當我為 Hull White 生成隱含波動率微笑時,它看起來像這樣: 在此處輸入圖像描述

我正在使用 Hull White 模型的定價公式:

在此處輸入圖像描述

這是我為我的程式碼遵循的過程:

  1. 使用 Milstein 方案模擬 sigma 路徑以離散化 SDE
  2. 所有模擬的每次增量平均點併計算 \bar{V}。
  3. 找到布萊克斯科爾斯價格
  4. 計算隱含波動率。

它肯定在某個地方出錯了,所以如果有人有時間查看我的程式碼,我將不勝感激!提前致謝

function [Imp_Vol, Price] = Hull_White(S0, K, r, sigma0,gamma,alpha, T, M)


%   Monte Carlo European Call Option with Local Volatility using the Milstein Scheme. 
%   S0 - Underlying price at T=0
%   K - Strike Price
%   T - Time to Maturity in Years (please input uniform decimals ie 1.5,
%   2.9)
%   r - Interest rate
%   sigma0 - Volatility
%   gamma - Variable in Hull White model
%   alpha - Variable in Hull White model
%   M - Number of Monte Carlo Simulations 
%   Output price - corrosponding option price

N=floor(T*260); % Days to maturity

dt=1/260; % incriment for descretization

sigma_path = zeros(N,M);

for j=1:M % starting the Monte Carlo Simulations

   Z=randn(N,1);  % N random numbers to approximate dWi
   sigma=zeros(N,1); % initialising the volatility path vector

   sigma(1) = sigma0;

    for k=2:N % Calculating the volatility Path using the Milstein Scheme

           sigma(k) = sigma(k-1)*(1 + sqrt(dt)*gamma*Z(k-1) + dt*(alpha + 0.5*gamma*gamma*(Z(k-1)^2-1)));
    end
    sigma_path(:,j)=sigma;
end
sigma_integral = mean(sigma_path')';
sigma_integral_squared = sigma_integral.^2;
dt_vector = dt*ones(N,1);



V_bar = mean(sigma_integral_squared'*dt_vector); %numerical integration

[Call, Put] = blsprice(S0, K, r, T, V_bar, 0);
Imp_Vol = blsimpv(S0, K, r, T, Call, [],[], [], []);
Price = Call;
end

為了計算

$$ P_0 = \mathbb {E}[C (\hat{V})] $$ 在哪裡 $$ \hat{V} = \frac {1}{T} \int_0^T \sigma^2_s ds $$ 和 $$ d\sigma_t = \sigma_t (\alpha dt + \gamma dW_t) $$ 使用蒙地卡羅,您應該:

  1. 生成隨機波動路徑 $ [0,T] $ 通過離散化上述 SDE(這裡定義的是 GBM,而不是 Hull & White 擴散)
  2. 計算時間積分 $ \hat {V}^{(j)} $ 對於每個模擬路徑 $ j=1,…,M $ ,例如,您可以使用梯形積分方法。
  3. 應用 BS 公式計算 $ C (\hat {V}^{(j)}) $
  4. 平均所有後者的呼叫價格最終獲得 $$ P_0=\frac {1}{M} \sum_{j=1}^M C (\hat {V}^{(j)}) $$.

相反,您所做的是(請參閱原始問題中的要點):平均所有模擬的隨機波動率路徑以得出“平均波動率路徑”,從中計算平均波動率 $ \hat {V} $ 超過 $ [0,T] $ 並使用後一個波動率數字應用 BS 公式。

因此,您的方法是錯誤的。請記住,隨機變數的函式的期望通常不是該隨機變數的期望的函式(顯然線性函式除外),請參見 Jensen 不等式。

不過,這是一個常見的新手錯誤,不用擔心 :)

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