function [mu,Gamma] = caracs_actifs(d,rho) // // Construction des caracteristiques des d actifs // // Les moyennes des actifs sont choisis croissant en fonction de l'actif min_esp=0.05;max_esp=0.15; mu=[min_esp:(max_esp-min_esp)/(d-1):max_esp]; // La covariance des actifs // On suppose que tous les actifs risqués ont une corrélation constante // égale à rho. // On a (donc) forcement rho >= -(1/(d-1)), sinon la matrice n'est // pas une matrice de covariance (exercice!). covariance= rho*ones(d,d)+(1-rho)*eye(d,d); // On choisit un ecart type croissant en fonction de l'actif min_sigma=0.1;max_sigma=0.3; sigma=[min_sigma:(max_sigma-min_sigma)/(d-1):max_sigma]; // La matrice de variance covariance se calcule par : Gamma = diag(sigma) * covariance * diag(sigma); endfunction function [s]=simplexe(d) // tirages de d nombre postifs // de somme egale 1 t=grand(1,d-1,"def"); t=sort(t); t=[1,t,0]; for i=[d:-1:1] do s(i)=t(i)-t(i+1); end //s=s'; endfunction function [s]=arbitraire(d,sigma) // tirages de valeurs de signe arbitraire // dont la somme vaut 1 // -> l'emprunt est autorisé t=grand(1,d-1,"nor",0,sigma); n=grand(1,1,"uin",1,d); s=zeros(1,d); s([1:n-1])=t([1:n-1]); s(n)=1-sum(t); s([n+1:d])=t([n:d-1]); s=s' endfunction // // Fonctions graphiques // function set_dot(my_color,my_size) drawlater(); f=gcf();Dessin=f.children(1).children(1).children(1); Dessin.line_mode="off";Dessin.mark_mode="on"; Dessin.mark_size_unit ="point"; Dessin.mark_size=my_size; Dessin.mark_style=0;// my_type; Dessin.mark_foreground=my_color; drawnow(); endfunction function set_line(my_color,my_size) f=gcf();Dessin=f.children(1).children(1).children(1); Dessin.line_mode="on";Dessin.mark_mode="off"; Dessin.thickness=my_size; Dessin.foreground=my_color; endfunction epsilon=0.05; noir=1; mauve=6; jaune=7; rouge=5; bleu=2; vert=3; bleuclair=12; dot=0; carre=-4; point=0; function [frontiere_m,frontiere_s]=frontiere_efficiente(moyenne_x,std_x) // Calcule la fontiere efficiente // a partir des points de R^2 ((moyenne_x(i),std_x(i)),<=i<=N) liste=[];// indices des point de la frontiere courante N=prod(size(moyenne_x)); for i=[1:N] // on parcours les points bool=%f; // On regarde si on trouve un point de la frontiere courante // qui majore le point courant for j=[1:prod(size(liste))] if (moyenne_x(liste(j)) > moyenne_x(i)) & (std_x(liste(j)) < std_x(i)) then bool=%t; break; end end // si c'est le cas il n'y a rien a faire, la frontiere est a jour // sinon on rajoute le point et on enleve tous les points qu'il domine if ~bool then liste=[liste,i];// on rajoute le point removelist=[];// on identifie les points a enlever for j=[1:prod(size(liste))] if ((moyenne_x(liste(j)) < moyenne_x(i)) & (std_x(liste(j)) > std_x(i))) then removelist=[removelist,j]; end end // on enleve ces points newliste=[]; debut=1; for k=[1:prod(size(removelist))] fin=removelist(k)-1; newliste=[newliste,liste(debut:fin)]; debut=removelist(k)+1; end; newliste=[newliste,liste(debut:$)]; liste=newliste; end; end; // Cuisine Scilabesque frontiere_m=moyenne_x(liste(:)); frontiere_s=std_x(liste(:)); [s,p]=sort(frontiere_s); frontiere_m=frontiere_m(p(:)); frontiere_s=frontiere_s(p(:)); endfunction; function rectangle=plot_actifs(moyenne_actif,std_actif) // Tracé des points représentant les actifs dans le plan (ecart-type,moyenne) marge=0.03; max_sigma=max(std_actif); max_esp=max(moyenne_actif); rectangle=[-marge,-marge,max_sigma+marge,max_esp+marge]; plot2d(std_actif, moyenne_actif, rect=rectangle); set_dot(noir,4);// trace les points en noir, taille=4 // Les titres des axes f=gcf();Dessin=f.children(1).children(1).children(1); Axes=f.children(1); Axes.title.text="Caracteristiques du rendement des portefeuilles"; Axes.x_label.text="Ecart type du rendement"; Axes.y_label.text="Moyenne du rendement"; endfunction