Wyznaczanie granicy efektywności przy użyciu siatki docelowych stóp zwrotu
Jak już wiesz, jednym ze sposobów wyznaczenia granicy efektywności jest najpierw zdefiniowanie siatki docelowych stóp zwrotu, a następnie – dla każdej z nich – znalezienie portfela o oczekiwanej stopie zwrotu równej wartości docelowej przy możliwie najniższej wariancji.
Ale jaka siatka docelowych stóp zwrotu jest rozsądna? Jako maksymalną wartość docelową przyjmiesz maksymalną średnią stopę zwrotu spośród wszystkich akcji. Idealnie minimalną wartość docelową ustawiłoby się na poziomie stopy zwrotu portfela o minimalnej wariancji. Ponieważ ten portfel nie jest jeszcze znany, jako minimum przyjmiesz najmniejszą ze średnich stóp zwrotu wszystkich akcji.
W tym ćwiczeniu użyjesz pętli for, aby wyznaczyć siatkę potencjalnych średnich portfela, odchyleń standardowych i wag.
To ćwiczenie jest częścią kursu
Wprowadzenie do analizy portfela w R
Instrukcje do ćwiczenia
- Oblicz średnie kolumnowe dla
returns(używająccolMeans()) i przypisz wynik do zmiennejstockmu. - Utwórz sekwencję (seq()) o długości 50, zaczynającą się od stopy wolnej od ryzyka wynoszącej 1% i kończącą się na maksymalnej wartości
stockmu. Przypisz ją do zmiennejgrid. - Zainicjalizuj dwa puste wektory o tej samej długości co
grid, używając funkcji rep() – posłużą do przechowywania średnich portfela i odchyleń standardowych. Nazwij jevpmivpsd. - Zainicjalizuj pustą macierz o 50 wierszach i 30 kolumnach, przypisując ją do zmiennej
mweights. Użyj do tego funkcjimatrix(). - Utwórz pętlę for, która iteruje po wszystkich wartościach
grid– od pierwszej do ostatniej. W każdej iteracji pętla powinna tworzyć portfeloptna podstawiereturnsz docelową stopą zwrotu równą bieżącej wartościgrid. - W każdej iteracji pętla powinna uzupełniać wektory
vpm($pm) ivpsd($ps) odpowiednimi wartościami z obiektuopt. - Zapisuj wagi portfela wiersz po wierszu w macierzy
mweights($pw).
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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, ] <- ___$__
}