隨機波動率
Matlab中的赫爾懷特隨機波動率模型
我正在嘗試使用 matlab 對 Hull White 隨機波動率模型進行編碼,而我的程式碼似乎在某個地方搞砸了。我也編寫了 SABR 模型,並且執行良好。當我比較我的兩個模型之間獲得的價格時,似乎存線上性關係(如果我正確地完成了 Hull White,這是我所期望的)。
當我為 Hull White 生成隱含波動率微笑時,它看起來像這樣:
我正在使用 Hull White 模型的定價公式:
這是我為我的程式碼遵循的過程:
- 使用 Milstein 方案模擬 sigma 路徑以離散化 SDE
- 所有模擬的每次增量平均點併計算 \bar{V}。
- 找到布萊克斯科爾斯價格
- 計算隱含波動率。
它肯定在某個地方出錯了,所以如果有人有時間查看我的程式碼,我將不勝感激!提前致謝
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) $$ 使用蒙地卡羅,您應該:
- 生成隨機波動路徑 $ [0,T] $ 通過離散化上述 SDE(這裡定義的是 GBM,而不是 Hull & White 擴散)
- 計算時間積分 $ \hat {V}^{(j)} $ 對於每個模擬路徑 $ j=1,…,M $ ,例如,您可以使用梯形積分方法。
- 應用 BS 公式計算 $ C (\hat {V}^{(j)}) $
- 平均所有後者的呼叫價格最終獲得 $$ P_0=\frac {1}{M} \sum_{j=1}^M C (\hat {V}^{(j)}) $$.
相反,您所做的是(請參閱原始問題中的要點):平均所有模擬的隨機波動率路徑以得出“平均波動率路徑”,從中計算平均波動率 $ \hat {V} $ 超過 $ [0,T] $ 並使用後一個波動率數字應用 BS 公式。
因此,您的方法是錯誤的。請記住,隨機變數的函式的期望通常不是該隨機變數的期望的函式(顯然線性函式除外),請參見 Jensen 不等式。
不過,這是一個常見的新手錯誤,不用擔心 :)