1

我阅读了一些关于使用 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).

我的问题是为什么我在使用上面提到的代码时得到“约束不一致,没有解决方案”?如果有人能弄清楚我在做什么,我将不胜感激?非常感谢你们所有人。

4

1 回答 1

2

我正在尝试了解您的数据:

total.returns = 2.0

这意味着我希望投资组合的回报率为 200%

Dvec = c(0.0373, 0.0173, 0.0261)

或介于 1.7% 和 3.7% 之间。这不是那么容易。

于 2017-05-01T22:46:08.093 回答