Я прочитал несколько сообщений об оптимизации портфолио с помощью quadprog и научился многим трюкам на этой платформе. Теперь я пытаюсь оптимизировать портфель из 03 акций с помощью quadprog при ограничениях, то есть.
- Вес должен составлять 1
- Нет коротких продаж
- доходность портфеля = 2%
- Вес каждой заготовки не должен превышать 50% от общего веса.
Матрица ковариации для моих 3 акций:
Dmat = matrix(c(0.0119, 0.0071, -0.0023,0.0071, 0.0093,
-0.0006,-0.0023,-0.0006,0.0066), nrow = 3)
Возврат акций / кол-средства хранятся в Dvec.
Dvec = c(0.0373, 0.0173, 0.0261)
Я использовал код и процедуру, упомянутые в этом посте Матрица ограничений оптимизации портфеля / bvec объяснение. Я также читал похожие сообщения Матрица ограничений оптимизации портфеля / объяснение bvec и Ограничения по весу при оптимизации портфеля с использованием quadprog пакет в R Итак, код, который я пробовал, выглядит так
N = 3
total.returns = 0.02
lo = rep(0,N)
up = rep(0.50,N)
A = rbind(rep(1,N), dvec, diag(N), -diag(N))
A = t(A)
B = c(1,total.returns, lo, -up)
neq = 1
qp = solve.QP(Dmat, dvec, A, B,neq)
qp$solution
Я начинаю анализ с двух равенств: одно для стопроцентных инвестиций, а другое - для доходности портфеля. Я прочитал в другом сообщении, что возврат может вызывать проблему, так как возврат, который мы ищем, невозможен с текущими данными и ограничениями. Итак, я также меняю возврат на другой уровень, но это не работает, поэтому я ослабил равенство возврата и использовал neq = 1. Тем не менее это не работает. Я также пробовал разные ограничения веса для отдельных акций, т.е. я пытался изменить верхний предел (вверх) с 5% до 80%.
ПРИМЕЧАНИЕ. Когда я пишу amat и bvev без общей прибыли, тогда код работает. т.е. когда я использую A и B как
A = rbind(rep(1,N), diag(N), -diag(N))
B = c(1, lo, -up)
вместо того
A = rbind(rep(1,N), dvec, diag(N), -diag(N)) and
B = c(1,total.returns, lo, -up).
У меня вопрос: почему я получаю сообщение «ограничения несовместимы, нет решения», когда я использую упомянутый выше код? Буду благодарен, если кто-нибудь поймет, какую ошибку я делаю? Заранее большое спасибо всем вам.