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

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

Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列2:https://developer.aliyun.com/article/1485071

移动平均模型 - 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)

Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列4:https://developer.aliyun.com/article/1485074

相关文章
|
16天前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品消费模式分析的深度学习模型
使用Python实现智能食品消费模式分析的深度学习模型
109 70
|
18天前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品消费习惯分析的深度学习模型
使用Python实现智能食品消费习惯分析的深度学习模型
121 68
|
14天前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费市场分析的深度学习模型
使用Python实现智能食品消费市场分析的深度学习模型
91 36
|
8天前
|
数据可视化 算法 数据挖掘
Python量化投资实践:基于蒙特卡洛模拟的投资组合风险建模与分析
蒙特卡洛模拟是一种利用重复随机抽样解决确定性问题的计算方法,广泛应用于金融领域的不确定性建模和风险评估。本文介绍如何使用Python和EODHD API获取历史交易数据,通过模拟生成未来价格路径,分析投资风险与收益,包括VaR和CVaR计算,以辅助投资者制定合理决策。
48 15
|
12天前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费趋势分析的深度学习模型
使用Python实现智能食品消费趋势分析的深度学习模型
67 18
|
16天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
14天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
3天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
97 80
|
21天前
|
存储 索引 Python
Python编程数据结构的深入理解
深入理解 Python 中的数据结构是提高编程能力的重要途径。通过合理选择和使用数据结构,可以提高程序的效率和质量
133 59
|
1天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
14 2
下一篇
DataWorks