////////TP05MMDFA0 Convergence de CRR vers BS//// // A.6 dans le poly clear //Les constantes (écrites en function de n) T=1;S0=140;sigma=0.40;K=135;r=0.05; function d=delta_t(n); d=T/n; endfunction; function u=up(n) u=exp(sigma*sqrt(delta_t(n))); endfunction; function d=down(n); d=exp(-sigma*sqrt(delta_t(n))); endfunction function R=R(n); R=exp(r*delta_t(n)); endfunction; function p=p(n); p=(R(n)-down(n))/(up(n)-down(n)); endfunction; //L'actif sous-jacent S en fonction de i,j et n: function y=S(i,j,n); y=S0.*(up(n)).^j.*(down(n)).^(i-j); endfunction; //l'option Call C en function de i,j,n; function phi=phi(S); phi=max(S-K,0); endfunction; function z=C(i,j,n); z=(phi(S(n,j:(j+n-i),n))*binomial(p(n),n-i)')/R(n)^(n-i); endfunction; //Tracé du Call en fonction de n xset("window",1); Nmax=250;Call=zeros(Nmax); for n=1:Nmax, Call(n)=C(0,0,n); end; plot2d(10:Nmax,Call(10:Nmax)); //l'option Put P en function de i,j,n; function psi=psi(S); psi=max(K-S,0); endfunction; function z=P(i,j,n); z=(psi(S(n,j:(j+n-i),n))*binomial(p(n),n-i)')/R(n)^(n-i); endfunction; //Tracé du Put en fonction de n xset("window",2); Nmax=250;Put=zeros(Nmax); for n=1:Nmax, Put(n)=P(0,0,n); end; plot2d(10:Nmax,Put(10:Nmax)); //Calcul du prix limite (prix Black-Scholes) //dans le cas du Call function N=N(x); N=(1+erf(x/sqrt(2)))/2; endfunction; d1=(log(S0/K)+T*(r+sigma^2/2))/sigma/sqrt(T); d2=d1-sigma*sqrt(T); BS=S0*N(d1)-K*exp(-r*T)*N(d2); CallBS=zeros(Nmax); for n=1:Nmax, CallBS(n)=BS;end; //Tracé sur une figure des prix du Call CRR et //de la limite BS xset("window",3); plot2d(10:Nmax,Call(10:Nmax)); plot2d(10:Nmax,CallBS(10:Nmax)); //Tracé sur une même figure des prix du Call et Put // CRR xset("window",4); plot2d(10:Nmax,Call(10:Nmax)); //plot2d(10:Nmax,CallBS(10:Nmax)); plot2d(10:Nmax,Put(10:Nmax));