我阅读了一些关于使用 quadprog 进行投资组合优化的文章,并从这个平台学到了很多技巧。现在我正在尝试在约束下使用 quadprog 优化 03 只股票的投资组合,即。
- 权重之和必须为 1
- 不卖空
- 投资组合回报 = 2%
- 每个库存重量不得超过总重量的 50%
我的 3 只股票的协方差矩阵是
Dmat = matrix(c(0.0119, 0.0071, -0.0023,0.0071, 0.0093,
-0.0006,-0.0023,-0.0006,0.0066), nrow = 3)
股票收益/colmeans 存储在 Dvec
Dvec = c(0.0373, 0.0173, 0.0261)
我使用了这篇文章投资组合优化约束矩阵/bvec 解释中提到的代码和过程。我还阅读了类似的帖子投资组合优化约束矩阵/bvec 解释和使用 R 中的 quadprog 包进行投资组合优化中的权重约束所以我尝试的代码看起来像这样
N = 3
total.returns = 0.02
lo = rep(0,N)
up = rep(0.50,N)
A = rbind(rep(1,N), dvec, diag(N), -diag(N))
A = t(A)
B = c(1,total.returns, lo, -up)
neq = 1
qp = solve.QP(Dmat, dvec, A, B,neq)
qp$solution
我从两个等式开始分析,即一个用于百分之百的投资,另一个用于投资组合回报。我在另一篇文章中读到,退货可能会导致问题,以至于我们正在寻找的退货在当前数据和约束条件下是不可能的。所以我也将返回值更改为不同的级别,但它不起作用,所以我放宽了返回相等性并使用 neq=1。仍然无法正常工作。我还尝试了对个股的不同权重约束,即我尝试将上限(向上)从 5% 更改为 80%。
注意:当我在没有总回报的情况下编写 amat 和 bvev 时,代码就可以工作。即当我使用 A 和 B 作为
A = rbind(rep(1,N), diag(N), -diag(N))
B = c(1, lo, -up)
代替
A = rbind(rep(1,N), dvec, diag(N), -diag(N)) and
B = c(1,total.returns, lo, -up).
我的问题是为什么我在使用上面提到的代码时得到“约束不一致,没有解决方案”?如果有人能弄清楚我在做什么,我将不胜感激?非常感谢你们所有人。