Максимізація квадратичної функції корисності
У відео про виклики оптимізації портфеля ви бачили, як розв'язати задачу оптимізації квадратичної корисності за допомогою пакета quadprog. У цій вправі ви побачите, як розв'язати квадратичну задачу корисності з пакетом PortfolioAnalytics. Нагадаємо, що квадратична корисність має два доданки: один для середньої дохідності портфеля, а інший — для дисперсії портфеля з параметром неприйняття ризику lambda.
Ця вправа є частиною курсу
Середній рівень аналізу портфеля в R
Інструкції до вправи
- Створіть об'єкт специфікації портфеля, використавши назви активів із набору даних
index_returns, і назвіть цей об'єкт специфікації портфеляport_spec. - Додайте обмеження повної інвестованості до об'єкта
port_spec, щоб сума ваг дорівнювала 1. - Додайте обмеження «лише довгі позиції» до об'єкта
port_spec, щоб вага активу була між 0 та 1. - Додайте ціль максимізації середньої дохідності портфеля до об'єкта
port_spec. - Додайте ціль мінімізації дисперсії портфеля до об'єкта
port_spec. Неприйняття ризику встановіть на рівні 10. - Запустіть оптимізацію. Цю задачу можна розв'язати квадратичним програмним розв'язувачем, тому вкажіть
optimize_method = "ROI"
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# 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")