Оптимизация портфеля с помощью quadprog для конкретной доходности приводит к противоречивым ограничениям, нет решения

Я прочитал несколько сообщений об оптимизации портфолио с помощью 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).

У меня вопрос: почему я получаю сообщение «ограничения несовместимы, нет решения», когда я использую упомянутый выше код? Буду благодарен, если кто-нибудь поймет, какую ошибку я делаю? Заранее большое спасибо всем вам.


person Wajid Raza    schedule 01.05.2017    source источник


Ответы (1)


Я пытаюсь понять ваши данные:

total.returns = 2.0

это означает, что я хочу получить 200% -ную доходность портфеля с инструментами, которые имеют доходность

Dvec = c(0.0373, 0.0173, 0.0261)

или от 1,7% до 3,7%. Это не так-то просто.

person Erwin Kalvelagen    schedule 01.05.2017
comment
Уважаемый Эрвин Калвелаген, большое вам спасибо. Да вы правы на все сто процентов. Я стремился к 2% прибыли. Я должен был написать это как 0,02 в формате bvec. - person Wajid Raza; 03.05.2017