关于算法:Python-用ARIMAGARCH模型预测分析股票市场收益率时间序列

1次阅读

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

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

前言

在量化金融中,我学习了各种工夫序列剖析技术以及如何应用它们。

通过倒退咱们的工夫序列剖析 (TSA) 办法组合,咱们可能更好地理解曾经产生的事件,_并对_将来做出更好、更无利的预测。示例利用包含预测将来资产收益、将来相关性 / 协方差和将来波动性。

在咱们开始之前,让咱们导入咱们的 Python 库。

import pandas as pd
import numpy as np

让咱们应用 pandas 包通过 API 获取一些示例数据。

# 原始调整后的收盘价
daa = pdDatrme({sx(sm)for sm i syos})
# 对数收益率
ls = log(dta/dat.sit(1)).dropa()

基础知识

什么是工夫序列?

工夫序列是按工夫顺序索引的一系列数据点。——Wikipedia

平稳性

为什么咱们关怀平稳性? 

  • 安稳工夫序列 (TS) 很容易预测,因为咱们能够假如将来的统计属性与以后的统计属性雷同或成比例。
  • 咱们在 TSA 中应用的大多数模型都假如 协方差安稳 。这意味着 这些模型预测的描述性统计数据(例如均值、方差和相关性)仅在 TS 安稳时才牢靠,否则有效。

“例如,如果序列随着工夫的推移一直减少,样本均值和方差会随着样本规模的减少而增长,并且他们总是会低估将来期间的均值和方差。如果一个序列的均值和方差是没有明确定义,那么它与其余变量的相关性也不是。”

话虽如此,咱们在金融中遇到的大多数 TS 都不是安稳的。因而,TSA 的很大一部分波及辨认咱们想要预测的序列是否是安稳的,如果不是,咱们必须找到办法将其转换为安稳的。(稍后会具体介绍)

自相干

实质上,当咱们对工夫序列建模时,咱们将序列合成为三个局部:趋势、季节性 / 周期性和随机。随机重量称为残差或误差。它只是咱们的预测值和察看值之间的差别。序列相干是指咱们的 TS 模型的残差(误差)彼此相干。

为什么咱们关怀序列相关性?

咱们关怀序列相关性,因为它对咱们模型预测的有效性至关重要,并且与平稳性有着外在的分割。回忆一下,依据定义,_安稳_TS 的残差(误差)是间断_不相干_的!如果咱们在咱们的模型中没有思考到这一点,咱们系数的标准误差就会被低估,从而夸张了咱们的 T 统计量。后果是太多的 1 类谬误,即便原假如为真,咱们也会回绝原假如!艰深地说,疏忽自相干意味着咱们的模型预测将是胡言乱语,咱们可能会得出对于模型中自变量影响的谬误论断。 

白噪声和随机游走

白噪声是咱们须要理解的第一个工夫序列模型(TSM)。依据定义,作为白噪声过程的工夫序列具备间断不相干的误差,这些误差的预期平均值等于零。对间断不相干的误差的另一种形容是,独立和雷同散布(i.i.d.)。这一点很重要,因为如果咱们的 TSM 是适合的,并且胜利地捕获了根本过程,咱们模型的残差将是 i.i.d.,相似于白噪声过程。因而,TSA 的一部分实际上是试图将一个模型适宜于工夫序列,从而使残差序列与白噪声无奈辨别。

让咱们模仿一个白噪声过程并查看它。上面我介绍一个不便的函数,用于绘制工夫序列和直观地剖析序列相关性。

咱们能够轻松地对白噪声过程进行建模并输入 TS 图查看。

np.random.seed(1)

# 绘制离散白噪声的曲线

ads = radooral(size=1000)
plot(ads, lags=30)

高斯白噪声

咱们能够看到该过程仿佛是随机的并且以零为核心。自相干 (ACF) 和偏自相干 (PACF) 图也表明没有显着的序列相干。请记住,咱们应该在自相干图中看到大概 5% 的显着性,这是因为从正态分布采样的纯必然性。上面咱们能够看到 QQ 和概率图,它们将咱们的数据分布与另一个实践散布进行了比拟。在这种状况下,该实践散布是规范正态分布。显然,咱们的数据是随机散布的,并且应该遵循高斯(失常)白噪声。

