Tengo que utilizar el método Euler Monte Carlo para calcular el precio de la opción bajo la configuración del modelo Heston.
Sé por algún artículo que la convergencia es volátil para el modelo de Heston con un esquema simple de Monte Carlo y Euler, así que uso el Secuencia de Sobol para generar números casi aleatorios. Sin embargo, ahora el problema viene a que la serie generada está correlacionada en diferentes pasos de tiempo.
En detalle, está bien cuando uso norminv para transformar los números cuasi aleatorios a una distribución normal estándar. Sin embargo, después de usar la correlación $\rho$ para hacer series correlacionadas en el mismo paso de tiempo, resulta que las series en diferentes pasos de tiempo también están correlacionadas. Si ignoro este problema, el resultado de mi función sería significativamente mayor que la solución analítica dada por https://quanto.inria.fr/premia/koPremia .
¿Debo utilizar un puente browniano para resolver este problema? Si es así, ¿cómo lo hago en MATLAB ? ¿O cómo podría eliminar la correlación de las series en números casi aleatorios?
Aquí está mi código MATLAB para el método Monte Carlo simple. El problema es que no converge en absoluto.
function [price,error] = heston_mc(S0, K, V0, rho, kappa, theta, eta, r, T, n, m, rseed)
%V0 is the initial variance, and kappa is the mean reversion speed of
%variance, theta the mean reversion level, neta the volatility of
%variance.
%Generate correlated random numbers
if ~exist('rseed','var')
rseed = 42;
end
seed = RandStream.create('mcg16807','seed',rseed);
z = randn(seed, n-1, 2*m);
zX = z(:, 1:m);
zV = rho*zX + sqrt(1-rho^2)*z(:, m+1:2*m);
delta = T/n;
V = [repmat(V0,1,m); zeros(n-1,m)];
X = [repmat(log(S0), 1, m); zeros(n-1, m)];
for i = 2:n
X(i, :) = X(i-1, :) + (r-max(V(i-1, :), 0)/2)*delta + sqrt(delta)*sqrt(max(V(i-1, :), 0)).*zX(i-1, :);
V(i, :) = V(i-1, :) + kappa*(theta-max(V(i-1, :),0))*delta + eta*sqrt(delta)*sqrt(max(V(i-1, :), 0)).*zV(i-1, :);
end
option = exp(-r*T)*max(exp(X(end, :))-K, 0);
price = mean(option);
error = std(option)/sqrt(m);
end
3 votos
Los cuasi-aleatorios no ayudarán con el problema de que el esquema de Euler es malo para Heston y requiere una gran cantidad de pasos de tiempo para obtener un buen comportamiento. Ahora hay muchos trabajos sobre esquemas mejores. Véase ssrn.com/abstract=1617187 y sus referencias.