/////////TP4_09.sce Prix d'une option (suite)////// clear; //////////Exercice 1 (on reprend l'exercice3 du TP3)//////////////////// clear; n=100;T=1;delta_t=T/n;S0=140;sigma=0.40;K=S0;r=0.1;R=exp(r*delta_t); //on redéfinit up, down, p, S comme des fonctions de sigma function up=up(sigma); up=exp(sigma/sqrt(n)) endfunction; function down=down(sigma); down=exp(-sigma/sqrt(n)) endfunction; function p=p(sigma); p=(R-down(sigma))./(up(sigma)-down(sigma)) endfunction; function S=S(i,j,sigma); S=S0.*up(sigma).^(j).*down(sigma).^(i-(j)); endfunction; //on trace le prix du Call noté Csig comme une fonction de sigma //pour des valeurs de sigma comprises entre sigmin et sigmax function phi=phi(S); phi=max(S-K,0); endfunction; sigmin=0.2;deltasig=0.05;sigmax=0.8; for sig=1:(sigmax-sigmin)/deltasig //sigma=sigmin+sig*deltasig Csig(sig)=(phi(S(n,0:n,sigmin+sig*deltasig))*binomial(p(sigmin+sig*deltasig),n)')/R^n; end; xset("window",0); plot2d(sigmin+deltasig:deltasig:sigmax,Csig) ////////on reprend le tracé mais pour un Put cette fois function psi=psi(S); psi=max(K-S,0); endfunction; sigmin=0.2;deltasig=0.05;sigmax=0.8; for sig=1:(sigmax-sigmin)/deltasig //sigma=sigmin+sig*deltasig Psig(sig)=(psi(S(n,0:n,sigmin+sig*deltasig))*binomial(p(sigmin+sig*deltasig),n)')/R^n; end; xset("window",1); plot2d(sigmin+deltasig:deltasig:sigmax,Psig) //////////Exercice 2 (on reprend du TP2 les définitions de CC et SS) n=100;T=1;delta_t=T/n;S0=140;sigma=0.40;K=S0; up=exp(sigma/sqrt(n));down=1/up; r=0.1;R=exp(r*delta_t); function phi=phi(S); phi=max(S-K,0); endfunction; p=(R-down)/(up-down); SS=zeros(n+1,n+1); SS(1+0,1+0)=S0; for i=0:n-1 SS(1+(i+1),1+0)=SS(1+i,1+0)*down; //ici j=0 end; for i=0:n-1 for j=0:i SS(1+(i+1),1+(j+1))=SS(1+i,1+j)*up; end; end; CC=zeros(n+1,n+1); for j=0:n CC(1+n,1+j)=phi(SS(1+n,1+j)); //ici i=n, c'est le payoff end; for i=n-1:-1:0 for j=0:i CC(1+i,1+j)=(p*CC(1+(i+1),1+(j+1))+(1-p)*CC(1+(i+1),1+j))/R; end; end; ////on saisit le code proposé pour le tracé des courbes de prix/////////////// jmax=10 ///maximum de up à faire figurer dans le cadre rectangle=[0,0,SS(jmax,jmax),CC(jmax,jmax)]; plot2d(SS(jmax,1:jmax),CC(jmax,1:jmax),frameflag=5,rect=rectangle) // fixe le cadre for k=0:n plot2d(SS(n+1-k,1:n+1-k),CC(n+1-k,1:n+1-k),frameflag=0)///laisse le cadre inchangé end; //////Exercice 3: On reprend ce qui précède pour un Put//////// PP=zeros(n+1,n+1); for j=0:n PP(1+n,1+j)=psi(SS(1+n,1+j)); //ici i=n, c'est le payoff end; for i=n-1:-1:0 for j=0:i PP(1+i,1+j)=(p*PP(1+(i+1),1+(j+1))+(1-p)*PP(1+(i+1),1+j))/R; end; end; ////on saisit le code proposé pour le tracé des courbes de prix/////////////// jmax=10 ///maximum de up à faire figurer dans le cadre rectangle=[0,0,SS(jmax,jmax),PP(jmax,jmax)]; plot2d(SS(jmax,1:jmax),PP(jmax,1:jmax),frameflag=5,rect=rectangle) // fixe le cadre for k=0:n plot2d(SS(n+1-k,1:n+1-k),PP(n+1-k,1:n+1-k),frameflag=0)///laisse le cadre inchangé end;