关于数据挖掘:R语言时间序列ARIMA-GARCH模型的交易策略在外汇市场预测应用

9次阅读

共计 4324 个字符,预计需要花费 11 分钟才能阅读完成。

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

原文出处:拓端数据部落公众号

最近,咱们持续对工夫序列建模进行摸索,钻研工夫序列模型的自回归和条件异方差族。咱们想理解 自回归挪动平均值 (ARIMA)和 狭义自回归条件异方差(GARCH)模型。它们在量化金融文献中常常被援用。

接下来是我对这些模型的了解,基于拟合模型的预测的个别拟合程序和简略交易策略的摘要。

这些工夫序列分析模型是什么?

拟合 ARIMA 和 GARCH 模型是一种发现工夫序列中的观测值,噪声和方差影响工夫序列的形式。适当地拟合的这种模型将具备肯定的预测效用,当然前提是该模型在未来的一段时间内仍非常适合根底过程。

ARMA

ARMA 模型是自回归(AR)模型和挪动均匀(MA)模型的线性组合。AR 模型其预测变量是该序列的先前值。MA 模型在结构上相似于 AR 模型,除了预测变量是噪声项。p,q 阶的自回归挪动均匀模型– ARMA(p,q)–是两者的线性组合,能够定义为:

其中 w 是白噪声,而 a 和 b 是模型的系数。

ARIMA(p,d,q)模型是 ARMA(p,q)模型,它们的差值是 d 倍 - 或积分(I)- 以产生安稳序列。

GARCH

最初,GARCH 模型还试图阐明工夫序列的异方差行为(即,波动性聚类的特色)以及该序列先前值的序列影响(由 AR 解释)和噪声项(由 MA 解释)。GARCH 模型应用方差自身的自回归过程,也就是说,它应用方差的历史值来阐明方差随工夫的变动。

那么咱们如何利用这些模型?

有了这种背景,我接下来将 ARIMA / GARCH 模型拟合到 EUR / USD 汇率,并将其用作交易系统的根底。应用拟合程序估算每天的模型参数,而后应用该模型预测第二天的收益,并相应放弃一个交易日。

在每个交易日完结时,会应用滚动返回窗口来拟合最佳 ARIMA / GARCH 模型。拟合过程基于对参数的搜寻,以最小化 Aikake 信息准则,然而也能够应用其余办法。例如,咱们能够抉择最小化贝叶斯信息准则的参数,这能够通过惩办简单模型(即具备大量参数的模型)来缩小适度拟合。

我抉择应用 1000 天的滚动窗口来拟合模型,但这是优化的参数。有一种状况是在滚动窗口中应用尽可能多的数据,但这可能无奈足够快地捕捉一直变动的模型参数以适应一直变动的市场。

这是代码:

### ARIMA / GARCH 交易模型



#获取数据并初始化对象以保留预测

EURUSD <- read.csv('EURUSD.csv', header = T)



returns <- diff(log(EURUSD$C)) ## ROC 也能够应用:默认状况下计算对数 





#遍历每个交易日,从滚动窗口中预计最佳模型参数

#并预测第二天的收益

