Zacznij terazZacznij za darmo

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

Zobacz kurs

Instrukcje do ćwiczenia

  • Utwórz wektor o nazwie grid, korzystając z funkcji seq(), który zaczyna się od 0, kończy na 1 i ma krok równy 0,01.
  • Zainicjalizuj pusty wektor vsharpe o tej samej długości co grid. 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 wektora grid i zapisuje go w obiekcie weight, który zmienia się w każdej iteracji.
  • Sprawdź, jak zwrot portfela zmienia się wraz ze zmianą wagi. Utwórz obiekt preturns równy sumie iloczynu weight i returns_equities oraz iloczynu (1-weight) i returns_bonds.
  • Następnie zastąp wartości NA w vsharpe annualizowanym wskaźnikiem Sharpe'a (SharpeRatio.annualized()) obliczonym dla preturns.
  • 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)
Edytuj i uruchom kod