Czynnik 2: Wybór wag portfela
Inwestorzy mogą zoptymalizować dobór wag, aby uzyskać jak najwyższy zwrot skorygowany o ryzyko – mierzony wskaźnikiem Sharpe'a portfela.
W szczególnym przypadku, gdy cały kapitał portfela lokowany jest w tylko dwóch aktywach, wystarczy wyznaczyć jedną wagę – waga drugiego aktywa wynosi bowiem jeden minus waga pierwszego.
Przeanalizujmy to na przykładzie portfela złożonego z amerykańskich akcji i obligacji. Zastosujemy podejście „siłowe": sprawdzimy dużą liczbę możliwych wag i wybierzemy tę, która daje najwyższą wartość wskaźnika Sharpe'a portfela (przy założeniu zerowej stopy wolnej od ryzyka).
To ćwiczenie jest częścią kursu
Wprowadzenie do analizy portfela w R
Instrukcje do ćwiczenia
- Utwórz wektor o nazwie
grid, korzystając z funkcjiseq(), który zaczyna się od 0, kończy na 1 i ma krok równy 0,01. - Zainicjalizuj pusty wektor
vsharpeo tej samej długości cogrid. Popularnym sposobem jest utworzenie wektora wypełnionego wartościami NA za pomocą funkcji rep(). Te wartości NA zastąpisz w pętli, którą za chwilę utworzysz. - W pętli for oblicz wskaźnik Sharpe'a dla każdej z możliwych wag zawartych w
grid. Pierwsza instrukcja wewnątrz pętli wybiera i-ty element wektoragridi zapisuje go w obiekcieweight, który zmienia się w każdej iteracji. - Sprawdź, jak zwrot portfela zmienia się wraz ze zmianą wagi. Utwórz obiekt
preturnsrówny sumie iloczynuweightireturns_equitiesoraz iloczynu(1-weight)ireturns_bonds. - Następnie zastąp wartości NA w
vsharpeannualizowanym wskaźnikiem Sharpe'a (SharpeRatio.annualized()) obliczonym dlapreturns. - Uzupełnij funkcję rysującą wykres tak, aby na osi x znalazły się możliwe wagi (
grid), a na osi y – wartości wskaźnika Sharpe'a.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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)