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

Я пытаюсь справиться с оптимизацией портфолио в R, и я изо всех сил пытаюсь найти консенсус о том, как кодировать ограничения и т. Д. С помощью resolve.QP.

По сути, я уже рассчитал ковариационную матрицу доходности n активов, которую я понимаю как Dmat, однако в остальном я не уверен. Я хотел бы, чтобы мои ограничения сводились исключительно к тому, что все веса в сумме равны 1, и все они должны быть меньше определенного размера (максимального распределения) по абсолютной величине, т. Е.

|x_i|<max.allocation<=1. 

Правильно ли я поэтому считаю, что мой Амат должен быть:

Amat <- matrix(1,nrow=n)
Amat <- cbind(Amat, -diag(n))

Кроме того, мой bvec должен быть:

bvec <- 1
bvec <- c(bvec, rep(-max.allocation,n))

Правильно ли я полагаю, что, поскольку только одно ограничение является равенством meq = 1? И, наконец, мое исследование, кажется, указывает на:

dvec <- rep(0,n)

Но если это так, то где же тогда проблема со средней доходностью активов?

Все, что я пытаюсь сделать, это решить для весов портфеля и минимизировать стандартное отклонение портфеля для заданной доходности портфеля, а не построить эффективную границу.

Я уже видел большой пост экономиста, и он привел меня туда, где я сейчас нахожусь. Приношу свои извинения, поскольку я новичок в этой технике решения, но любая помощь, чтобы упростить и прояснить, какими должны быть мои параметры, будет большим подспорьем.

Спасибо.


person J.Smith    schedule 05.10.2017    source источник
comment
Я не знаком с этим пакетом, поэтому это ориентировочно, но: я думаю, вам нужно умножить матрицу (1, nrow = n) на max.allocation и добавить столбец [1, rep (-1, n)] в Амате. И если вы хотите минимизировать доходность портфеля, я думаю, вам нужно использовать среднюю доходность, чтобы выразить доходность портфеля с точки зрения распределения, а затем включить это в качестве ограничения. Кроме того, поскольку вы используете линейные уравнения, вам, вероятно, придется минимизировать дисперсию, а не std (что эквивалентно, но настройка будет немного отличаться). Ссылка на большой пост Economistat может помочь.   -  person Acccumulation    schedule 06.10.2017


Ответы (1)


Если вы хотите добавить

|x(i)| <= U

тогда в quadprog вам нужно разделить это на:

-x(i) >= -U
 x(i) >= -U

Таким образом, вы получите две дополнительные диагональные структуры в Amat.

person Erwin Kalvelagen    schedule 07.10.2017