R-投资组合优化,NA包含收益系列

问题描述

对于r和im来说,我还很陌生,他们正在努力创建一个最小的方差投资组合,该投资组合由多个(n> 300)资产构成,每年进行重新平衡(每年六月)。 我在第t年将某只股票纳入投资组合的限制是过去60个月的股票收益存在,这是协方差矩阵计算所必需的。

我尝试使用PortfolioAnalytics包中的optimise.portfolio.rebalancing函数和 但以下两个问题仍然困扰着我。

1。由于其长时间序列数据集存在,因此可能会在t年内为公司A产生回报,但对于公司B可能尚未发生回报(return = NA),因为公司B尚未上市或被除名(参见图片)。因此,年度投资组合的构建方式必须灵活,它要在重新平衡日期(6月)上检查6月和所有60个月的过去收益是否可用的条件,如果不是,则将权重0分配给股票,否则请考虑使用它来查找minVariance投资组合权重。

2。如何将Dez的重新平衡日期从我的情况更改为其他月份(六月)?

以下图片试图描述我的问题 enter image description here

require(ROI.plugin.glpk)
require(ROI.plugin.quadprog)
library(PortfolioAnalytics)

#returns is an xts object describing returns of stocks (col:StockID,rows:Month)
returns 
any(is.na(returns)) #returns TRUE 
#needed constraints
port_spec <- portfolio.spec(assets=colnames(returns))
port_spec <- add.constraint(portfolio = port_spec,type = "long_only")
port_spec <- add.constraint(portfolio = port_spec,type = "full_investment")
#objective MinVar
port_spec <- add.objective(portfolio=port_spec,type="risk",name="StdDev")

#optimize portfolio based on past 60month returns,yearly rebalacing  
opt_rebal <- optimize.portfolio.rebalancing(R=returns,portfolio=port_spec,optimize_method ="ROI",rebalance_on = "years",training_period = 60,rolling_window = 60)  
extractWeights(opt_rebal) #results in all weights beeing NA in time periods where 1 asset has return=NA

上面的代码描述了我到目前为止的进展。我怀疑,如果所有股票从t到60个月到t都没有任何NA(否则Cov-Var矩阵包含NA),则optimize.portfolio.rebalacing只会返回不等于NA的权重。在我的数据集中的任何时间点都没有这种情况。
因此,我的问题如下:1.我的假设/理解正确吗? 2.是否有针对此问题的解决方法/解决方案。因此,可以在调用optimize.portfolio.rebalance之前检查资产是否可以考虑进行优化,并在时间t内将优化条件分配给所有资产t的权重没有满足,并且在Cov-Var矩阵的计算中不要进一步考虑它们?

第三,是否可以选择更改默认重新平衡月份/日期。该功能仅用于设置重新平衡的周期,而不能设置时间点。

我将非常感谢任何帮助或解决方案。预先感谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)