r/emotizize.portFolio {PortfolioAnalytics}仅给出NA权重



我有一个问题,无法想到一个合理的答案。我希望有一个人可以帮助我!非常感谢!

我正在通过使用滚动窗口方法来最大化夏普比率的投资组合优化。之后,我在新矩阵中写入投资组合权重。

有几个数据集,一切正常。虽然有两个数据集,但出现了一个问题:两个或三行仅获得NA权重。

数据不应该存在问题,因为NAS只有很少。此外,由于在滚动窗口方法中几次使用了几次回报,因此投资组合估算的一行返回没有问题。您是否知道为什么特别会填充NAS?

非常感谢和最好的问候

塞巴斯蒂安

# Kenneth French Dates
DateKFStart <- '1963-07' #'1969-07'
DateKFEnd   <- '2004-11' #'2017-06'
R.FF3=R.FF3[paste(DateKFStart, DateKFEnd, sep='/'),]
R.FF5=R.FF5[paste(DateKFStart, DateKFEnd, sep='/'),]
R.KFInd10=R.KFInd10[paste(DateKFStart, DateKFEnd, sep='/'),]
R.KFInd49=R.KFInd49[paste(DateKFStart, DateKFEnd, sep='/'),]
R.KFSibo=R.KFSibo[paste(DateKFStart, DateKFEnd, sep='/'),]
#--------------------#
#### Optimization ####
#--------------------#
#------------------------------#
assets=R.KFInd10               # R.FF3
is.estimation.window='Rolling' # 'Expanding'
M=60                           # Estimation Window Length

# Construct initial portfolio
assetnames=colnames(assets)
returns=assets
w.sharpe=returns*0
r.sharpe.NC=w.sharpe[,1]
colnames(r.sharpe.NC)='r.sharpe.NC'

sharpe.portf <- portfolio.spec(assets = assetnames)
sharpe.portf <- add.constraint(sharpe.portf, type= 'full_investment')
sharpe.portf <- add.constraint(sharpe.portf, type= 'long_only')
sharpe.portf <- add.objective(sharpe.portf, type='risk',   name='StdDev')
sharpe.portf <- add.objective(sharpe.portf, type='return', name='mean'  )
sharpe.portf
  for (n in (M+1):nrow(returns))
  {
  max_sharpe_opt <- optimize.portfolio(R=returns[(n-M):(n-1),],portfolio=sharpe.portf, 
                                       optimize_method='ROI',maxSR=TRUE, message=TRUE,trace=TRUE)
  w.sharpe[n,]=max_sharpe_opt$weights
  }
r.sharpe.NC[,1]=rowSums(returns*w.sharpe)

正如已经说过的,我不知道一个解释。整个代码适用于多个数据集。对于2个两个数据集,两排的权重为Na,其余的效果很好。因此,数据不应该存在问题?

我遇到了同样的问题,我认为这是因为有时找不到解决方案...尝试"随机"方法,它将花费更多的时间,但您会得到一些东西通常...或尝试其他优化方法。

如果您发现有关问题的信息,请给我您的解决方案。

max_sharpe_opt <- optimize.portfolio(R=returns[(n-M):(n-1),],portfolio=sharpe.portf, 
                                       optimize_method='random',maxSR=TRUE, message=TRUE)

max_sharpe_opt <- optimize.portfolio(R=returns[(n-M):(n-1),],portfolio=sharpe.portf, 
                                       optimize_method='GenSA',maxSR=TRUE, message=TRUE)

相关内容

  • 没有找到相关文章

最新更新