R:迭代约束投资组合优化

时间:2017-07-18 09:45:11

标签: r optimization constraints portfolio

我正在尝试从大量股票(890)构建最小方差投资组合,这也满足一些额外的外部约束。例如,我想检查结果投资组合是否符合某些行业权重限制,如果没有,则查找新的行业重量限制。

以下是我目前用于查找最小方差组合的代码(使用corpcor包中的cov.shrink和quadprog包中的solve.QP):

X <- as.matrix(LogReturn)

# Shrinkage estimator covariance matrix
covar <- cov.shrink(X)

N <- ncol(X)
zeros <- array(0, dim = c(N,1))

# Evaluate the optimization to generate minimum variance portfolio with no short selling and with max allocation of 0.05
aMat <- cbind(1, diag(N))
aMat <- cbind(aMat, -diag(N))

b0 <- c(1, rep(0, N))
b0 <- c(b0, rep(-0.05, N))

res <- solve.QP(covar, zeros, aMat, bvec=b0, meq = 1)

# Return portfolio attributes
y <- X %*% res$solution
port <- list(pw = round(res$solution,3), px = y, pm = mean(y), ps = sd(y))
port

以下是我计划用来检查拟议投资组合是否符合我的行业限制的代码:

Sedol <- cbind(SedolData, round(res$solution,3))
colnames(Sedol) <- c("SEDOL", "Sector", "Country", "Weight")

# Proposed sector data
L <- nrow(SectorKey)
Sector <- cbind(SectorKey, 0)
colnames(Sector) <- c("Name", "Key", "Parent", "Proposed")
bPass <- TRUE
for(i in 1:L){
  for (x in 1:N){
    if(Sedol[x,2] == Sector[i,2]){
      Sector[i,4] <- Sector[i,4] + Sedol[x,4]
    }
  }  
  if(abs(Sector[i,3] - Sector[i,4])>0.05){
    bPass <- FALSE
  }
}

if(bPass == FALSE){
  # add cost function?
}

我对r很新,我想知道是否有人可以建议我应该如何继续。我以为我会用某种成本函数迭代惩罚不满足我约束的投资组合,但我不知道如何在不使用solve.QP的情况下解决我的问题。我不知道如何解决这个问题。

LogReturns是我的890只股票的日志回报矩阵,有120次观察。 SedolData是每个股票所在行业的关键,用于查找每个行业的拟议投资组合的分配(第8列中每个行业的890个股票的矩阵)。 SectorKey是具有目标权重(容差5%)的扇区矩阵。

非常感谢任何帮助!

0 个答案:

没有答案