НачатьНачать бесплатно

Однопериодная оптимизация

Для запуска оптимизации предусмотрены две функции: 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
Редактировать и запускать код