Добавление целевых функций
Целевые функции добавляются в объект портфеля с помощью функции add.objective(). Каждая добавленная цель представляет собой отдельный объект и хранится в слоте objectives объекта спецификации портфеля. Такой подход делает цели модульными: их легко добавлять, удалять или изменять. Аргумент name должен быть допустимой функцией R. В пакете PerformanceAnalytics доступны несколько готовых функций, однако в качестве целевых функций можно использовать и пользовательские. Обязательные аргументы add.objective(): portfolio — портфель, к которому добавляется цель; type — тип цели; name — имя цели; а также именованные аргументы, передаваемые через ... в конструктор соответствующего типа цели. Аргументы для целевой функции задаются в виде именованного списка через параметр arguments.
Основные типы целей:
return: цель этого типа направлена на максимизацию целевой функции.risk: цель этого типа направлена на минимизацию целевой функции.risk_budget: цель этого типа направлена на минимизацию концентрации риска или штрафование за превышение допустимого минимального или максимального вклада в риск.
Помимо перечисленных типов, PortfolioAnalytics также поддерживает типы целей на основе квадратичной функции полезности и концентрации весов. Если вас интересуют другие типы ограничений, обратитесь к файлам справки конструкторов ограничений. Они содержат описание каждого типа ограничения, а также примеры кода.
Это упражнение является частью курса
Промежуточный анализ портфеля в R
Инструкции к упражнению
- Добавьте цель по доходности в объект спецификации портфеля
port_spec, созданный в предыдущем упражнении. - Добавьте в
port_specцель по риску для минимизации стандартного отклонения портфеля. - Добавьте в
port_specцель по риск-бюджету, где риск определяется как компонентное стандартное отклонение. Установите минимальный процент риска равным 5%, а максимальный — 10%. - Выведите объект
port_specна экран.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# Add a return objective to maximize mean return
port_spec <- add.objective(portfolio = ___, type = ___, name = ___)
# Add a risk objective to minimize portfolio standard deviation
port_spec <- add.objective(portfolio = ___, type = ___, name = ___)
# Add a risk budget objective
port_spec <- add.objective(portfolio = ___, type = ___, name = ___, min_prisk = ___, max_prisk = ___)
# Print the portfolio specification object