Zacznij terazZacznij za darmo

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

Zobacz kurs

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_spec ograniczenie pełnej inwestycji, tak aby wagi sumowały się do 1.
  • Dodaj do obiektu port_spec ograniczenie long only, tak aby waga każdego aktywa mieściła się w przedziale od 0 do 1.
  • Dodaj do obiektu port_spec cel polegający na maksymalizacji średniego zwrotu portfela.
  • Dodaj do obiektu port_spec cel 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")
Edytuj i uruchom kod