Imposer des contraintes de pondération
Les investisseurs sont souvent soumis à des plafonds sur les pondérations du portefeuille. Ces contraintes peuvent en réalité constituer un avantage : un plafond de pondération évite que le portefeuille soit trop concentré sur certains actifs. Il existe toutefois un inconvénient : le même rendement cible peut ne plus être atteignable, ou bien il ne l’est qu’au prix d’une volatilité plus élevée.
Rappelez‑vous, d’après l’exercice précédent, que la fonction portfolio.optim() vous permet de fixer des contraintes de pondération via l’argument reshigh. reshigh attend un vecteur de pondérations maximales pour chaque actif.
Dans cet exercice, vous allez créer trois portefeuilles avec des plafonds de pondération différents. Il est important de connaître la sortie de la fonction portfolio.optim(). Cette fonction renvoie une liste contenant quatre éléments : (i) $pw : les pondérations du portefeuille, (ii) $px : les rendements du portefeuille global, (iii) $pm : le rendement attendu du portefeuille, (iv) $ps : l’écart type des rendements du portefeuille.
Cet exercice fait partie du cours
Introduction à l’analyse de portefeuille en R
Instructions
- Créez trois vecteurs de pondérations maximales pour chaque actif (colonne) de
returnsà l’aide de la fonctionrep(). Le premier vecteur contiendra des plafonds à 100 %, le second à 10 % et le troisième à 5 %. Nommez‑les respectivementmax_weights1,max_weights2,max_weights3. - Créez un portefeuille optimal avec des pondérations maximales de 100 %, nommé
opt1. - Créez un portefeuille optimal avec des pondérations maximales de 10 %, nommé
opt2. - Créez un portefeuille optimal avec des pondérations maximales de 5 %, nommé
opt3. - Calculez, pour chaque portefeuille, combien d’actifs ont une pondération supérieure à 1 %. Accédez aux pondérations en utilisant
$pwaprès le nom du portefeuille. - Affichez les volatilités (écarts types
$ps) des trois portefeuilles que vous avez créés.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# Create vectors of maximum weights
max_weights1 <- rep(1, ncol(returns))
max_weights2 <- ___
max_weights3 <- ___
# Create an optimum portfolio with max weights of 100%
opt1 <- portfolio.optim(___, reshigh = ___)
# Create an optimum portfolio with max weights of 10%
# Create an optimum portfolio with max weights of 5%
# Calculate how many assets have a weight that is greater than 1% for each portfolio
sum(opt1$pw > .01)
sum(___$pw > .01)
sum(___$pw > .01)
# Print portfolio volatilites
opt1$ps
___$__
___$__