我试图使股票投资组合的Sharpe比率最大化,但是我很难添加权重约束。
在符合以下条件的情况下最大化夏普比率:
权重之和= 1
最小重量= 0
最大权重= 2 x平均权重(5个股票投资组合为40%)
cov.mat
BIL AGL SOL AMS ANG
BIL 1.0000000 0.7346163 0.5527674 0.4550696 0.3203103
AGL 0.7346163 1.0000000 0.6419244 0.7417388 0.4983650
SOL 0.5527674 0.6419244 1.0000000 0.5813384 0.3012339
AMS 0.4550696 0.7417388 0.5813384 1.0000000 0.4904748
ANG 0.3203103 0.4983650 0.3012339 0.4904748 1.0000000
wgt <- array(1/nrow(cov.mat), dim = c(nrow(cov.mat),1))
sharpe.ratio <- function(w)
{
cov.mat <- cov2cor(cov(RR))
e.ret <- matrix(runif(nrow(cov.mat))-0.5, nrow=1, ncol=nrow(cov.mat))
e.ret %*% t(w)/t(w) %*% cov.mat %*% w
}
wgtsum <- function(w)
{
sum(w)
}
lb <- matrix(0, nrow=1, ncol=nrow(cov.mat))
ub <- matrix(-2/nrow(cov.mat), nrow=1, ncol=nrow(cov.mat))
eqB <- 1
gosolnp(pars=wgt, fixed=NULL, sharpe.ratio, eqfun=wgtsum, eqB=eqb, LB=lb, UB=ub)
我遇到以下错误:
> gosolnp(pars=wgt, fixed=NULL, sharpe.ratio, eqfun=wgtsum, eqB=eqb, LB=lb, UB=ub)
Error in e.ret %*% t(w) : non-conformable arguments
In addition: Warning messages:
1: In runif(n, min = LB, max = UB) : NAs produced
没有重量限制,优化效果很好。但是我得到“没有可行的解决方案。”尝试添加最小/最大权重时。
任何指导将不胜感激。