我正在尝试建立一个相对于另一个在R中优化的投资组合。
我正在努力减少目标函数
$$ min Var(return_p-return'weight_ {bm})$$
带约束
$$ 1_n'w = 1 $$
$$ w> 0.005 $$
$$ w< 0.8 $$
w是投资组合的回报。有10个证券,所以我将基准权重设置为.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)瓦特$$
最后一个术语是我需要的形式,所以我试着用R中的solve.QP来解决这个问题,但是约束给了我一个问题。
这是我的代码
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)
我得到的错误是“约束不一致,没有解决方案!”但是我找不到我的A矩阵的错误
我的(转置)矩阵看起来像这样
[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]
所以我不确定为什么没有找到解决方案,有人可以看看吗?
答案 0 :(得分:4)
我不熟悉这个包,但只是快速浏览一下https://cran.r-project.org/web/packages/quadprog/quadprog.pdf,这显然就是你正在使用的。
您的RHS值为.8应为-0.8,因为此函数使用≥不等式。所以你一直在限制变量≥0.005和≤-0.8,这当然不是你想要的,是不可行的。
所以请按原样保留转置A并制作
b0:
[1]
[.005]
[.005]
...
[.005]
[-.8]
[-.8]
...
[-.8]