Die Effizienzlinie mit einem Raster von Zielrenditen berechnen
Wie du gesehen hast, besteht ein Ansatz zur Berechnung der Effizienzlinie darin, zuerst ein Raster von Zielrenditen zu definieren und dann für jede Zielrendite das Portfolio zu finden, dessen erwartete Rendite der Zielrendite entspricht – bei möglichst geringer Varianz.
Doch was ist ein sinnvolles Raster von Zielrenditen? Du setzt die maximale Zielrendite auf die maximale durchschnittliche Rendite der Aktien. Ideal wäre es, die minimale Zielrendite auf die Rendite des Minimalvarianzportfolios zu setzen. Da du diese Rendite noch nicht kennst, erstellst du ein Raster, das beim Minimum der durchschnittlichen Renditen aller Aktien beginnt.
In dieser Übung verwendest du eine for-Schleife, um dein Raster potenzieller Portfoliomittelwerte, Standardabweichungen und Gewichte zu berechnen.
Diese Übung ist Teil des Kurses
<Kurs>Einführung in die Portfolioanalyse in R</Kurs>Übungsanweisungen
- Berechne die Spaltenmittel von
returns(mitcolMeans()) und nenne das Ergebnisstockmu. - Erstelle eine Sequenz (seq()) der Länge 50, die bei einem risikofreien Zinssatz von 1 % beginnt und bei dem Maximalwert von
stockmuendet; nenne siegrid. - Initialisiere zwei leere Vektoren mit derselben Länge wie
gridmit rep(), in denen du die Portfoliomittelwerte und Standardabweichungen speicherst. Nenne sievpmundvpsd. - Initialisiere eine leere Matrix mit 50 Zeilen und 30 Spalten. Nenne sie
mweights. Verwende dazu die Funktionmatrix(). - Erstelle eine for-Schleife, die beim ersten Wert von
gridbeginnt und beim letzten endet. Die for-Schleife soll ein Portfoliooptmitreturnsund einer Zielrendite vongriderstellen. - In jeder Iteration soll die for-Schleife die Vektoren
vpm($pm) undvpsd($ps) mit den jeweiligen Werten ausoptfüllen. - Speichere die Portfoliogewichte zeilenweise in
mweights($pw).
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
# 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, ] <- ___$__
}