原文链接:http://tecdat.cn/?p=7207

在本文中,我想向您展示如何应用S&P500股票市场指数的交易策略点击文末“阅读原文”获取完整代码数据)。

通过组合ARIMA和GARCH模型,从长期来看,我们可以超过“买入并持有”方法。

策略概述

该策略在“滚动”预测的基础上执行:

  1. 对于每一天,股票指数的对数收益的前_k_天被用作拟合最佳ARIMA和GARCH模型的窗口。 

  2. 组合模型用于对第二天的收益进行预测。

  3. 如果预测为负,则在上一个收盘时做空股票,而如果预测为正,则做多。

  4. 如果预测与前一天的方向相同,则什么都不会改变。

策略实施

第一个任务是在R中安装和导入必要的库:

如果已经安装了库,则可以简单地导入它们:

  1.  
    > library(quantmod)
  2.  
    > library(lattice)
  3.  
    > library(timeSeries)
  4.  
    > library(rugarch)

完成后,将把该策略应用于S&P500。

然后,我们可以创建标准普尔500的“收盘价”的对数收益率差分序列,并去除初始NA值:

根据Akaike信息准则,循环过程将为我们提供“最佳”拟合ARMA模型,然后我们可以将其用于输入GARCH模型:

  1.  
    > final.aic <- Inf
  2.  
    > final.order <- c(0,0,0)
  3.  
    > for (p in 0:5) for (q in 0:5) {
  4.  
    > if ( p == 0 && q == 0) {
  5.  
    > next
  6.  
    > }
  7.  
    >
  8.  
    > arimaFit = tryCatch( arima(spReturnsOffset, order=c(p, 0, q)),
  9.  
    > error=function( err ) FALSE,
  10.  
    > warning=function( err ) FALSE )
  11.  
    >
  12.  
    > if( !is.logical( arimaFit ) ) {
  13.  
    > current.aic <- AIC(arimaFit)
  14.  
    > if (current.aic < final.aic) {
  15.  
    > final.aic <- current.aic
  16.  
    > final.order <- c(p, 0, q)
  17.  
    > final.arima <- arima(spReturnsOffset, order=final.order)
  18.  
    > }
  19.  
    > } else {
  20.  
    > next
  21.  
    > }
  22.  
    > }

如果GARCH模型无法收敛,那么我们只需将日期设置为产生“长期”预测 。

为了准备CSV文件的输出,我创建了一个字符串,其中包含用逗号分隔的数据,并带有第二天的预测方向:

  1.  
    > if(is(fit, “warning”)) {
  2.  
    > forecasts[d+1] = paste(index(spReturnsOffset[windowLength]), 1, sep=”,”)
  3.  
    > print(paste(index(spReturnsOffset[windowLength]), 1, sep=”,”))
  4.  
    > } else {
  5.  
    > fore = ugarchforecast(fit, n.ahead=1)
  6.  
    > ind = fore@forecast$seriesFor
  7.  
    > forecasts[d+1] = paste(colnames(ind), ifelse(ind[1] < 0, -1, 1), sep=”,”)
  8.  
    > print(paste(colnames(ind), ifelse(ind[1] < 0, -1, 1), sep=”,”))
  9.  
    > }
  10.  
    > }

倒数第二步是将CSV文件输出 。

确保在与forecasts.csv文件相同的目录中运行:

forecasts = open("forecasts.csv", "r").readlines()

至此,我们已将更正的指标文件存储在中forecasts_new.csv

策略结果

现在,我们已经生成了指标CSV文件,我们需要将其效果与“买入并持有”进行比较。

我们首先从CSV文件中读取指标并将其存储为spArimaGarch

然后,我们将ARIMA + GARCH预测的日期与S&P500的原始收益集相交。

一旦获得ARIMA + GARCH策略的收益,就可以为ARIMA + GARCH模型和“买入并持有”创建资产曲线。最后,我们将它们合并为一个数据结构:

  1.  
    > spArimaGarchCurve = log( cumprod( 1 + spArimaGarchReturns ) )
  2.  
    > spBuyHoldCurve = log( cumprod( 1 + spIntersect[,2] ) )
  3.  
    > spCombinedCurve = merge( spArimaGarchCurve, spBuyHoldCurve, all=F )