p("nmean: {:.3f}\\{:.3f}\\stde: {:.3f}"
.format(ademean(), nerva(), der.td()))

随机游走的意义在于它 是非安稳的,因为观测值之间的协方差是工夫相干的。如果咱们建模的 TS 是随机游走,则它是不可预测的。

让咱们应用“random”函数从规范正态分布中采样来模仿随机游走。

# 没有漂移的随机行走

np.rao.sed(1)
n = 1000

x = w = np.aonral(size=n)
for t in rnge(_sples):
    x\[t\] = x\[t-1\] + w\[t\]
splt(x, las=30)

无漂移的随机行走

显然,咱们的 TS 不是安稳的。让咱们看看随机游走模型是否适宜咱们的模仿数据。回忆一下随机游走是 xt = xt-1 + wt。应用代数咱们能够说xt – xt-1 = wt。因而,咱们随机游走系列的第一个差别应该等于白噪声过程,咱们能够在咱们的 TS 上应用“np.diff()” 函数,看看这是否成立。

# 模仿的随机游走的第一个差值

plt(p.dffx), las=30)

随机行走的一阶差分

咱们的定义成立,因为这看起来与白噪声过程齐全一样。如果咱们对 SPY 价格的一阶差分进行随机游走会怎么样?

# SPY 价格的一阶差分
plt(diff(dt.PY), lag=30)

将随机行走模型拟合到 ETF 价格

它与白噪声十分类似。然而,请留神 QQ 和概率图的形态。这表明该过程靠近正态分布,但具备“重尾”。ACF 和 PACF 在滞后 1、5?、16?、18 和 21 左近仿佛也存在一些显着的序列相关性。这意味着应该有更好的模型来形容理论的价格变动过程。

线性模型

线性模型又称趋势模型,代表了一个能够用直线作图的 TS。其根本方程为。

在这个模型中,因变量的值由 β 系数和一个繁多的自变量 – 工夫决定。一个例子是,一家公司的销售额在每个时间段都会减少雷同的数量。让咱们来看看上面的一个特制的例子。在这个模仿中,咱们假如动摇的 ABC 公司在每个时间段的销售额为 -50.00 元(β0 或截距项)和 +25.00 元(β1)。

# 模仿线性趋势
# 例子 公司 ABC 的销售额默认为 -50 元,在每个工夫步长为 +25 元
w = n.anom.ann(100)
y = nppt_lke(w)

b0 = -50.
b1 = 25.
for t in rge(lnw)):
    y\[t\] = b0 + b1*t + w\[t\]
    
 plt(y, lags=ls)

线性趋势模型模拟

在这里咱们能够看到模型的残差是相干的,并且作为滞后的函数线性缩小。散布近似正态。在应用此模型进行预测之前,咱们必须思考并打消序列中存在的显著自相干。PACF 在滞后 1 处的显着性表明_自回归_ 模型可能是适合的。

对数线性模型

这些模型与线性模型相似,只是数据点造成了一个指数函数,代表了绝对于每个工夫步的恒定变化率。例如,ABC 公司的销售额在每个工夫步长减少 X%。当绘制模仿的销售数据时,你会失去一条看起来像这样的曲线。

 

# 模仿 ABC 的指数式增长

# 日期
pdat_rge('2007-01-01', '2012-01-01', freq='M')

# 假如销售额以指数速度增长
ale = \[exp( x/12) for x inage1, len(id)+1)\]

# 创立数据框架并绘图
df = d.ataame(sals, ix=x)
plt()

模仿指数函数

而后咱们能够通过采纳销售额的自然对数来转换数据。当初线性回归拟合数据。

# ABC 对数销售 
indexid.plot()

指数函数的自然对数