for (i in 0:forecasts.length) {roll.returns <- returns\[(1+i):(window.length + i)\] #创立滚动窗口





  # 预计最佳 ARIMA 模型

  for (p in 0:5) for (q in 0:5) { #将可能的阶限度为 p,q <= 5

    if (p == 0 && q == 0) next #将可能的阶限度为 p,q <= 5





      current.aic <- AIC(arimaFit)

      if (current.aic < final.aic) { #如果 AIC 升高则保留阶数

        final.aic <- current.aic

        final.order <- c(p,0,q)

        final.arima <- arima(roll.returns, order = final.order)

      }

    }

    else next

  }

  # 指定并拟合 GARCH 模型

  spec = ugarchspec(



  # 指定并拟合 GARCH 模型

  # 模型并不总是收敛 - 在这种状况下,将 0 值调配给预测值和 p.val

  if (is(fit, "warning")) {forecasts\[i+1\] <- 0

 



    directions\[i+1\] <- ifelse(x\[1\] > 0, 1, -1) #仅定向预测

    forecasts\[i+1\] <- x\[1\] # 预测的理论值

    print(forecasts\[i\])

    # 残差剖析

    resid <- as.numeric(residuals(fit, standardize = TRUE))





}





forecasts.ts <- xts(forecasts, dates\[(window.length):length(returns)\])

# 创立滞后的序列预测





ag.direction <- ifelse(ag.forecasts > 0, 1, ifelse(ag.forecasts < 0, -1, 0))

# 创立滞后的序列预测

ag.direction.returns <- ag.direction * returns\[(window.length):length(returns)\]

ag.direction.returns\[1\] <- 0 # remove NA

# 创立 ARIMA / GARCH 买入持有的回测

ag.curve <- cumsum(ag.direction.returns)









# 绘制两条曲线:策略收益和累积收益





plot(x = both.curves\[,"Strategy returns"\], xl

首先,仅是方向性预测:在预测正收益时购买,在预测负收益时发售。这种办法的后果如下所示(不蕴含交易费用):在下面的模型拟合过程中,我保留了理论的预测收益值以及预测收益的方向。我想钻研预测返回值的大小的预测能力。具体来说,当预测回报的幅度低于某个阈值时进行过滤交易会改善策略的性能吗?上面的代码以较小的返回阈值执行此剖析。为简略起见,我将预测对数收益率转换为简略收益率,以便可能管制预测的信号并易于实现。

# 仅在预测超过阈值幅度时测试进入交易

simp.forecasts <- exp(ag.forecasts) - 1





ag.threshold.returns\[1\] <- 0 # 删除缺失

ag.threshold.curve <- cumsum(ag.threshold.returns))





# 绘制两条曲线:策略收益和累积收益

plot(x = both.curves\[,"Strategy returns"\], xlab = "Time", y

 后果笼罩了原始策略:在我看来,咱们拟合某段时间的 ARIMA / GARCH 模型可能比其余工夫更好或更糟地示意了根底过程。当咱们对模型不足信念时,过滤交易可能会改善性能。这种办法要求评估每天模型拟合的统计显着性,并且仅在显着性超过特定阈值时才输出交易。有许多办法能够实现这一点。首先,咱们能够查看模型残差的相干图,并在此基础上判断拟合优度。现实状况下,残差的相干图相似于白噪声过程,没有序列相关性。残差的相干图能够在 R 中结构如下:


 

acf(fit@fit$residuals, main = 'ACF of Model Residuals')

只管此相干图表明模型拟合良好,但显然它不是一种很好的办法,因为它依赖于主观判断,更不用说人类有能力审查每天的模型。更好的办法是查看 Ljung-Box 统计量是否适宜模型拟合。Ljung-Box 是用于评估拟合模型残差的自相干是否与零显着不同的假设检验。在该测验中,零假如是残差的自相干为零;另一种是咱们的工夫序列剖析具备序列相关性。否定空值并确认代替值将意味着该模型不是很好的拟合,因为残差中存在无法解释的构造。Ljung-Box 统计量在 R 中的计算形式如下:

Box-Ljung test

data: resid

X-squared = 23.099, df = 20, p-value = 0.284

在这种状况下,p 值能够证实残差是独立的,并且该特定模型十分适合。作为解释,为了减少残差的自相干,Ljung-Box 测试统计量(在下面的代码输入中为 X 平方)变得更大。p 值是在原假如下取得大于或大于测验统计量的值的概率。因而,在这种状况下,高 p 值是残差独立性的证据。

将 Ljung-Box 测验利用于每天的模型拟合可发现很少几天独立残差的零假如被回绝,因而将策略扩大为过滤模型拟合不太可能减少太多价值:

工夫序列剖析论断和将来工作

在回溯测试期间,ARIMA / GARCH 策略的体现优于欧元 / 美元汇率的买入和持有策略,然而,该体现并不杰出。仿佛能够通过过滤诸如预测幅度和模型拟合优度之类的特色来进步策略的性能,只管后者在此特定示例中并没有减少太多价值。另一个过滤选项是为每天的预测计算 95%的置信区间,并且仅在每个信号雷同时才输出交易,只管这会大大减少理论进行的交易数量。

GARCH 模型还有许多其余品种,例如指数,积分,二次,阈值和转换等。与本示例中应用的简略 GARCH(1,1)模型相比,这些办法可能会或可能不会更好地示意根底过程。

我最近发现十分乏味的一个钻研畛域是通过不同模型的智能组合对工夫序列进行预测。例如,通过取几个模型的单个预测的平均值,或对预测的信号进行少数表决。要借用一些机器学习的术语,这种“汇合”模型通常会比任何组合模型产生更精确的预测。兴许有用的办法是应用通过适当训练的人工神经网络或其余统计学习办法来对此处提出的 ARIMA / GARCH 模型进行预测。兴许咱们能够冀望 ARIMA / GARCH 模型可能捕捉工夫序列的任何线性特色,而神经网络可能非常适合非线性特色。

如果您有任何想法能够改善工夫序列分析模型的预测准确性,欢送在下方评论或分割咱们。
 


最受欢迎的见解

1.HAR-RV- J 与递归神经网络(RNN)混合模型预测和交易大型股票指数的高频稳定率

2.R 语言中基于混合数据抽样 (MIDAS) 回归的 HAR-RV 模型预测 GDP 增长回归的 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 交易策略

正文完
 0