我在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)