首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R/optimize.portfolio {PortfolioAnalytics}仅给出NA权重

R/optimize.portfolio {PortfolioAnalytics}仅给出NA权重
EN

Stack Overflow用户
提问于 2017-09-18 21:42:00
回答 1查看 1.1K关注 0票数 0

我有一个问题,想不出一个合理的答案。我希望有人能帮助我!首先要感谢大家!

我正在做一个投资组合优化,用滚动窗口的方法最大化夏普比率。然后,我将把投资组合权重写在一个新的矩阵中。

有了几个数据集,一切都运行得很好。尽管有另外两个数据集,但出现了一个问题:两行或三行仅获得NA权重。

数据应该不会有问题,因为只有很少的NAs。此外,投资组合估计的一行回报不会有问题,因为在滚动窗口方法中,每行回报都会被多次使用。您可能知道为什么特定的一行可能会被Nas填充?

非常感谢,并致以最良好的问候,

塞巴斯蒂安

代码语言:javascript
复制
# 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,其余的工作都很好。所以数据不应该有问题?

EN

回答 1

Stack Overflow用户

发布于 2018-03-15 02:10:16

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

如果你发现你的问题,请给我你的解决方案。

代码语言:javascript
复制
max_sharpe_opt <- optimize.portfolio(R=returns[(n-M):(n-1),],portfolio=sharpe.portf, 
                                       optimize_method='random',maxSR=TRUE, message=TRUE)

代码语言:javascript
复制
max_sharpe_opt <- optimize.portfolio(R=returns[(n-M):(n-1),],portfolio=sharpe.portf, 
                                       optimize_method='GenSA',maxSR=TRUE, message=TRUE)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46280824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档