Construction d’un backtest
1. Pour couvrir l’indice S&P 500 en euros, on utilise la formule de la page 56 de TR-QAM. On reporte sur le graphique 5 les valeurs du S&P 500 en USD et couvert en EUR. En rebasant les indices à 100 le 31 décembre 1999, la valeur terminale du S&P 500 est 104,60 en USD et 103,93 en EUR couvert. 2. On doit tenir compte des effets de rebalancement mensuel. Pour cela, on utilise le cadre d’analyse développé dans les pages 47-50 de TR-QAM. En posant G(t) = 100 à la date du 31 décembre 1999, la valeur de la stratégie G(t) est 130,62 le 31 décembre 2010. 3. Pour tenir compte des frais de gestion, on utilise la formule de la page 51 de TR-QAM. La valeur nette F (t) de la stratégie devient 117,01 le 31 décembre 2010. Sur le graphique 5, on reporte les valeurs de G(t) et F (t). 4. On utilise les formules des pages 58 à 71 de TR-QAM. Le rendement annuel de la stratégie F (t) est 1,4% alors que la volatilité est égale à 9,9%. On en déduit que le ratio de Sharpe12 est égal à −0,15. Le drawdown maximum sur la période est égal à−30,9%. Il commence le 31 octobre 2007 et finit le 9 mars 2009. Le meilleur mois est celui d’avril 2009 avec une performance égale à 6,6% alors que le pire mois est celui d’octobre 2008 avec une perte de −7,7%. Les coefficients de skewness et de kurtosis sont égaux à 0,16 et 8,35
Construction de portefeuilles diversifiés
1. (a) Le portefeuille de variance minimale est défini à la page 90 de TR-QAM. On obtient les résultats suivants :
ρ = 0% ρ = 50% i MV ERC MDP MV ERC MDP 1 8,16% 18,18% 18,18% 0,00% 18,18% 18,18% 2 18,37% 27,27% 27,27% 0,00% 27,27% 27,27% 3 73,47% 54,55% 54,55% 100,00% 54,55% 54,55% σ (x) 4,29% 4,72% 4,72% 5,00% 6,68% 6,68%
(b) Le portefeuille ERC est défini à la page 132 de TR-QAM. Les résultats sont donnés dans le tableau précédent. (c) Le portefeuille MDP est défini à la page 133 de TR-QAM. Les résultats sont donnés dans le tableau précédent. (d) On remarque que les portefeuilles ERC et MDP sont les mêmes. On sait que : i. le portefeuille ERC correspond au portefeuille de marché lorsque la corrélation entre les actifs est uniforme et que tous les actifs présentent le même ratio de Sharpe (TR-QAM, page 132); ii. le portefeuille MDP correspond au portefeuille de marché lorsque tous les actifs présentent le même ratio de Sharpe (TR-QAM, page 133). On en déduit donc que lorsque la corrélation entre les actifs est uniforme, le portefeuille ERC coincide avec le portefeuille MDP. Une autre façon de démontrer ce résultat est de considérer les propriétés donnés à la page 134 de TR-QAM
Construction de portefeuilles efficients
1. La composition du portefeuille de variance minimale est : x⋆ 1 = 3,05%, x⋆ 2 = 3,05% et x⋆ 3 = 93,89%. 2. On doit résoudre un sigma-problème (TR-QAM, page 97). La valeur optimale de ϕ est 0,040 et le portefeuille optimal est : x⋆ 1 = 6,11%, x⋆ 2 = 6,11% et x⋆ 3 = 87,79%. 3. Si la volatilité ex-ante est fixée à 10%, la valeur optimale de ϕ est 0,445 et le portefeuille optimal est : x⋆ 1 = 37,03%, x⋆ 2 = 37,03% et x⋆ 3 = 25,94%. 4. On remarque que x⋆ 1 = x⋆ 2. C’est tout à fait normal puisque les actifs 1 et 2 ont les mêmes caractéristiques de rendement espéré, de volatilité et de corrélation avec le troisième actif.
Encadré 8 (Programme de construction de portefeuilles efficients)
let sigma = 0.15 0.15 0.05; let mu = 0.10 0.10 0.05; let rho = 1.00 0.50 1.00 0.20 0.20 1.00; rho = xpnd(rho); cov = rho .* sigma .* sigma’;
A = ones(1,3); B = 1; C = 0; D = 0; Bounds = (0~1) .* ones(3,1); {x0,sigma0,retcode} = Qprog_Min_Variance(cov,A,B,C,D,Bounds); phi0 = 0; {x1,mu1,sigma1,phi1,retcode1} = Qprog_Allocation_Solve(mu,cov,A,B,C,D,Bounds,0.05,2); {x2,mu2,sigma2,phi2,retcode2} = Qprog_Allocation_Solve(mu,cov,A,B,C,D,Bounds,0.10,2); print ftosa(100*(x0~x1~x2), »%lf »,3,2); print ftosa(phi0~phi1~phi2, »%lf »,3,6);
A = ones(1,3); B = 1; C = 0; D = 0; Bounds = (0~1) .* ones(3,1); Bounds[1,1] = 0.08; {x0,sigma0,retcode} = Qprog_Min_Variance(cov,A,B,C,D,Bounds); {x1,mu1,sigma1,phi1,retcode1} = Qprog_Allocation_Solve(mu,cov,A,B,C,D,Bounds,0.05,2); {x2,mu2,sigma2,phi2,retcode2} = Qprog_Allocation_Solve(mu,cov,A,B,C,D,Bounds,0.10,2); print ftosa(100*(x0~x1~x2), »%lf »,3,2); print ftosa(phi0~phi1~phi2, »%lf »,3,6);
// Calcul du lagrangien par le programme dual S = -C|A|-A|-eye(3); T = -D|B|-B|zeros(3,1); Bounds = (0~10) .* ones(6,1); Q_tilde = 0.5*S*invpd(cov)*S’; R_tilde = 0.5*phi0*S*invpd(cov)*mu – T; {lambda0,u1,u2,u3,u4,retcode0} = QProg(zeros(6,1),Q_tilde,R_tilde,0,0,0,0,Bounds); R_tilde = 0.5*phi1*S*invpd(cov)*mu – T; {lambda1,u1,u2,u3,u4,retcode0} = QProg(zeros(6,1),Q_tilde,R_tilde,0,0,0,0,Bounds); R_tilde = 0.5*phi2*S*invpd(cov)*mu – T; {lambda2,u1,u2,u3,u4,retcode0} = QProg(zeros(6,1),Q_tilde,R_tilde,0,0,0,0,Bounds); print ftosa(lambda0[1]~lambda1[1]~lambda2[1], »%lf »,3,6);
A = ones(1,3); B = 1; C = 0; D = 0; Bounds = (0~1) .* ones(3,1); Bounds[1,1] = 0.20; {x0,sigma0,retcode} = Qprog_Min_Variance(cov,A,B,C,D,Bounds); print ftosa(100*sigma0, »Lower bound of the volatility = %lf »,3,2);
sigma1 = sigma[1]; sigma2 = sigma[2]; sigma3 = sigma[3]; rho12 = rho[1,2]; rho13 = rho[1,3]; rho23 = rho[2,3]; d = (sigma2^2 – 2*rho23*sigma2*sigma3 + sigma3^2); a = (sigma3^2 – rho23*sigma2*sigma3)/d; b = (sigma2^2 – rho23*sigma2*sigma3)/d; c = (sigma1 *(rho12 * sigma2 – rho13 * sigma3))/d; alpha = sigma1^2 + (a+c)^2*sigma2^2 + (b-c)^2*sigma3^2 – 2*(a+c)*rho12*sigma1*sigma2 2*(b-c)*rho13*sigma1*sigma3 + 2*(a+c)*(b-c)*rho23*sigma2*sigma3; beta = a*rho12*sigma1*sigma2 + b*rho13*sigma1*sigma3 (a*(b-c)+b*(a+c))*rho23*sigma2*sigma3 – a*(a+c)*sigma2^2 – b*(b-c)*sigma3^2; gamma_ = a^2 * sigma2^2 + b^2 * sigma3^2 + 2*a*b*rho23*sigma2*sigma3;
sigma_star = 0.05; xi = real(polyroot(alpha|2*beta|(gamma_-sigma_star^2))); print ftosa(100*xi, »Solutions = %lf »,3,5);