Я пытаюсь создать портфолио, оптимизированное по отношению к другому в 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]
поэтому я не уверен, почему он не находит решения, может ли кто-нибудь взглянуть?