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

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

这篇文章讨论了自回归综合移动平均模型 (ARIMA) 和自回归条件异方差模型 (GARCH) 及其在股票市场预测中的应用。

介绍

一个 ARMA (AutoRegressive-Moving Average)") 有两部分,AR(p)部分和MA(q)部分,表示如下

其中 L 是滞后算子,ϵi 是白噪声。它可以通过 Box-Jenkins method. 我们可能会使用 PACF 绘制识别 AR 滞后阶数 p,和 ACF 图以识别 MA 滞后阶数 q;或使用信息,例如 AIC 和 BIC 做模型选择。

ARIMA (AutoRegressive Integrated Moving Average)") 是 ARMA 的拓展,通过为非平稳过程添加阶数为 d 的积分部分。

ARIMA是针对价格水平或收益率的,而GARCH(广义自回归条件异方差)则试图对波动率或收益率平方的聚类进行建模。它将ARMA项扩展到方差方面。

作为随机波动率模型的离散版本,GARCH也能捕捉到股票市场的厚尾效应。因此,将ARIMA和GARCH结合起来,预计在模拟股票价格时比单独一个模型更适合。在这篇文章中,我们将把它们应用于标普500指数的价格。

ARIMA

首先,众所周知,股票价格不是平稳的;而收益可能是平稳的。ADF单位根检验结果。

# 价格是已知的非平稳的;收益是平稳的
import adfuller
rsut = aduler(close)
prnt(f'ADF Satitic: {reslt
}, pale: {rslt1\]}')  # null 假设:单位根存在;不能拒绝 null。
relt = adfler(histet)
prnt(f'ADF Statistic: {reut\[0\]}, pvaue: {rslt\[1\]}')   # 拒绝单位根的空假设 ==> 平稳

收益序列的 ADF p 值为 0,拒绝单位根的原假设。因此,我们在 ARIMA(p, d, q) 中接受 d=1,下一步是识别滞后 p 和 q。ACF 和 PACF 图表明滞后最多 35 个工作日。如果我们按照图表进行拟合,将有太多参数无法拟合。一种解决方案是使用每周或每月图表。在这里,我们将最大滞后时间限制为 5 天,并使用 AIC 选择最佳模型。

for p in rage(6):
    for q in rage(6):
        ry:
            mft = fit(disp=0)
            ic(p,q)
(p, q) = fiaic
        except:
            pass

下一步是拟合模型并通过残差统计评估模型拟合。残差仍然显示出一些自相关,并且没有通过正态性检验。由于滞后阶数限制,这在某种程度上是预料之中的。

尽管如此,让我们继续最后一步并使用模型进行预测。下面比较了对测试集的收益率预测和实际收益率。

收益率预测以 0% 为中心,置信区间在 ±2% 之间。结果并不是特别令人印象深刻。毕竟,市场正在经历一个动荡的阶段,在预测时间窗口内甚至下跌了 6%。



点击标题查阅往期内容


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



左右滑动查看更多



01

02

03

04




GARCH

让我们看看加入GARCH效果是否会产生更好的结果。建模过程类似于ARIMA:首先识别滞后阶数;然后拟合模型并评估残差,最后如果模型令人满意,就用它来预测。

我们将 AR 滞后和 GARCH 滞后都限制为小于 5。结果最优阶为 (4,2,2)。

for l in rage(5):
    for p in rage(1, 5):
        for q in rage(1, 5):
            try:
                mdl = arch(is_et, man='ARX',  vol='Garch', p=p, o=0, q=q, dist='Nomal')
                fit(last_obs=spldat)
                dc_ic(l,p,q)
(l, p, q) =aic
            except:
                pass

接下来让我们根据选择的最佳参数来拟合模型,如下所示。证实了均值模型是AR(4),方差模型是GARCH(2, 2)。一些系数在统计上不显着。

最后但并非最不重要的是,预测区间从±4%下降到±3%,然后又反弹到±5%,这清楚地表明了模型的波动性集群。请注意,这里是单步滚动预测,应该比静态的多期预测要好。

趋势平稳和差分平稳

趋势平稳,即确定性趋势,具有确定性均值趋势。相反,差分平稳具有随机趋势。前者可以用OLS估计,后者需要先求差分。

考虑一个简单的过程

如果 φ<1,则过程是趋势平稳的;也就是说,如果我们减去趋势 at,则过程变得平稳。若φ=1,则差分平稳。将第二个方程代入第一个方程很容易看出随机性,并将方程改写为


相关文章
|
9天前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品加工优化的深度学习模型
使用Python实现智能食品加工优化的深度学习模型
103 59
|
4天前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品市场预测的深度学习模型
使用Python实现智能食品市场预测的深度学习模型
28 5
|
6天前
|
机器学习/深度学习 算法 数据可视化
使用Python实现深度学习模型:智能食品配送优化
使用Python实现深度学习模型:智能食品配送优化
21 2
|
4天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
21 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
4天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
25 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
7天前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品储存管理的深度学习模型
使用Python实现智能食品储存管理的深度学习模型
21 2
|
9天前
|
机器学习/深度学习 算法 PyTorch
用Python实现简单机器学习模型:以鸢尾花数据集为例
用Python实现简单机器学习模型:以鸢尾花数据集为例
28 1
|
4天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
4天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
4天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!