Maksymalizacja kwadratowej funkcji użyteczności
W filmie poświęconym wyzwaniom optymalizacji portfela pokazaliśmy, jak rozwiązać problem optymalizacji kwadratowej funkcji użyteczności za pomocą pakietu quadprog. To ćwiczenie pokaże ci, jak rozwiązać ten sam problem przy użyciu pakietu PortfolioAnalytics. Przypomnij sobie, że sformułowanie kwadratowej funkcji użyteczności zawiera dwa składniki: jeden dla średniego zwrotu portfela i drugi dla wariancji portfela z parametrem awersji do ryzyka lambda.
To ćwiczenie jest częścią kursu
Analiza portfela – poziom średniozaawansowany w R
Instrukcje do ćwiczenia
- Utwórz obiekt specyfikacji portfela, korzystając z nazw aktywów ze zbioru danych
index_returns, i nadaj mu nazwęport_spec. - Dodaj do obiektu
port_specograniczenie pełnej inwestycji, tak aby wagi sumowały się do 1. - Dodaj do obiektu
port_specograniczenie long only, tak aby waga każdego aktywa mieściła się w przedziale od 0 do 1. - Dodaj do obiektu
port_speccel polegający na maksymalizacji średniego zwrotu portfela. - Dodaj do obiektu
port_speccel polegający na minimalizacji wariancji portfela. Parametr awersji do ryzyka ustaw na 10. - Uruchom optymalizację. Ten problem można rozwiązać za pomocą solvera programowania kwadratowego, dlatego użyj opcji
optimize_method = "ROI".
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# Create the portfolio specification
port_spec <- portfolio.spec(assets = ___)
# Add a full investment constraint such that the weights sum to 1
port_spec <- add.constraint(portfolio = ___, type = ___)
# Add a long only constraint such that the weight of an asset is between 0 and 1
port_spec <- add.constraint(portfolio = ___, type = ___)
# Add an objective to maximize portfolio mean return
port_spec <- add.objective(portfolio = ___, type = ___, name = ___)
# Add an objective to minimize portfolio variance
port_spec <- add.objective(portfolio = port_spec, type = ___, name = ___, risk_aversion = ___)
# Solve the optimization problem
opt <- optimize.portfolio(R = ___, portfolio = ___, optimize_method = "ROI")