Facteur 2 : le choix des pondérations du portefeuille
Les investisseurs peuvent optimiser le choix des pondérations pour obtenir le meilleur rendement ajusté au 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, puisque la pondération du deuxième actif est égale à un moins la pondération du premier.
Faisons l'exercice pour un portefeuille investi en actions américaines et en obligations américaines. Nous allons utiliser une approche de 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).
Cette activité fait partie du cours
Introduction à l'analyse de portefeuille en R
Instructions de l’exercice
- Créez un vecteur appelé
gridà l'aide deseq()qui commence à 0, se termine à 1, avec un incrément de 0,01. - Initialisez le vecteur vide
vsharpeavec la même longueur quegrid. Une façon courante de le faire est de créer un vecteur qui contient des NA à l'aide de la fonction rep(). Vous remplacerez ces NA dans la boucle que vous allez créer ensuite. - 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 souhaitez voir comment le rendement du portefeuille évolue selon la pondération. Créez un objet
preturnségal à la somme deweightmultiplié parreturns_equities, et de(1-weight)multiplié parreturns_bonds. - Ensuite, vous remplacerez les NA dans
vsharpepar le ratio de Sharpe annualisé (SharpeRatio.annualized()) depreturns. - Complétez la fonction de traçage où les pondérations potentielles (
grid) sont placées sur l'axe des x et les ratios de Sharpe sur l'axe des y.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# 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)