Использование ковариационной матрицы для оптимизации портфеля в 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(ewPortfolio@portfolio)["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 ответ:
Вместо того, чтобы использовать функции в пакетах zoo, rugarch, rmgarch для создания ковариационной матрицы отдельно, вы можете передать свой объект
EuroStockRetкакtimeseriesв функциюfPortfoliofPortfolio::covEstimator(см.?covEstimator), которая принимает объектtimeseriesи возвращает объект в формате аргумента данных, ожидаемомfeasiblePortfolio. Что-то вроде:EuStockRet_with_cov <- covEstimator(x=EuStockRet); ewPortfolio <- feasiblePortfolio(data = EuStockRet_with_cov, spec = ewSpec, constraints = "LongOnly");Существуют также различные другие пути, которые
fPortfiolioмогут вычислять ковариации. Они подробно описаны на странице 37: пакет fPortfolio
Comments