1 votos

Fijación de precios de los productos exóticos: ¿Monte-Carlo es demasiado lento?

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.

3voto

Can Berk Güder Puntos 661

Estás usando una herramienta equivocada para el trabajo. Escribe tu Monte Carlo en un lenguaje más rápido (Java probablemente sería suficiente, si no que C++ que es estándar para estas cosas). Entonces serás capaz de generar eficientemente más de 1000 trayectorias. De hecho, hacer precios derivados de Monte Carlo con 1000 trayectorias no tiene ningún valor. Sus resultados son, muy probablemente, muy inexactos. Lea un buen libro sobre la fijación de precios de Monte Carlo antes de aventurarse y perder su tiempo.

1voto

agc93 Puntos 216

Supongo que está utilizando MatLab.

Puede considerar la posibilidad de pregenerar los 1.000 números aleatorios una vez antes del bucle for, aprovechando la codificación de matrices.

Otro enfoque, ¿has probado a utilizar Quasi Monte Carlo?

Generación de números casi aleatorios

El QMC garantiza una convergencia más rápida y MatLab dispone de funciones que pueden generar secuencias casi aleatorias muy rápidamente (mil millones por debajo de un segundo).

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X