Diferencia entre revisiones de «Modelo de Black-Scholes (PAA)»

De MateWiki
Saltar a: navegación, buscar
(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

Modelo de Black-Scholes.

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