Однопериодная оптимизация
Для запуска оптимизации предусмотрены две функции: optimize.portfolio() и optimize.portfolio.rebalancing(). В этом упражнении мы сосредоточимся на однопериодной оптимизации, а в следующем используем optimize.portfolio.rebalancing() для оптимизации с периодической ребалансировкой. Функция optimize.portfolio() поддерживает однопериодную оптимизацию. Основные аргументы: R — доходности активов, portfolio — объект спецификации портфеля, optimize_method — метод оптимизации, применяемый для решения задачи. Во многих случаях полезно указывать trace = TRUE, чтобы сохранять дополнительную информацию по каждой итерации или попытке оптимизации.
Поддерживаются следующие методы оптимизации:
DEoptim: дифференциальная эволюцияrandom: случайные портфелиGenSA: обобщённый метод имитации отжигаpso: оптимизация роем частицROI: R Optimization Infrastructure — решатели для задач линейного и квадратичного программирования
Выбор метода оптимизации зависит от типа решаемой задачи. Например, задачу, которую можно сформулировать как задачу квадратичного программирования, следует решать с помощью соответствующего решателя, тогда как для невыпуклой задачи лучше подойдёт глобальный решатель, такой как DEoptim.
В этом упражнении мы определим задачу оптимизации портфеля: максимизировать среднюю доходность и минимизировать стандартное отклонение портфеля при ограничении на бюджет риска по стандартному отклонению, где минимальная доля риска составляет 5%, а максимальная — 10%, с учётом ограничений на полное инвестирование и запрет коротких позиций. Целевая функция бюджета риска требует глобального решателя, поэтому задача будет решена методом случайных портфелей. Набор случайных портфелей rp формируется с использованием 500 перестановок.
Это упражнение является частью курса
Промежуточный анализ портфеля в R
Инструкции к упражнению
Спецификация портфеля уже создана и хранится в переменной port_spec. В рабочей среде также доступны данные о доходностях — asset_returns.
- Запустите однопериодную оптимизацию с параметром
trace, установленным вTRUE, используя"random"в качестве метода оптимизации. Сохраните результат оптимизации в переменнуюopt. - Выведите результат оптимизации на экран.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# Run a single period optimization using random portfolios as the optimization method
opt <- optimize.portfolio(R = ___, portfolio = ___, optimize_method = ___, rp = rp, trace = TRUE)
# Print the output of the single-period optimization