我在 NLOPTR 中使用SLSQP函数来构建使用 34 只低波动性股票的投资组合。股票并不重要。我想要做的是能够对每只股票施加最小重量和最大重量。
hin 函数施加了最小权重约束——从这里可以看出——在投资组合的构建中每个权重必须至少为 1%;这可以通过“(x - 0.01)”看到
hin <- function(x){
return(x - 0.01)
}
我不知道现在如何为函数添加最大约束(比如每只股票最大重量的 15%)以及具有最小约束。因此将具有最小 1% 和最大 15% 的权重约束。
有人可以帮我创建一个最小和一个最大约束。
我运行优化的代码如下:
modvol <- subset(matret, select=modvolreturns)
covmodvol <- cov(modvol)
var(modvol[,1])
size <- 34
fn <- function(x){
return(t(x)%*%covmodvol%*%x)
}
hin <- function(x){
return(x - 0.01)
}
heq <- function(x){
return(sum(x)-1)
}
startx <- vector("numeric",size)
startx[1:size] <- 1/size
mvportmodvol <- slsqp(startx,fn,hin = hin,heq = heq)