我有一个问题,无法想出一个合理的答案。我希望有一个人可以帮助我!非常感谢提前!
我正在进行投资组合优化,通过滚动窗口方法最大化夏普比率。之后,我在新的Matrix中编写投资组合权重。
有几个数据集,一切正常。虽然有两个其他数据集,但会出现一个问题:两行或三行只能获得NA权重。
数据应该没有问题,因为只有很少的NA。此外,投资组合估算的一行回报不会出现问题,因为每一行回报在滚动窗口方法中多次使用。你是否知道为什么特别是一行可以填充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,其余的工作正常。那么数据应该没有问题吗?
答案 0 :(得分:0)
我遇到了同样的问题,我认为这是因为它有时候找不到解决方案...尝试“随机”的方法,需要更多的时间,但你会得到一些正常的东西...或试试其他优化方法。
如果您发现了有关问题的信息,请告诉我您的解决方案。
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)