最后,我们可以在同一图上绘制两条收益曲线:

  1.  
    > xyplot(
  2.  
    > spCombinedCurve,
  3.  
    > superpose=T,
  4.  
    > col=c(“darkred”, “darkblue”),
  5.  
    > lwd=2,
  6.  
    > key=list(
  7.  
    > text=list(
  8.  
    > c(“ARIMA+GARCH”, “Buy & Hold”)
  9.  
    > ),
  10.  
    > lines=list(
  11.  
    > lwd=2, col=c(“darkred”, “darkblue”)
  12.  
    > )
  13.  
    > )
  14.  
    > )

资产曲线如下:


点击标题查阅往期内容

R语言动量交易策略分析调整后的数据

uploading.4e448015.gif转存失败重新上传取消

左右滑动查看更多

uploading.4e448015.gif转存失败重新上传取消

01

02

03

04

ARIMA + GARCH策略的股票曲线与S&P500的“买入并持有”

如您所见,在65年的时间里,ARIMA + GARCH策略的表现明显优于“买入并持有”。但是,您还可以看到,大部分收益发生在1970年至1980年之间。

因此,在将此类模型建立之前将其应用于历史序列真的合适吗?另一种选择是开始将模型应用于最新数据。实际上,我们可以考虑一下从2005年1月1日至今的最近十年的表现:

从2005年至今,ARIMA + GARCH策略与S&P500的“买入并持有”股票曲线

现在,我们已经完成了ARIMA和GARCH模型的讨论,我想通过考虑长状态空间模型和协整时间序列来继续进行时间序列分析讨论。

时间序列的这些后续领域将向我们介绍一些模型,这些模型可以改善我们的预测,这将大大提高我们的交易获利能力和/或降低风险。


本文摘选R语言对S&P500股票指数进行ARIMA + GARCH交易策略,点击“阅读原文”获取全文完整资料。


点击标题查阅往期内容

R语言ARMA GARCH COPULA模型拟合股票收益率时间序列和模拟可视化

ARMA-GARCH-COPULA模型和金融时间序列案例

时间序列分析:ARIMA GARCH模型分析股票价格数据

GJR-GARCH和GARCH波动率预测普尔指数时间序列和Mincer Zarnowitz回归、DM检验、JB检验

【视频】时间序列分析:ARIMA-ARCH / GARCH模型分析股票价格

时间序列GARCH模型分析股市波动率

PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化

极值理论 EVT、POT超阈值、GARCH 模型分析股票指数VaR、条件CVaR:多元化投资组合预测风险测度分析

Garch波动率预测的区制转移交易策略

金融时间序列模型ARIMA 和GARCH 在股票市场预测应用

时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格

R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据

R语言GARCH建模常用软件包比较、拟合标准普尔SP 500指数波动率时间序列和预测可视化

Python金融时间序列模型ARIMA 和GARCH 在股票市场预测应用

MATLAB用GARCH模型对股票市场收益率时间序列波动的拟合与预测

R语言GARCH-DCC模型和DCC(MVT)建模估计

Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列

R语言中的时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格

R语言ARIMA-GARCH波动率模型预测股票市场苹果公司日收益率时间序列

Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测

R语言时间序列GARCH模型分析股市波动率

R语言ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测

matlab实现MCMC的马尔可夫转换ARMA – GARCH模型估计

Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测

使用R语言对S&P500股票指数进行ARIMA + GARCH交易策略

R语言用多元ARMA,GARCH ,EWMA, ETS,随机波动率SV模型对金融时间序列数据建模

R语言股票市场指数:ARMA-GARCH模型和对数收益率数据探索性分析

R语言多元Copula GARCH 模型时间序列预测

R语言使用多元AR-GARCH模型衡量市场风险

R语言中的时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格

R语言用Garch模型和回归模型对股票价格分析

GARCH(1,1),MA以及历史模拟法的VaR比较

matlab估计arma garch 条件均值和方差模型

R语言POT超阈值模型和极值理论EVT分析

原文地址:http://www.cnblogs.com/tecdat/p/16848394.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性