Quiero fijar el precio de las opciones exóticas bajo el modelo VG exponencial y el modelo de Merton para comparar ambos modelos.
Para fijar el precio de los productos exóticos según el modelo de Merton, he escrito el siguiente código. La salida es el precio de una opción Call, Asiática, Digital y Up y en Barrier Call. Sin embargo, el uso de bucles conduce a un cálculo muy lento. ¿Hay alguna forma inteligente de no utilizar bucles aquí? En el caso del modelo VG, puedo hacerlo pero en este caso, no lo veo.
function [Call,Asian,Digital,UIBP] = ExoticPricingMerton(S0,K,mu,delta,lambda,sigma,r,q,Maturity,H)
ht = 1/252; %trading days
P = 10^3; %Number of simulations
grid = (0:ht:Maturity);
N = length(grid);
omega = r-q-((1/2)*sigma^2+lambda*(exp(mu+(1/2)*delta^2)-1));
S = zeros(P,N);
S(:,1) = S0;
for i=1:P
for j=2:length(grid)
N = poissrnd(lambda*ht);
J = cumsum([0, normrnd(mu,delta,1,N)]);
Z = normrnd(0,1);
S(i,j) = S(i,j-1)*exp(omega*ht + sigma*sqrt(ht)*Z + J(end));
end
end
%European Call option
A = max(S(:,end)-K,0);
Call = exp(-r*Maturity)*(1/P)*sum(A);
%Asian option
A = max(mean(S,2) - K,0);
Asian = exp(-r*Maturity)*(1/P)*sum(A);
%Digital price
A = max(S(:,end) - K, 0)./(S(:,end)-K);
Digital = exp(-r*Maturity)*(1/P)*sum(A);
%Up-and-in out Barrier
A1 = (max(S,[],2)-H)./abs(max(S,[],2)-H);
A2 = max(A1,0);
A = (max(S(:,end)-K,0)).*A2;
UIBP = exp(-r*Maturity)*(1/P)*sum(A);
end
Gracias.