Facteur 2 : le choix des pondérations du portefeuille
Les investisseurs peuvent optimiser le choix des pondérations afin d’obtenir le meilleur rendement ajusté du risque, mesuré par le ratio de Sharpe du portefeuille.
Dans le cas particulier où la valeur totale du portefeuille est investie dans seulement deux actifs, il n’y a qu’une seule pondération à déterminer, car la pondération du second actif est égale à un moins la pondération du premier.
Faisons-le pour un portefeuille investi en actions américaines et en obligations américaines. Nous allons utiliser une approche par force brute en testant un grand nombre de pondérations possibles et en retenant celle qui donne la valeur la plus élevée du ratio de Sharpe du portefeuille (en supposant un taux sans risque nul).
Cet exercice fait partie du cours
Introduction à l’analyse de portefeuille en R
Instructions
- Créez un vecteur nommé
gridavecseq()qui commence à 0, se termine à 1, avec un pas de 0,01. - Initialisez un vecteur vide
vsharpede la même longueur quegrid. Une méthode courante consiste à créer un vecteur rempli de NA à l’aide de la fonction rep(). Vous remplacerez ces NA dans la boucle que vous allez créer. - Dans la boucle for, vous calculerez le ratio de Sharpe pour chacune des pondérations possibles dans
grid. La première commande de la boucle for sélectionne le iᵉ élément degridet le stocke dans l’objetweight, qui change à chaque itération. - Vous voulez voir comment le rendement du portefeuille évolue quand la pondération change. Créez un objet
preturnségal à la somme deweightmultiplié parreturns_equities, et de(1-weight)multiplié parreturns_bonds. - Remplacez ensuite les NA de
vsharpepar le ratio de Sharpe annualisé (SharpeRatio.annualized()) depreturns. - Complétez la fonction de tracé où les pondérations possibles (
grid) sont sur l’axe des x et les ratios de Sharpe sur l’axe des y.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# Create a grid
grid <- seq(from = ___, to = ___, by = ___)
# Initialize an empty vector for Sharpe ratios
vsharpe <- rep(NA, times = ___ )
# Create a for loop to calculate Sharpe ratios
for(i in 1:length(grid)) {
weight <- ___[i]
preturns <- ___ * ___ + (1 - ___) * ___
vsharpe[i] <- SharpeRatio.annualized(___)
}
# Plot weights and Sharpe ratio
plot(___, ___, xlab = "Weights", ylab= "Ann. Sharpe ratio")
abline(v = grid[vsharpe == max(vsharpe)], lty = 3)