Estoy tratando de código con el Casco Blanco de volatilidad estocástica del modelo de uso de matlab y en alguna parte de mi código parece un lío. He codificado el SABR modelo así y que está funcionando bien. Cuando comparo los precios obtenidos entre mis dos modelos, parece ser que hay una relación lineal (que es lo que puedo esperar si me he hecho el Casco Blanco correctamente).
Cuando me producen volatilidad implícita de las sonrisas para el Casco Blanco, se ve algo como esto:
Estoy usando la fórmula de fijación de precios para el Casco Blanco modelo:
Este es el procedimiento que sigo para mi código:
- Simular Trayectorias de sigma usando la Milstein esquema para discretising un SDE
- Promedio de puntos en cada momento incriment para todas las simulaciones y calcular \bar{V}.
- Encontrar el Black Scholes Precio
- Calcular La Volatilidad Implícita.
Es, definitivamente, va mal en algún lugar así que si alguien tiene el tiempo para mirar a través de mi código, yo estaría muy agradecido! gracias de antemano
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