De efficiënte grens berekenen met een raster van doeldrendementen
Zoals je hebt gezien, is één aanpak om de efficiënte grens te berekenen eerst het raster van doeldrendementen te definiëren en vervolgens, voor elk doeldrendement, de portefeuille te vinden waarvan het verwachte rendement gelijk is aan het doeldrendement met de laagst mogelijke variantie.
Maar wat is een redelijk raster van doeldrendementen? Je stelt het maximale doeldrendement in op het maximale gemiddelde rendement van de aandelen. Idealiter stel je het minimale doeldrendement in op het rendement van de minimumvariantieportefeuille. Omdat je dit rendement van de minimumvariantieportefeuille nog niet kent, maak je een raster met het minimum van de gemiddelde rendementen van alle aandelen.
In deze oefening gebruik je een for-loop om je raster van potentiële portefeuillegemiddelden, standaardafwijkingen en wegingen te berekenen.
Deze oefening maakt deel uit van de cursus
Introductie tot portefeuilleanalyse in R
Oefeninstructies
- Bereken de kolomgemiddelden van
returns(metcolMeans()), en noem ditstockmu. - Maak een reeks (seq()) van lengte 50, die begint bij een risicovrije rente van 1% en eindigt bij de maximumwaarde van
stockmu, noem dezegrid. - Initialiseer twee lege vectoren met dezelfde lengte als
gridmet rep(), waarin je de portefeuillegemiddelden en standaardafwijkingen opslaat. Noem dezevpmenvpsd. - Initialiseer een lege matrix van 50 rijen en 30 kolommen. Noem deze
mweights. Je kunt hiervoor de functiematrix()gebruiken. - Maak een for-loop die begint bij de eerste waarde van
griden eindigt bij de laatste. De for-loop moet een portefeuilleoptaanmaken op basis vanreturnsmet een doeldrendement vangrid. - Bij elke iteratie vult de for-loop de vectoren
vpm($pm),vpsd($ps) met hun respectieve waarden uitopt. - Sla de portefeuilleverhoudingen regel voor regel op in
mweights($pw).
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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, ] <- ___$__
}