Comando blsprice para valuar opciones financieras
Publicado por Emmanuel (6 intervenciones) el 17/01/2014 20:43:58
Una consulta:
Estoy haciendo un programa para valorar opciones financieras y para ello uso el método de diferencias finitas, esquema explícito.
Programa:
function price = EuPutExpl(SO,K,r,T,sigma,Smax,dS,dt)
%% set up grid and adjust increments if necessary
M=round(Smax/dS);
dS=Smax/M;
N=round(T/dt);
dt=T/N;
matval=zeros(M+1,N+1);
vetS=linspace(0,Smax,M+1)';
veti=0:M;
vetj=0:N;
%%, set up boundary conditions
matval(:,N+1)= max(K-vetS,0);
matval(1,:)= K*exp(-r*dt*(N-vetj));
matval(M+1,:)= 0;
%%, set up coefficients
a = 0.5*dt*(sigma^2*veti-r).*veti;
b = 1-dt*(sigma^2*veti.^2+r);
c = 0.5*dt*(sigma^2*veti+r).*veti;
%%, solve backward in time
for j=N:-1:1
for i=2:M
matval(i,j)=a(i)*matval(i-1,j+1)+b(i)*matval(i,j+1)+c(i)*matval(i+1,j+1);
end
end
price = interp1(vetS, matval(:,1),SO,'spline');
*Cuando ejecuto el fichero con las entradas:
price = EuPutExpl(50,50,0.1,0.4166666666,0.4,100,2,0.0041666666667)
price = 4.0669
COMANDO MATLAB:
En el libro para validar nuestro resultado obtenido por el programa, se compara usando el siguiente comando
[c,p]=blsprice(50,50,0.1,5/12,0.4)
c = 6.1165
p = 4.0760
Los resultados obtenidos, por el comando "blsprice", son 2: c (opción call) y p(opción put). Mi programa "EuPutExpl", sólo me da el resultado de la opción put y notamos que este resultado es cercano al obtenido por el comando propio del matlab, como debería ser. El programa cumple las condiciones de estabilidad, convergencia y consistencia. Sin embargo, el problema es el siguiente:
Cuando cambio el primer parámetro de entrada sucede que para algunos valores, el resultado de mi programa se aproxima al valor obtenido por el comando "blsprice" (el cual por ser el comando propio del matlab, lo considero como inequívoco) y para otros valores no se aproxima.
Por ejemplo si ejecuto las siguietnes 2 líneas, los resultados si coinciden.:
price = EuPutExpl(10,50,0.1,0.4166666666,0.4,100,2,0.0041666666667)
[c,p]=blsprice(10,50,0.1,5/12,0.4)
Pero si ejecuto las siguietnes 2 líneas, los resultados no coinciden.:
price = EuPutExpl(60.5,50,0.1,0.4166666666,0.4,100,2,0.0041666666667)
[c,p]=blsprice(60.5,50,0.1,5/12,0.4).
Ya he me comunicado con el autor del libro, lo dejaré al final los datos para que lo pueda bajar desde la web www.libgen.org/, pero no he logrado alguna respuesta. Espero que alguien me pueda ayudar a qué se debe que los resultados si coincidan para ciertos valores, mientras para otros no.
*Datos del libro:
[3] Paolo Brandimarte (2006), ((Numerical Methods in Finance and Economics A MATLAB-Based Introduction)), segunda edicion. John Wiley & Sons: Torino Italia., capítulo 9.
PDT: He dejado una imagen, de la página del libro, donde se ve el programa y los resultados
Agradezco su tiempo y espero respuestas.
Saludos.
Estoy haciendo un programa para valorar opciones financieras y para ello uso el método de diferencias finitas, esquema explícito.
Programa:
function price = EuPutExpl(SO,K,r,T,sigma,Smax,dS,dt)
%% set up grid and adjust increments if necessary
M=round(Smax/dS);
dS=Smax/M;
N=round(T/dt);
dt=T/N;
matval=zeros(M+1,N+1);
vetS=linspace(0,Smax,M+1)';
veti=0:M;
vetj=0:N;
%%, set up boundary conditions
matval(:,N+1)= max(K-vetS,0);
matval(1,:)= K*exp(-r*dt*(N-vetj));
matval(M+1,:)= 0;
%%, set up coefficients
a = 0.5*dt*(sigma^2*veti-r).*veti;
b = 1-dt*(sigma^2*veti.^2+r);
c = 0.5*dt*(sigma^2*veti+r).*veti;
%%, solve backward in time
for j=N:-1:1
for i=2:M
matval(i,j)=a(i)*matval(i-1,j+1)+b(i)*matval(i,j+1)+c(i)*matval(i+1,j+1);
end
end
price = interp1(vetS, matval(:,1),SO,'spline');
*Cuando ejecuto el fichero con las entradas:
price = EuPutExpl(50,50,0.1,0.4166666666,0.4,100,2,0.0041666666667)
price = 4.0669
COMANDO MATLAB:
En el libro para validar nuestro resultado obtenido por el programa, se compara usando el siguiente comando
[c,p]=blsprice(50,50,0.1,5/12,0.4)
c = 6.1165
p = 4.0760
Los resultados obtenidos, por el comando "blsprice", son 2: c (opción call) y p(opción put). Mi programa "EuPutExpl", sólo me da el resultado de la opción put y notamos que este resultado es cercano al obtenido por el comando propio del matlab, como debería ser. El programa cumple las condiciones de estabilidad, convergencia y consistencia. Sin embargo, el problema es el siguiente:
Cuando cambio el primer parámetro de entrada sucede que para algunos valores, el resultado de mi programa se aproxima al valor obtenido por el comando "blsprice" (el cual por ser el comando propio del matlab, lo considero como inequívoco) y para otros valores no se aproxima.
Por ejemplo si ejecuto las siguietnes 2 líneas, los resultados si coinciden.:
price = EuPutExpl(10,50,0.1,0.4166666666,0.4,100,2,0.0041666666667)
[c,p]=blsprice(10,50,0.1,5/12,0.4)
Pero si ejecuto las siguietnes 2 líneas, los resultados no coinciden.:
price = EuPutExpl(60.5,50,0.1,0.4166666666,0.4,100,2,0.0041666666667)
[c,p]=blsprice(60.5,50,0.1,5/12,0.4).
Ya he me comunicado con el autor del libro, lo dejaré al final los datos para que lo pueda bajar desde la web www.libgen.org/, pero no he logrado alguna respuesta. Espero que alguien me pueda ayudar a qué se debe que los resultados si coincidan para ciertos valores, mientras para otros no.
*Datos del libro:
[3] Paolo Brandimarte (2006), ((Numerical Methods in Finance and Economics A MATLAB-Based Introduction)), segunda edicion. John Wiley & Sons: Torino Italia., capítulo 9.
PDT: He dejado una imagen, de la página del libro, donde se ve el programa y los resultados
Agradezco su tiempo y espero respuestas.
Saludos.
- consulta.zip(47,2 KB)
Valora esta pregunta
0