2016-01-06 217 views
3

我有一个关于R中投资组合优化的问题。我对R非常陌生,试图研究并查看答案,但我不确定它是否正确。我希望有人能帮助我。在R中使用协方差矩阵进行投资组合优化

我已经从使用计量经济模型的资产建模中获得了协方差矩阵(在这里,我使用DCC GARCH来模拟我的资产收益)。在做了预测之后,我会得到协方差矩阵。那么,现在,我如何使用这个协方差矩阵来使用fPortfolio包进行投资组合优化呢?我发现的大多数例子都只使用资产回报来做投资组合优化。但是如果我们使用资产收益率的预测均值和方差 - 协方差来创建最优资产配置模型,那么情况如何呢?

我有以下可重现的代码。

library(zoo) 
library(rugarch) 
library(rmgarch) 
data("EuStockMarkets") 
EuStockLevel <- as.zoo(EuStockMarkets)[,c("DAX","CAC","FTSE")] 
EuStockRet <- diff(log(EuStockLevel)) 

## GARCH-DCC 
    uspec = ugarchspec(mean.model = list(armaOrder = c(0,0)), variance.model = list(garchOrder = c(1,1), model = "sGARCH"), distribution.model = "norm") 
    spec1 = dccspec(uspec = multispec(replicate(3, uspec)), dccOrder = c(1,1), distribution = "mvnorm") 
    fit1 = dccfit(spec1, data = EuStockRet, fit.control = list(eval.se=T)) 

#Forecasting 
    dcc.focast=dccforecast(fit1, n.ahead = 1, n.roll = 0) 
    print(dcc.focast) 


    covmat.focast = rcov(dcc.focast) 
    covmat = covmat.focast$`1975-02-03`[,,1] ##The Covariance matrix 

      DAX   CAC   FTSE 
DAX 0.0002332114 0.0001624446 0.0001321865 
CAC 0.0001624446 0.0001799988 0.0001139339 
FTSE 0.0001321865 0.0001139339 0.0001372812 

所以现在我想应用我为组合优化获得的协方差。

##Optimization (Use the forecasted variance covariance matrix!!!) 
##You must convert your dataset into "timeSeries" object for R to be able to read it in fportfolio. 

library(fPortfolio) 
##To compute efficient portfolio 
    All.Data <- as.timeSeries(100* EuStockRet) 

##Equal weight portfolio 
    ewPortfolio <- feasiblePortfolio(data = All.Data,spec = ewSpec,constraints = "LongOnly") 
    print(ewPortfolio) 

##Minimum risk efficient portfolio 
    minriskSpec <- portfolioSpec() 
    targetReturn <- getTargetReturn([email protected])["mean"] 
    setTargetReturn(minriskSpec) <- targetReturn 

#Now, we optimize the portfolio for the specified target return :- 
    minriskPortfolio <- efficientPortfolio(data = All.Data,spec = minriskSpec,constraints = "LongOnly") 
    print(minriskPortfolio) 

那么,我们实际上在哪里输入协方差矩阵呢?我所做的是正确的?感谢有人能帮助我。

谢谢!

回答

1

而是采用套餐动物园,rugarch,rmgarch功能单独创建的协方差矩阵的,你可以通过你的EuroStockRet对象作为timeseriesfPortfolio功能fPortfolio::covEstimator(见?covEstimator),接受一个timeseries对象,并返回一个对象。数据参数的格式为feasiblePortfolio。例如:

EuStockRet_with_cov <- covEstimator(x=EuStockRet); 
ewPortfolio <- feasiblePortfolio(data = EuStockRet_with_cov, spec = ewSpec, constraints = "LongOnly"); 

fPortfiolio还可以计算协方差的各种其他方式。他们详见第37页:fPortfolio Package

+0

谢谢!我已经设法通过创建函数将协方差矩阵输入到优化代码中。即 covtEstimator < - function(x,spec = NULL,...){x.mat = as.matrix(x) list(mu = er,Sigma = covmat)}。顺便说一下,我们如何预测拟合模型的平均值? – NSAA

+0

我使用了函数拟合(dcc.focast)。这样对吗? – NSAA

+0

我不确定,但看看'fPortfolio'软件包PDF的第19页。它将'targetMean'作为S4对象的'@ portfolio'插槽中的变量进行讨论。因此,您可以将其作为'ewPortfolio @ portfolio $ targetMean'来访问。但是,您应该验证这是您寻找的意思。 –