如前所述,这些模型有一个致命的弱点。它们假如间断不相干的误差,正如咱们在线性模型的例子中看到的那样。在现实生活中,TS 数据通常会违反咱们的安稳假如,这使咱们转向自回归模型。

自回归模型 – AR(p)

当因变量针对本身的一个或多个滞后值进行回归时,该模型称为自回归模型。公式如下所示:

AR (P) 模型

当您形容 模型的 “阶” 时,例如阶 “p” 的 AR 模型 p 示意模型中应用的滞后变量的数量。例如,AR(2) 模型或_二阶_自回归模型如下所示:

AR (2) 模型

这里,alpha (a) 是系数,omega (w) 是白噪声项。在 AR 模型中,Alpha 不能等于 0。请留神,alpha 设置为 1 的 AR(1) 模型是_随机游走_,因而不是安稳的。

AR(1) 模型,ALPHA = 1;随机散步

让咱们模仿一个 alpha 设置为 0.6 的 AR(1) 模型

# 模仿一个 α =0.6 的 AR(1)过程

rndm.sed(1)
n_sams = int(1000)
a = 0.6
x = w = n.amma(siz=_apes)

for t in rane(n_saps):
    x\[t\] = a*x\[t-1\] + w\[t\]
    
plot(x, gs=lgs)

AR(1) 模型,ALPHA = 0.6

正如预期的那样,咱们模仿的 AR(1) 模型的散布是失常的。滞后值之间存在显着的序列相关性,尤其是在滞后 1 处,如 PACF 图所示。

当初咱们能够应用 Python 的 statsmodels 拟合 AR(p) 模型。首先,咱们将 AR 模型拟合到咱们的模仿数据并收益预计的 alpha 系数。而后咱们应用 statsmodels 函数 “order()” 来查看拟合模型是否会抉择正确的滞后。如果 AR 模型是正确的,预计的 alpha 系数将靠近咱们的实在 alpha 0.6,所选阶数等于 1。

# 拟合 AR(p)模型到模仿的 AR(1)模型,alpa=0.6

md = AR(x).itm=30, ic='aic', trnd='nc')
%time st_oer = mt.R(x).stor(mxag=30, ic='aic', trnd='nc')

tuerer = 1

看起来咱们可能复原模仿数据的根底参数。让咱们用 alpha\_1 = 0.666 和 alpha\_2 = -0.333 来模仿 AR(2) 过程。为此,咱们应用 statsmodel 的 “generate_samples()” 函数。该函数容许咱们模仿任意阶数的 AR 模型。

# 模仿一个 AR(2)过程


n = int(1000)


# Python 要求咱们指定零滞后值,即为 1
# 还要留神,AR 模型的字母必须是否定的
# 对于 AR(p)模型,咱们也将 MA 的 betas 设置为 0
ar = nr_\[1, -ahas\]
ma = npr_\[1, beas\]
ar2 = smt.arme_pe(ar=ar, ma=a, nsale=n) 
plot(ar2, lags=lags)

AR(2) 模仿 ALPHA\_1 = 0.666 和 ALPHA\_2 = -0.333

让咱们看看是否能够复原正确的参数。

# 拟合 AR(p)模型来模仿 AR(2)过程


max_lag = 10
est_rer = st.AR(r2)sennc')

tu_rder = 2

让咱们看看 AR(p) 模型将如何拟合 MSFT 对数收益。这是收益 TS。

MSFT 对数收益工夫序列

# 抉择 MSFT 收益的最佳滞后阶数


max_ag = 30
ml = smt.AR(ls.MSFT).fit(mam_lg, c='aic', tnc)
es_rr = tAR(rts.FT).secter(maag=malag ic=aic', re=nc')
p('最佳预计滞后阶数 = {}'.format(etoer))

最好的阶数是 23 个滞后或 23!任何具备这么多参数的模型在实践中都不太可能有用。显然,收益过程背地的复杂性比这个模型所能解释的要简单得多。

挪动均匀模型 – MA(q)

