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'abord à définir 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 définirez le rendement cible maximal comme le 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 et leurs pondérations.
Cette activité fait partie du cours
Introduction à l'analyse de portefeuille en R
Instructions de l’exercice
- Calculez les moyennes des colonnes de
returns(aveccolMeans()), et nommez-lesstockmu. - 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, nomméegrid. - Initialisez deux vecteurs vides de la même longueur que
gridà l'aide de rep(), où vous stockerez les moyennes de portefeuille et les écarts types. Nommez-lesvpmetvpsd. - Initialisez une matrice vide de 50 lignes et 30 colonnes. Nommez-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éoptà partir dereturnsavec un rendement cible degrid. - À 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 ce code d’exemple.
# 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, ] <- ___$__
}