Оптимизация портфеля

Я пытаюсь создать портфолио, оптимизированное по отношению к другому в R.

Я пытаюсь минимизировать целевую функцию

$$min Var(return_p-return'weight_{bm})$$

с ограничениями

$$ 1_n'w = 1$$

$$w > .005$$

$$w < .8$$

где w — доход от портфеля. имеется 10 ценных бумаг, поэтому я установил эталонные веса на уровне 0,1 для каждой. я знаю это

$$ Var(return_p-return'weight_{bm})= var(r) + var(r'w_{bm}) - 2*cov(r_p, r'w_{bm})=var(r'w)- 2cov(r'w,r'w_{bm})=w'var(r)w-2cov(r'w,r'w_{bm})$$

$$=w'var(r)w-2cov(r',r'w_bm)w$$

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

вот мой код

trackport <- array(rnorm(obs * assets, mean = .2, sd = .15), dim = c(obs,     
assets)) #this is the portfolio which the assets are tracked against
wbm <- matrix(rep(1/assets, assets)) #random numbers for the weights
Aeq <- t(matrix(rep(1,assets), nrow=assets, ncol = 1)) #col of 1's to add    
                                                       #the weights
Beq <- 1 # weights should sum to 1's
H = 2*cov(trackport) #times 2 because of the syntax

#multiplies the returns times coefficients to create a vector of returns for     
#the benchmark
rbm = trackport %*% wbm 

#covariance between the tracking portfolio and benchmark returns
eff <- cov(trackport, rbm)

#constraints
Amatrix <- t(matrix(c(Aeq, diag(assets), -diag(assets)), ncol = assets,     
byrow = T))
Bvector <- matrix(c(1,rep(.005, assets), rep(.8, assets)))

#solve
solQP3 <- solve.QP(Dmat = H,
                   dvec = zeros, #reduces to min var portfolio for  
                                 #troubleshooting purposes
                   Amat = Amatrix,
                   bvec = Bvector,
                   meq = 1)

ошибка, которую я получаю: «ограничения несовместимы, нет решения!» но я не могу найти, что не так с моей матрицей А

Моя (транспонированная) матрица выглядит так

[1,1,...,1]
[1,0,...,0]
[0,1,...,0]
...
[0,0,...,1]
[-1,0,...,0]
[0,-1,...,0]
...
[0,0,...,-1]

и мой $b_0$ выглядит так

[1]
[.005]
[.005]
...
[.005]
[.8]
[.8]
...
[.8]

поэтому я не уверен, почему он не находит решения, может ли кто-нибудь взглянуть?


person Joel Sinofsky    schedule 28.03.2016    source источник


Ответы (1)


Я не знаком с пакетом, но только что просмотрел https://cran.r-project.org/web/packages/quadprog/quadprog.pdf , который, по-видимому, вы и используете.

Ваши значения RHS 0,8 должны быть -0,8, потому что эта функция использует ≥ неравенств. Таким образом, вы ограничиваете переменные значениями ≥ 0,005 и ≤ -0,8, что, конечно, не то, что вам нужно, и невозможно.

Так что оставьте транспонированную A как есть и сделайте

 b0:
    [1]
    [.005]
    [.005]
    ...
    [.005]
    [-.8]
    [-.8]
    ...
    [-.8]
person Mark L. Stone    schedule 28.03.2016
comment
Я хочу, чтобы моя функция была .005 ‹ x ‹ .8, изменение .8 на -.8 решит это? - person Joel Sinofsky; 29.03.2016
comment
@Джоэл Синофски, да!! У вас будет -x $\ge$ -.8. Это эквивалентно x $\le$ .8, что вам и нужно. Конечно, вы уже ввели x $\ge$ .005. - person Mark L. Stone; 29.03.2016