MA(q) 模型与 AR(p) 模型十分类似。不同之处在于 MA(q) 模型是过来白噪声误差项的线性组合,而不是像 AR(p) 模型这样的过来察看的线性组合。MA 模型的目标是咱们能够通过将模型拟合到误差项来间接察看误差过程中的“冲击”。在 AR(p) 模型中,通过应用 ACF 对过来的一系列察看后果间接察看到这些冲击。MA(q) 模型的公式是:

Omega (w) 是 E(wt) = 0 且方差为 sigma 平方的白噪声。让咱们应用 beta=0.6 并指定 AR(p) alpha 等于 0 来模仿这个过程。

# 模仿一个 MA(1)过程


n = int(1000)

# 设置 AR(p)的 alphas 等于 0
alpas = npray(\[0.\])
beas = np.ra(\[0.6\])

# 增加零滞后
ar = np_\[1, -alph\]
ma = np_\[1, beta\]
a1 = st.m_gerse(ar=ar, ma=a, naple=n) 
plot(ma1, lags=30)

BETA=0.6 的模仿 MA(1) 过程

ACF 函数显示滞后 1 很重要,这表明 MA(1) 模型可能实用于咱们的模仿序列。当 ACF 仅在滞后 1 处显示显着性时,我不确定如何解释在滞后 2、3 和 4 处显示显着性的 PACF。咱们当初能够尝试将 MA(1) 模型拟合到咱们的模仿数据中。咱们能够应用 “ARMA()”函数来指定咱们抉择的阶数。咱们调用它的“fit()” 办法来返回模型输入。

# 将 MA(1)模型与咱们模仿的工夫序列相匹配
# 指定 ARMA 模型,阶数为(p,q)。maxlag = 30
st.RMa1, orer=(0,1)).fit
    maag=maxg, ethod='e', tren='nc')

MA(1) 模型概要

该模型可能正确预计滞后系数,因为 0.58 靠近咱们的实在值 0.6。另请留神,咱们的 95% 置信区间的确蕴含实在值。让咱们尝试模仿 MA(3) 过程,而后应用咱们的 ARMA 函数将三阶 MA 模型拟合到系列中,看看咱们是否能够复原正确的滞后系数(β)。Beta 1-3 别离等于 0.6、0.4 和 0.2。

# 模仿 MA(3)过程,beta 为 0.6, 0.4, 0.2


n = nt(100)
ar = nr_\[1, -ahas\]
ma = np.r_\[1, betas\]

m3 = genrae_sle(ar=ar, ma=ma, sple=n)
plot(ma3, las=30)

BETAS = [0.6, 0.4, 0.2] 的模仿 MA(3) 过程

# 将 MA(3)模型拟合模仿的工夫序列


