0

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

0 回答 0