Treiber 2: Die Wahl der Portfoliogewichte
Anleger können die Gewichte so optimieren, dass sie die höchste risikobereinigte Rendite erzielen, gemessen am Sharpe-Ratio des Portfolios.
Im Spezialfall, dass der gesamte Portfoliowert nur in zwei Anlagen investiert wird, gibt es nur ein einziges Gewicht zu bestimmen, denn das Gewicht der zweiten Anlage entspricht eins minus dem Gewicht der ersten Anlage.
Lass uns das für ein Portfolio aus US-Aktien und US-Anleihen tun. Wir verwenden dazu den Brute-Force-Ansatz: Wir probieren eine große Anzahl möglicher Gewichte aus und behalten das Gewicht, das den höchsten Wert für die Sharpe-Ratio des Portfolios liefert (bei angenommenem risikofreiem Zinssatz von null).
Diese Übung ist Teil des Kurses
<Kurs>Einführung in die Portfolioanalyse in R</Kurs>Übungsanweisungen
- Erstelle einen Vektor namens
gridmitseq(), der bei 0 beginnt, bei 1 endet und in Schritten von 0,01 erhöht wird. - Initialisiere den leeren Vektor
vsharpemit derselben Länge wiegrid. Eine gängige Methode ist, einen Vektor mit NAs über die Funktion rep() zu erzeugen. Diese NAs ersetzt du in der Schleife, die du als Nächstes erstellst. - In der for-Schleife berechnest du die Sharpe-Ratio für jedes der möglichen Gewichte in
grid. Der erste Befehl in der for-Schleife wählt das i-te Element vongridaus und speichert es im Objektweight, das sich in jeder Iteration ändert. - Du willst sehen, wie sich die Portfoliorendite mit einem veränderten Gewicht entwickelt. Erstelle ein Objekt
preturns, das der Summe ausweightmalreturns_equitiesund(1-weight)malreturns_bondsentspricht. - Als Nächstes ersetzt du die NAs in
vsharpedurch die annualisierte Sharpe-Ratio (SharpeRatio.annualized()) vonpreturns. - Vervollständige die Plot-Funktion, in der die potenziellen Gewichte (
grid) auf der x-Achse und die Sharpe-Ratios auf der y-Achse dargestellt werden.
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
# Create a grid
grid <- seq(from = ___, to = ___, by = ___)
# Initialize an empty vector for Sharpe ratios
vsharpe <- rep(NA, times = ___ )
# Create a for loop to calculate Sharpe ratios
for(i in 1:length(grid)) {
weight <- ___[i]
preturns <- ___ * ___ + (1 - ___) * ___
vsharpe[i] <- SharpeRatio.annualized(___)
}
# Plot weights and Sharpe ratio
plot(___, ___, xlab = "Weights", ylab= "Ann. Sharpe ratio")
abline(v = grid[vsharpe == max(vsharpe)], lty = 3)