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

Решение простой задачи оптимизации портфеля

В этом упражнении вы научитесь решать простую задачу оптимизации портфеля с помощью PortfolioAnalytics. Вы узнаете, как создать объект спецификации портфеля, добавить ограничения и целевые функции, а затем решить задачу оптимизации. Цель — сформировать портфель с минимальной дисперсией при условии полного инвестирования и запрета коротких позиций. Целевая функция — минимизация дисперсии портфеля. В задаче два ограничения: ограничение полного инвестирования означает, что сумма весов должна равняться 1, а ограничение длинных позиций означает, что все веса должны быть больше или равны 0 (то есть короткие позиции не допускаются).

Это упражнение является частью курса

Промежуточный анализ портфеля в R

Посмотреть курс

Инструкции к упражнению

  • Создайте объект спецификации портфеля, используя названия активов из набора данных index_returns, и назовите его port_spec.
  • Добавьте к объекту port_spec ограничение полного инвестирования, при котором сумма весов равна 1.
  • Добавьте к объекту port_spec ограничение длинных позиций, при котором вес каждого актива находится в диапазоне от 0 до 1.
  • Добавьте к объекту port_spec целевую функцию для минимизации стандартного отклонения портфеля.
  • Решите задачу оптимизации портфеля, используя optimize_method = "ROI". Сохраните результаты оптимизации в объект с именем opt.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

# Create the portfolio specification
port_spec <- portfolio.spec(colnames(___))

# 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 minimize portfolio standard deviation
port_spec <- add.objective(portfolio = ___, type = "___", name = "___")

# Solve the optimization problem
opt <- optimize.portfolio(___, portfolio = ___, optimize_method = "___")
Редактировать и запускать код