使用quadprog进行特定退货的投资组合优化导致约束不一致,没有解决方案"

时间:2017-05-01 15:08:06

标签: optimization constraints portfolio quadratic-programming quadprog

我通过quadprog阅读了一些关于投资组合优化的帖子,我从这个平台学到了许多技巧。现在我试图在约束条件下优化具有quadprog的03种股票组合,即。

  • 重量必须总和为1
  • 不卖空
  • 投资组合回报= 2%
  • 每个库存重量不得超过总重量的50%

我的3股票的covariancce矩阵是

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)

我使用了这篇文章中提到的代码和程序Portfolio Optimization constraints Matrix/bvec explanation。我还阅读了类似的帖子Portfolio Optimization constraints Matrix/bvec explanationConstraints on weight in portfolio optimization using quadprog package in R所以我尝试的代码看起来像这样

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).

我的问题是为什么我得到"约束不一致,没有解决方案"当我使用上面提到的代码? 如果有人能弄明白我在做什么错,我会很感激的吗?非常感谢你们所有人。

1 个答案:

答案 0 :(得分:2)

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

total.returns = 2.0

这意味着我希望使用返回

的工具获得200%的投资组合回报
Dvec = c(0.0373, 0.0173, 0.0261)

或介于1.7%和3.7%之间。这并不容易。