原文链接:http://tecdat.cn/?p=7207
在本文中,我想向您展现如何利用S&P500股票市场指数的交易策略。
通过组合ARIMA和GARCH模型,从长期来看,咱们能够超过“买入并持有”办法。
策略概述
该策略在“滚动”预测的根底上执行:
- 对于每一天,股票指数的对数收益的前_k_天被用作拟合最佳ARIMA和GARCH模型的窗口。
- 组合模型用于对第二天的收益进行预测。
- 如果预测为负,则在上一个开盘时做空股票,而如果预测为正,则做多。
- 如果预测与前一天的方向雷同,则什么都不会扭转。
策略施行
第一个工作是在R中装置和导入必要的库:
如果曾经装置了库,则能够简略地导入它们:
> library(quantmod)
> library(lattice)
> library(timeSeries)
> library(rugarch)
实现后,将把该策略利用于S&P500。
而后,咱们能够创立规范普尔500的“收盘价”的对数收益率差分序列,并去除初始NA值:
依据Akaike信息准则,循环过程将为咱们提供“最佳”拟合ARMA模型,而后咱们能够将其用于输出GARCH模型:
> final.aic <- Inf
> final.order <- c(0,0,0)
> for (p in 0:5) for (q in 0:5) {
> if ( p == 0 && q == 0) {
> next
> }
>
> arimaFit = tryCatch( arima(spReturnsOffset, order=c(p, 0, q)),
> error=function( err ) FALSE,
> warning=function( err ) FALSE )
>
> if( !is.logical( arimaFit ) ) {
> current.aic <- AIC(arimaFit)
> if (current.aic < final.aic) {
> final.aic <- current.aic
> final.order <- c(p, 0, q)
> final.arima <- arima(spReturnsOffset, order=final.order)
> }
> } else {
> next
> }
> }
如果GARCH模型无奈收敛,那么咱们只需将日期设置为产生“长期”预测 。
为了筹备CSV文件的输入,我创立了一个字符串,其中蕴含用逗号分隔的数据,并带有第二天的预测方向:
> if(is(fit, "warning")) {
> forecasts[d+1] = paste(index(spReturnsOffset[windowLength]), 1, sep=",")
> print(paste(index(spReturnsOffset[windowLength]), 1, sep=","))
> } else {
> fore = ugarchforecast(fit, n.ahead=1)
> ind = fore@forecast$seriesFor
> forecasts[d+1] = paste(colnames(ind), ifelse(ind[1] < 0, -1, 1), sep=",")
> print(paste(colnames(ind), ifelse(ind[1] < 0, -1, 1), sep=","))
> }
> }
倒数第二步是将CSV文件输入 。
确保在与forecasts.csv
文件雷同的目录中运行:
forecasts = open("forecasts.csv", "r").readlines()
至此,咱们已将更正的指标文件存储在中forecasts_new.csv
。
策略后果
当初,咱们曾经生成了指标CSV文件,咱们须要将其成果与“买入并持有”进行比拟。
咱们首先从CSV文件中读取指标并将其存储为spArimaGarch
:
而后,咱们将ARIMA + GARCH预测的日期与S&P500的原始收益集相交。
一旦取得ARIMA + GARCH策略的收益,就能够为ARIMA + GARCH模型和“买入并持有”创立资产曲线。最初,咱们将它们合并为一个数据结构:
> spArimaGarchCurve = log( cumprod( 1 + spArimaGarchReturns ) )
> spBuyHoldCurve = log( cumprod( 1 + spIntersect[,2] ) )
> spCombinedCurve = merge( spArimaGarchCurve, spBuyHoldCurve, all=F )
最初,咱们能够在同一图上绘制两条收益曲线:
> xyplot(
> spCombinedCurve,
> superpose=T,
> col=c("darkred", "darkblue"),
> lwd=2,
> key=list(
> text=list(
> c("ARIMA+GARCH", "Buy & Hold")
> ),
> lines=list(
> lwd=2, col=c("darkred", "darkblue")
> )
> )
> )
资产曲线如下:
ARIMA + GARCH策略的股票曲线与S&P500的“买入并持有”
如您所见,在65年的工夫里,ARIMA + GARCH策略的体现显著优于“买入并持有”。然而,您还能够看到,大部分收益产生在1970年至1980年之间。
因而,在将此类模型建设之前将其利用于历史序列真的适合吗?另一种抉择是开始将模型利用于最新数据。实际上,咱们能够考虑一下从2005年1月1日至今的最近十年的体现:
从2005年至今,ARIMA + GARCH策略与S&P500的“买入并持有”股票曲线
当初,咱们曾经实现了ARIMA和GARCH模型的探讨,我想通过思考长状态空间模型和协整工夫序列来持续进行工夫序列剖析探讨。
工夫序列的这些后续畛域将向咱们介绍一些模型,这些模型能够改善咱们的预测,这将大大提高咱们的交易获利能力和/或升高危险。
参考文献
1.HAR-RV-J与递归神经网络(RNN)混合模型预测和交易大型股票指数的高频稳定率
2.R语言中基于混合数据抽样(MIDAS)回归的HAR-RV模型预测GDP增长
3.稳定率的实现:ARCH模型与HAR-RV模型
4.R语言ARMA-EGARCH模型、集成预测算法对SPX理论稳定率进行预测
5.GARCH(1,1),MA以及历史模拟法的VaR比拟
6.R语言多元COPULA GARCH 模型工夫序列预测
7.R语言基于ARMA-GARCH过程的VAR拟合和预测
8.matlab预测ARMA-GARCH 条件均值和方差模型
9.R语言对S&P500股票指数进行ARIMA + GARCH交易策略
发表回复