繁体   English   中英

使用quadprog对特定收益进行投资组合优化会导致“约束不一致,没有解决方案”

[英]Portfolio optimization with quadprog for specific returns results in “constraints are inconsistent, no solution”

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

库存退货/退货存入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).

我的问题是,当我使用上述代码时,为什么会出现“约束不一致,没有解决方案”的问题? 如果有人能弄清楚我在犯什么错误,我将不胜感激。 在此先感谢大家。

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

total.returns = 2.0

这意味着我希望使用收益为200%的工具获得200%的投资组合收益

Dvec = c(0.0373, 0.0173, 0.0261)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM