2016-01-06 218 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'來訪問。但是,您應該驗證這是您尋找的意思。 –