Создание групповых ограничений в PortfolioAnalytics for R - PullRequest
1 голос
/ 05 мая 2020

Я работаю над оптимизацией портфеля с 11 ценными бумагами с использованием пакета PortfolioAnalytics в R. Из 11 фондов 5 являются фондами акций, 2 - фондами привилегированных акций, 3 - фондами с фиксированным доходом и 1 - фондом денежного рынка. Я хотел бы установить для своих классов активов 55% собственного капитала, 10% предпочтительного, 30% фиксированного дохода и 5% денежного рынка, чтобы они были полностью инвестированы без кредитного плеча и без оборота. В результате я бы надеялся увидеть различные перестановки портфеля ios, но c распределения классов активов.

Я пытался использовать функцию add.constraint для достижения этой цели, и я использовал следующий код:

 port <- add.constraint(portfolio = port, type="group",
                        groups= list(c(1:5),(6:7),c(8:10),c(11)),
                        group_min=c(0.55, 0.1, 0.3, 0.05),
                        group_max=c(0.55, 0.1, 0.3, 0.05),
                        group_pos= c(1,1,1,1))

Когда я пытаюсь создать случайный портфель ios, я получаю следующее сообщение об ошибке:

rportfolios <- random_portfolios(port, permutations = 5000, rp_method = "sample")
Error in rp_transform(w = tmp_group_w, min_sum = cLO[j], max_sum = cUP[j],  : 
  Infeasible portfolio created, perhaps increase max_permutations and/or adjust your parameters.

Есть какие-нибудь мысли о том, где я ошибаюсь?

1 Ответ

0 голосов
/ 15 июля 2020

Уильям, я думаю, проблема вызвана жесткими групповыми ограничениями и тем, как работает генератор случайных портфелей пакета. Так как портфели ios создаются случайным образом, генератор редко создает портфель ios, который точно соответствует вашим критериям, учитывая небольшое количество опробованных перестановок (например, 5000).

Это может быть не идеально для вашей проблемы, но если вы предоставите немного места для маневра в min-max каждой группе, тогда случайный генератор с большей вероятностью создаст портфель, который попадает в указанный диапазон. Например, вместо установки min = max = 0,55 попробуйте min = 0,5495 и max = 0,555 и в то же время увеличьте перестановки до 10k или больше. У меня была такая же проблема, и я решил ее таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...