maxlg = 30
ARMA(ma3, order=(0, 3)).fit(xla=mx_ag, mehd='le',tred=nc').summary

MA(3) 模型总结

该模型可能无效地预计理论系数。咱们的 95% 置信区间还蕴含 0.6、0.4 和 0.3 的实在参数值。当初让咱们尝试将 MA(3) 模型拟合到 SPY 的对数收益。请记住,咱们不晓得_真正的_参数值。

# 将 MA(3)与 SPY 收益拟合


x_ag = 30
Y = lrsSY
ARMA(Y, ordr=(0, 3)).it(mlg=m_lg, thd'le', rndn'.summry())
plot(md.rsd lgs=m_lg)

SPY MA (3) 模型总结

让咱们看看模型残差。

不错。一些 ACF 滞后有点问题,尤其是在 5、16 和 18 处。这可能是采样谬误,但再加上重尾,我认为这不是预测将来 SPY 收益的最佳模型。

自回归挪动均匀模型 – ARMA(p, q)

ARMA 模型只是 AR(p) 和 MA(q) 模型之间的合并。让咱们从量化金融的角度回顾一下这些模型对咱们的意义:

  • AR(p) 模型试图捕获_(解释)_交易市场中常常察看到的动量和均值回归效应。
  • MA(q) 模型试图捕获_(解释)_在白噪声项中察看到的冲击效应。这些冲击效应能够被认为是影响察看过程的意外事件,例如意外收益、恐怖袭击等。

“对于杂货店中的一组产品,在不同工夫推出的无效优惠券流动的数量将形成多重‘冲击’,从而影响相干产品的价格。”

– AM207: Pavlos Protopapas, Harvard University

ARMA 的弱点在于它疏忽了在大多数金融工夫序列中发现的_波动性聚类_效应。

模型公式为:

ARMA(P, Q) 方程

让咱们用给定的参数模仿一个 ARMA(2, 2) 过程,而后拟合一个 ARMA(2, 2) 模型,看看它是否能够正确预计这些参数。设置 alpha 等于 [0.5,-0.25] 和 beta 等于 [0.5,-0.3]。

# 模仿一个 ARMA(2, 2)模型,alphas=\[0.5,-0.25\],betas=\[0.5,-0.3\] 
max_lag = 30

n = int(5000) #大量的样本来帮忙估算
burn = int(n/10) #拟合前要抛弃的样本数

ar = np.r_\[1, -alphas\]
ma = np.r_\[1, betas\]

aa22 = aample(ar=ar, ma=ma,samle=n)
plt(rm2, lagsxla)

ARMA(arma22, order=(2, 2)).fit(maxag=ma_lag, mtd='mle', ted='nc', brnn=brn).summry()

模仿 ARMA(2, 2) 过程

ARMA(2, 2) 模型总结

咱们的实在参数蕴含在 95% 的置信区间内。

接下来咱们模仿一个 ARMA(3, 2) 模型。之后,咱们循环应用 p、q 的组合,以将 ARMA 模型拟合到咱们的模仿序列中。咱们依据哪个模型产生最低值来抉择最佳组合 Akaike Information Criterion (AIC)”).

# 模仿一个 ARMA(3, 2)模型,alphas=\[0.5,-0.25,0.4\],betas=\[0.5,-0.3\]。maxg = 30

n = int(5000)
burn = 2000

alpas = nparay(\[0.5, -0.25, 0.4\])
bets = np.ra(\[0.5, -0.3\])

ar = np.r_\[1, -alas\]
ma = np.r_\[1, betas\]

arma32 = armasamp(ar=ar, ma=ma, nsple=n, rin=burn)
plot(ara32, lgs=mxlg)
# 通过 AIC 抉择最佳阶数 
# 最小的 AIC 值最优


for i in rn:
    for j in rn:
        try:
            tmpl = ARMA(arma32, orde=(i, j)).fit(meod='mle', tend='nc')
            aic = tp_ml.ac
            if tmpaic < bstaic:
                bst\_ic = mp\_aic
                bestrder = (i, j)
                bes_mdl = tmpdl
        excpt: ctinue

下面复原了正确的阶数。上面咱们看到了在任何模型拟合之前模仿工夫序列的输入。

模仿 ARMA(3, 2) 系列,其中 Alpha = [0.5,-0.25,0.4] 和 BETAS = [0.5,-0.3]

ARMA(3, 2) 最佳模型总结

咱们看到抉择了正确的阶数并且模型正确地预计了咱们的参数。然而请留神 MA.L1.y 系数;0.5 的实在值简直在 95% 的置信区间之外!

上面咱们察看模型的残差。显然这是一个白噪声过程,因而最好的模型曾经被拟合来_解释_ 数据。

ARMA(3, 2) 最佳模型残差白噪声

接下来,咱们将 ARMA 模型拟合到 SPY 收益。下图是模型拟合前的工夫序列。

SPY 收益率

# 将 ARMA 模型与 SPY 收益率拟合



rng = rng(5) # \[0,1,2,3,4,5\]
for i in rng:
    for j in rng:
        try:
            tmp_mdl = ARMA('SPY', oder=(i, j))fit
            tmp\_ic = tp\_dl.aic
            if tp\_ic < bes\_aic:
                bs\_aic = mp\_aic
                es_der = (i j)
                bst\_mdl = t\_mdl
        exet: cntnue

咱们绘制模型残差。

SPY 最佳模型残差 ARMA(4, 4)

ACF 和 PACF 没有显示出显着的自相干。QQ 和概率图显示残差近似正态并带有重尾。然而,这个模型的残差看起来不像白噪声,能够看到模型未捕捉的显著条件异方差(_条件波动性_)的突出显示区域。

自回归综合挪动均匀模型 – ARIMA(p, d, q)

ARIMA 是 ARMA 模型类别的天然延长。如前所述,咱们的许多 TS 并不是安稳的,然而它们能够通过差分而成为安稳的。咱们看到了一个例子,当咱们采取 Guassian 随机游走的第一次差分,并证实它等于白噪声。换句话说,咱们采取了非安稳的随机行走,并通过第一次差分将其转变为安稳的白噪声。

不必太深刻地钻研这个方程,只有晓得 “d “ 是指咱们对序列进行差分的次数。顺便提一下,在 Python 中,如果咱们须要对一个序列进行屡次差分,咱们必须应用 np.diff()函数。pandas 函数 DataFrame.diff()/Series.diff()只解决数据帧 / 序列的第一次差分,没有实现 TSA 中须要的递归差分。

在上面的例子中,咱们通过 (p, d, q) 订单的非显著数量的组合进行迭代,以找到适宜 SPY 收益的最佳 ARIMA 模型。咱们应用 AIC 来评估每个模型。最低的 AIC 获胜。

# 将 ARIMA(p, d, q)模型实用于 SPY 收益
# 依据 AIC 抉择最佳阶数和最终模型

for i in prng:
    for d in rng:
        for j in prng:
            try:
                tp_dl = ARIMAfit(lrs, orer=(i,d,j))
                if tpaic < betaic:
                    bestic = tmp_ic
                    bes_orer = (i, d, j)
                    bestl = tpmdl

# ARIMA 模型的残差图
plot(resid, lags=30)

最好的模型的差值为 0 也就难能可贵了。回忆一下,咱们曾经用对数价格的第一个差值来计算股票收益。上面,我绘制了模型残差。后果与咱们下面拟合的 ARMA(4, 4) 模型基本相同。显然,这个 ARIMA 模型也没有解释序列中的条件稳定!

拟合 SPY 收益的 ARIMA 模型

当初咱们至多积攒了足够的常识来对将来的收益进行简略的预测。这里咱们应用咱们模型的 predict()  办法。作为参数,要预测的工夫步数须要一个整数,alpha 参数须要一个小数来指定置信区间。默认设置为 95% 置信度。对于 99%,设置 alpha 等于 0.01。

# 创立一个具备 95%、99%CI 的 21 天 SPY 收益预测
n_steps = 21


fc9 =atFae(ncolmack(\[c99\])
                     inx=clus=\['wr\_ci99', upr\_ci_99')
fc_ll.head(

# 绘制 21 天的 SPY 收益预测图


ilc\[-500:\].cpy()

# 在样本预测中
prdct(side\[0\], t.id\[-1\])

plt(ax=x, stye=styes)

21 天 SPY 收益预测 – ARIMA(4,0,4)

自回归条件异方差模型 – ARCH(p)

ARCH(p) 模型能够简略地认为是利用于工夫序列方差的 AR(p) 模型。另一种思考形式是,咱们的工夫序列 _在工夫 t_的方差取决于对先前期间方差的过来察看。

ARCH(1) 模型公式

假如系列的均值为零,咱们能够将模型表示为:

零均值的 ARCH(1) 模型

# 模仿 ARCH(1)序列
# Var(yt) = a\_0 + a\_1\*y{t-1}\*\*2
# 如果 a_1 在 0 和 1 之间,那么 yt 就是白噪声


Y = np.epy_lik

for t in rng(ln()):
    Y\[t\] = w\[t * sqrt((a0 + a1\*y\[t-1\*\*2)
# 模仿的 ARCH(1)序列,看起来像白噪声
plot(Y, lags=30)

模仿 ARCH(1)过程

模仿 ARCH(1)**2 过程

请留神 ACF 和 PACF 仿佛在滞后 1 处显示显着性,表明方差的 AR(1) 模型可能是适合的。

狭义自回归条件异方差模型 – GARCH(p,q)

简略地说,GARCH(p, q) 是一个利用于工夫序列方差的 ARMA 模型,即它有一个自回归项和一个挪动均匀项。AR(p) 对残差的方差(平方误差)或简略地对咱们的工夫序列平方进行建模。MA(q) 局部对过程的方差进行建模。根本的 GARCH(1, 1) 公式是:

 GARCH(1, 1) 公式

Omega (w) 是白噪声,alpha 和 beta 是模型的参数。此外 alpha\_1 + beta\_1 必须小于 1,否则模型不稳固。咱们能够在上面模仿一个 GARCH(1, 1) 过程。

# 模仿一个 GARCH(1, 1)过程



n = 10000
w = rnom.ral(sze=n)
eps = np.er_ike(w)
gsq =pzslie(w)

for i in rne1, n):
    sis\[i\] = a+ a1*(eps\[i-1\]\*\*2) + b1\*siq\[i-1\]
    es\[i\] = w\[i\] * srt(sisq\[i\])

模仿 GARCH(1, 1) 过程

再次留神到,总体上这个过程与白噪声十分类似,然而当咱们查看平方的 eps 序列时,请看一下。

模仿 GARCH(1, 1) 过程平方

显然存在着自相干,ACF 和 PACF 的滞后期的重要性表明咱们的模型须要 AR 和 MA。让咱们看看咱们是否能用 GARCH(1, 1)模型复原咱们的过程参数。这里咱们应用 ARCH 包中的 arch_model 函数。

# 将 GARCH(1, 1)模型与咱们模仿的 EPS 序列相匹配
# 咱们应用 arch 函数

am = arch(ps)
fit(dae_freq=5)
summary())

GARCH 模型拟合摘要

当初让咱们运行一个应用 SPY 收益的示例。过程如下:

  • 迭代 ARIMA(p, d, q) 模型的组合来拟合咱们的工夫序列。
  • 依据 AIC 最低的 ARIMA 模型抉择 GARCH 模型阶数。
  • 将 GARCH(p, q) 模型拟合到咱们的工夫序列。
  • 查看模型残差和残差平方的自相干

另请留神,我抉择了一个特定的时间段来更好地突出关键点。然而,依据钻研的时间段,后果会有所不同。

    for i in pq_g:
        for d in d_ng:
            for j in p_ng:
                try:
                    tpml = ARIMA(T,order(i,d,j).fi
                    
                    if tmp\_aic < best\_aic:
                        best_ic =mpac
                        best_oder = (i, d, j)
                        best\_ml =tm\_ml

# 留神我曾经抉择了一个特定的时间段来运行这个剖析
bstmoel(TS)

拟合 SPY 收益的 ARIMA(3,0,2) 模型的残差

看起来像白噪声。

拟合 SPY 收益的 ARIMA(3,0,2) 模型的平方残差

平方残差显示自相干。让咱们拟合一个 GARCH 模型。

# 当初咱们能够应用最适宜的 arima 模型参数来拟合 arch 模型

p_ = bst_dr
o= st_orde
q = bst_er

# 应用学生 T 散布通常能提供更好的拟合
arcd(TS, p=p_, o=o_, q=q_, 'StdensT')
fit(uat_eq=5, sp='ff')

summary

GARCH(3, 2) 模型拟合 SPY 收益

在解决十分小的数字时,会呈现收敛正告。在必要时,将数字乘以 10 倍的系数以扩充幅度,能够起到帮忙作用,然而对于这个演示来说,没有必要这样做。上面是模型的残差。

拟合 SPY 收益的 GARCH(3, 2) 模型残差

下面看起来像白噪声。当初让咱们查看平方残差的 ACF 和 PACF。

咱们曾经实现了良好的模型拟合,因为平方残差没有显著的自相干。


最受欢迎的见解

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