Calculer la frontière efficiente à l’aide d’une grille de rendements cibles
Comme vous l’avez vu, une approche pour calculer la frontière efficiente consiste à définir d’abord une grille de rendements cibles, puis, pour chaque rendement cible, à trouver le portefeuille dont le rendement espéré est égal au rendement cible avec la variance la plus faible possible.
Mais quelle est une grille raisonnable de rendements cibles ? Vous allez fixer le rendement cible maximal au rendement moyen maximal des actions. Idéalement, vous fixeriez le rendement cible minimal au rendement du portefeuille de variance minimale. Comme vous ne connaissez pas encore ce rendement, vous créez une grille en utilisant le minimum des rendements moyens de toutes les actions.
Dans cet exercice, vous utiliserez une boucle for pour calculer votre grille de rendements moyens potentiels de portefeuille, leurs écarts types et leurs pondérations.
Cet exercice fait partie du cours
Introduction à l’analyse de portefeuille en R
Instructions
- Calculez les moyennes de colonnes de
returns(aveccolMeans()), et appelez ce résultatstockmu. - Créez une séquence (seq()) de longueur 50, qui commence à un taux sans risque de 1 % et se termine à la valeur maximale de
stockmu, appeléegrid. - Initialisez deux vecteurs vides de même longueur que
gridavec rep(), où vous stockerez les rendements moyens et les écarts types des portefeuilles. Appelez-lesvpmetvpsd. - Initialisez une matrice vide de 50 lignes et 30 colonnes. Appelez-la
mweights. Vous pouvez utiliser la fonctionmatrix()pour cela. - Créez une boucle for qui commence à la première valeur de
gridet se termine à la dernière. La boucle doit créer un portefeuille appeléopten utilisantreturnset avec un rendement cible égal àgrid. - À chaque itération, la boucle for doit remplir les vecteurs
vpm($pm) etvpsd($ps) avec leurs valeurs respectives provenant deopt. - Stockez les pondérations du portefeuille ligne par ligne dans
mweights($pw).
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# Calculate each stocks mean returns
# Create a grid of target values
grid <- seq(from = ___, to = ___, length.out = ___)
# Create empty vectors to store means and deviations
vpm <- vpsd <-
# Create an empty matrix to store weights
mweights <- matrix(NA, 50, 30)
# Create your for loop
for(i in 1:length(grid)) {
opt <- portfolio.optim(x = ___, pm = ___[i])
vpm[i] <- ___$__
vpsd[i] <- ___$__
mweights[i, ] <- ___$__
}