Diferencia entre revisiones de «Modelo de Black-Scholes (PAA)»
De MateWiki
(Página creada con «{{ TrabajoED | Modelo de Black-Scholes | MNEDP|2025-26 | Pablo Maestro Fernández, Alex Heredero Santamaría, Alejandro Cer...») |
|||
| (No se muestran 7 ediciones intermedias del mismo usuario) | |||
| Línea 1: | Línea 1: | ||
| − | {{ TrabajoED | Modelo de Black-Scholes | [[:Categoría:MNEDP|MNEDP]]|[[:Categoría:MNEDP25/26|2025-26]] | Pablo Maestro Fernández, Alex Heredero Santamaría, Alejandro Cerrón Cribeiro}} | + | {{ TrabajoED | Modelo de Black-Scholes (PAA) | [[:Categoría:MNEDP|MNEDP]]|[[:Categoría:MNEDP25/26|2025-26]] | Pablo Maestro Fernández, Alex Heredero Santamaría, Alejandro Cerrón Cribeiro}} |
| + | |||
| + | =Póster del Trabajo= | ||
| + | |||
| + | {|style="margin: 0 auto;" | ||
| + | | [[Archivo:9a3a5bc5-e037-4b04-9f3a-5a7b95a5a19a.jpg |900px|thumb|right|Modelo de Black-Scholes.]] | ||
| + | |} | ||
| + | |||
| + | =Código de Matlab= | ||
| + | <source lang="matlab"> | ||
| + | format long | ||
| + | N=100; | ||
| + | sigma=0.2; | ||
| + | T=1; | ||
| + | r=0.05; | ||
| + | K=100; | ||
| + | alpha=4; | ||
| + | a=0; | ||
| + | b=K*alpha; | ||
| + | L=b-a; | ||
| + | h=L/(N-1); | ||
| + | x=0:h:L; | ||
| + | A=diag((2*h/3)*ones(1, N)); %Construimos A | ||
| + | A(1,1)=h/3; | ||
| + | A(N,N)=h/3; | ||
| + | A(1,2)=h/6; | ||
| + | A(N,N-1)=h/6; | ||
| + | for i=2:(N-1) | ||
| + | A(i,i+1)=h/6; | ||
| + | A(i,i-1)=h/6; | ||
| + | end | ||
| + | B=zeros(N,N); %Construimos B | ||
| + | B(1,1)=h/3; | ||
| + | B(N,N)=h/3; | ||
| + | for i=2:(N-1) | ||
| + | xmas=x(i+1); | ||
| + | xmenos=x(i-1); | ||
| + | xigual=x(i); | ||
| + | B(i,i+1)=(1/(3*h^2))*(xigual^3-xmas^3); | ||
| + | B(i,i-1)=(1/(3*h^2))*(xmenos^3-xigual^3); | ||
| + | B(i,i)=(1/(3*h^2))*(xmas^3-xmenos^3); | ||
| + | end | ||
| + | |||
| + | C=zeros(N,N); %Construimos C | ||
| + | F=sigma^2-r; | ||
| + | C(1,1)=-h/6; | ||
| + | C(N,N)=(1/(6*h^2))*(2*x(N)^3+x(N-1)^3-3*x(N)^2*x(N-1)); | ||
| + | for i=2:(N-1) | ||
| + | xmas=x(i+1); | ||
| + | xmenos=x(i-1); | ||
| + | xigual=x(i); | ||
| + | C(i,i+1)=(-1/(6*h^2))*(-3*xmas^2*xigual-2*xigual^3+2*xmas^3+3*xigual^3); | ||
| + | C(i,i-1)=(1/(6*h^2))*(-3*xmenos^2*xigual+3*xigual^3+2*xmenos^3-2*xigual^3); | ||
| + | C(i,i)=(1/(6*h^2))*(xmenos^3-3*xigual^2*xmenos-xmas^3+3*xmas*xigual^2); | ||
| + | end | ||
| + | |||
| + | C(N,N)=C(N-1,N-1); | ||
| + | |||
| + | D=sigma^2/2*B+F*C+r*A; | ||
| + | |||
| + | Ainv=inv(A); | ||
| + | Matriz=-Ainv*D; | ||
| + | |||
| + | |||
| + | N2=N; | ||
| + | a2=0; | ||
| + | b2=T; | ||
| + | L2=b2-a2; | ||
| + | h2=L2/(N2-1); | ||
| + | t=0:h2:L2; | ||
| + | SOLUCION=zeros(N,N2); | ||
| + | u0 = max(x - K, 0); % vector Nx1 | ||
| + | u0=transpose(u0); | ||
| + | for j=1:N2 | ||
| + | SOLUCION(:,j)=expm(Matriz*t(j))*u0; | ||
| + | end | ||
| + | |||
| + | [X, T] = meshgrid(x,t); | ||
| + | surf(X, T, SOLUCION.') | ||
| + | shading interp % para suavizar | ||
| + | colormap jet % colores | ||
| + | colorbar % referencia de colores | ||
| + | xlabel('x') | ||
| + | ylabel('t') | ||
| + | zlabel('V(x,t)') | ||
| + | hold on | ||
| + | SOLUCIONREAL=zeros(N,N2); | ||
| + | for i=1:N | ||
| + | for j=1:N2 | ||
| + | SOLUCIONREAL(i,j)=SolExacta(x(i), t(j), K, r, sigma); | ||
| + | end | ||
| + | end | ||
| + | |||
| + | [Xm, Tm] = meshgrid(x, t); | ||
| + | surf(Xm, Tm, SOLUCIONREAL.') | ||
| + | |||
| + | surf(Xm,Tm,SOLUCION-SOLUCIONREAL) | ||
| + | ERROR=SOLUCION-SOLUCIONREAL; | ||
| + | |||
| + | function V = SolExacta(S, tau, K, r, sigma) | ||
| + | % Solución analítica del modelo de Black-Scholes para un call europeo | ||
| + | % usando la formulación con tiempo hacia delante tau = T - t. | ||
| + | |||
| + | % Evitar problemas numéricos cuando tau = 0 | ||
| + | tau = max(tau, 1e-12); | ||
| + | |||
| + | d1 = (log(S./K) + (r + 0.5*sigma^2).*tau) ./ (sigma.*sqrt(tau)); | ||
| + | d2 = d1 - sigma.*sqrt(tau); | ||
| + | |||
| + | V = S .* normcdf(d1) - K .* exp(-r*tau) .* normcdf(d2); | ||
| + | end | ||
| + | |||
| + | </source> | ||
| + | |||
| + | [[Categoría:MNEDP|MNEDP]] | ||
| + | [[Categoría:MNEDP25/26|2025-26]] | ||
Revisión actual del 01:00 17 nov 2025
| Trabajo realizado por estudiantes | |
|---|---|
| Título | Modelo de Black-Scholes (PAA) |
| Asignatura | MNEDP |
| Curso | 2025-26 |
| Autores | Pablo Maestro Fernández, Alex Heredero Santamaría, Alejandro Cerrón Cribeiro |
| Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura | |
1 Póster del Trabajo
2 Código de Matlab
format long
N=100;
sigma=0.2;
T=1;
r=0.05;
K=100;
alpha=4;
a=0;
b=K*alpha;
L=b-a;
h=L/(N-1);
x=0:h:L;
A=diag((2*h/3)*ones(1, N)); %Construimos A
A(1,1)=h/3;
A(N,N)=h/3;
A(1,2)=h/6;
A(N,N-1)=h/6;
for i=2:(N-1)
A(i,i+1)=h/6;
A(i,i-1)=h/6;
end
B=zeros(N,N); %Construimos B
B(1,1)=h/3;
B(N,N)=h/3;
for i=2:(N-1)
xmas=x(i+1);
xmenos=x(i-1);
xigual=x(i);
B(i,i+1)=(1/(3*h^2))*(xigual^3-xmas^3);
B(i,i-1)=(1/(3*h^2))*(xmenos^3-xigual^3);
B(i,i)=(1/(3*h^2))*(xmas^3-xmenos^3);
end
C=zeros(N,N); %Construimos C
F=sigma^2-r;
C(1,1)=-h/6;
C(N,N)=(1/(6*h^2))*(2*x(N)^3+x(N-1)^3-3*x(N)^2*x(N-1));
for i=2:(N-1)
xmas=x(i+1);
xmenos=x(i-1);
xigual=x(i);
C(i,i+1)=(-1/(6*h^2))*(-3*xmas^2*xigual-2*xigual^3+2*xmas^3+3*xigual^3);
C(i,i-1)=(1/(6*h^2))*(-3*xmenos^2*xigual+3*xigual^3+2*xmenos^3-2*xigual^3);
C(i,i)=(1/(6*h^2))*(xmenos^3-3*xigual^2*xmenos-xmas^3+3*xmas*xigual^2);
end
C(N,N)=C(N-1,N-1);
D=sigma^2/2*B+F*C+r*A;
Ainv=inv(A);
Matriz=-Ainv*D;
N2=N;
a2=0;
b2=T;
L2=b2-a2;
h2=L2/(N2-1);
t=0:h2:L2;
SOLUCION=zeros(N,N2);
u0 = max(x - K, 0); % vector Nx1
u0=transpose(u0);
for j=1:N2
SOLUCION(:,j)=expm(Matriz*t(j))*u0;
end
[X, T] = meshgrid(x,t);
surf(X, T, SOLUCION.')
shading interp % para suavizar
colormap jet % colores
colorbar % referencia de colores
xlabel('x')
ylabel('t')
zlabel('V(x,t)')
hold on
SOLUCIONREAL=zeros(N,N2);
for i=1:N
for j=1:N2
SOLUCIONREAL(i,j)=SolExacta(x(i), t(j), K, r, sigma);
end
end
[Xm, Tm] = meshgrid(x, t);
surf(Xm, Tm, SOLUCIONREAL.')
surf(Xm,Tm,SOLUCION-SOLUCIONREAL)
ERROR=SOLUCION-SOLUCIONREAL;
function V = SolExacta(S, tau, K, r, sigma)
% Solución analítica del modelo de Black-Scholes para un call europeo
% usando la formulación con tiempo hacia delante tau = T - t.
% Evitar problemas numéricos cuando tau = 0
tau = max(tau, 1e-12);
d1 = (log(S./K) + (r + 0.5*sigma^2).*tau) ./ (sigma.*sqrt(tau));
d2 = d1 - sigma.*sqrt(tau);
V = S .* normcdf(d1) - K .* exp(-r*tau) .* normcdf(d2);
end