оптимизация quadprog

Вот интересная загадка.

Ниже приведен R-фрагмент , который идентифицирует точку касания квадратичной функции относительно линии, проведенной из точки (0,rf) на оси Y.

Для тех, кто знаком с теорией портфеля, эта точка находится в пространстве доходности и риска, а решение представляет собой набор весов, определяющих касательный портфель (максимальный коэффициент Шарпа). Фрагмент допускает отрицательные веса (т. е. шорты), и есть одно ограничение веса равенства, которое требует, чтобы сумма весов была равна 1.

require(quadprog)

# create artifical data
nO     <- 100     # number of observations
nA     <- 10      # number of assets
mData  <- array(rnorm(nO * nA, mean = 0.001, sd = 0.01), dim = c(nO, nA))
rf     <- 0.0001     # riskfree rate (2.5% pa)
mu     <- apply(mData, 2, mean)    # means
mu2    <- mu - rf                  # excess means

# qp
aMat  <- as.matrix(mu2)
bVec  <- 1 # set expectation of portfolio excess return to 1
zeros <- array(0, dim = c(nA,1))
solQP <- solve.QP(cov(mData), zeros, aMat, bVec, meq = 1)

# rescale variables to obtain weights
w <- as.matrix(solQP$solution/sum(solQP$solution))

# compute sharpe ratio
SR <- t(w) %*% mu2 / sqrt(t(w) %*% cov(mData) %*% w)

Мой вопрос — как адаптировать код для решения оптимального набора весов, чтобы сумма весов равна произвольному числу (включая крайний случай самофинансируемого портфеля, где сумма весов = 0) в отличие от единицы?

В качестве альтернативы вы можете рассмотреть возможность добавления элемента «деньги» в ковариационную матрицу с дисперсией-ковариацией, равной 0, и добавить ограничение равенства, требующее веса денег = 1. Однако эта матрица не будет положительно полуопределенной. Также я подозреваю, что неденежные веса могут быть тривиально нулевыми.

9
задан Ram Ahluwalia 10 May 2012 в 04:18
поделиться