1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| function [BlackScholes,PrixDiffFinie] = DifferencePutAmericain(K,S,Smax,Interet,Volatilite,T)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%
% Méthode des différences finies explicite pour le calcul d'un put
% américain
% K = Strike de l'option
% S = Prix du sous-jacent
% Smax = Prix du sous-jacent maximale
% Interet = Taux d'intérêt sans risque donc sous la
% probabilité risque neutre
% Volatilite = Volatilité du sous-jacent
% T = Maturité
%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Initialisation de la grille
N = 150; % Nombre de pas pour le temps;
M = 300; % Nombre de pas pour le prix du sousjacent;
Pasp = Smax/M;
Past= T/N;
% Conditions de bords
% Payoff à maturité
for j = 1 : M+1
f(j,N+1) = max(K - (j-1)*Pasp,0);
end;
% Prix à l'origine égale au strike
for i = 1 : N+1
f(1,i) = K;
end;
for i = 1 : N+1
f(M+1,i) = 0;
end;
% Calcul des paramètres u,v,w du modèle
for j = 1 : M-1
u(j) = 1/(1 + Interet*Past) * (-0.5*Interet*j*Past + 0.5*Volatilite^2*j^2*Past);
v(j) = 1/(1 + Interet*Past) * (1 - Volatilite^2*j^2*Past);
w(j) = 1/(1 + Interet*Past) * (0.5*Interet*j*Past + 0.5*Volatilite^2*j^2*Past);
end;
% Calcul (Résolution du système Ax = d)
% Création de la matrice A
for j = 2 : M
A(j,j-1) = u(j-1);
A(j,j) = v(j-1);
A(j,j+1) = w(j-1);
end;
A(1,1) = 1;
A(M+1,M+1) = 1;
% Résolution du système
for i = N:-1:1
f(:,i) = A*f(:,i+1); % Calculdes valeurs de l'option
% Conditions américaines
for j = 1 : M+1
if f(j,i) < (K-(j-1)*Pasp)
f(j,i) = (K-(j-1)*Pasp);
end;
end;
end;
[call,put] = blsprice(S,K,0,T,Volatilite,0);
BlackScholes=put
PrixDiffFinie=f(S/Pasp+1,1)
end |
Partager