原文链接: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")> )> )> )
资产曲线如下:
点击题目查阅往期内容
R语言动量交易策略剖析调整后的数据
左右滑动查看更多
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剖析