Python金融时间序列模型ARIMA 和GARCH 在股票市场预测应用|附代码数据

news/2024/11/19 1:50:30/文章来源:https://www.cnblogs.com/tecdat/p/18198883

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

最近我们被客户要求撰写关于金融时间序列模型的研究报告,包括一些图形和统计输出。

这篇文章讨论了自回归综合移动平均模型 (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 adfullerrsut = 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)] = 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)] =aic
            except:
                pass

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

图片

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

图片

趋势平稳和差分平稳

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

考虑一个简单的过程

图片

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

图片

图片

点击文末 “阅读原文”

获取全文完整资料。

本文选自《Python金融时间序列模型ARIMA 和GARCH 在股票市场预测应用》。

点击标题查阅往期内容

金融时间序列模型ARIMA 和GARCH 在股票市场预测应用
时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格
R语言ARIMA-GARCH波动率模型预测股票市场苹果公司日收益率时间序列
R语言中的时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格
R语言多元Copula GARCH 模型时间序列预测
python中的copula:Frank、Clayton和Gumbel copula模型估计与可视化
R语言中的copula GARCH模型拟合时间序列并模拟分析
matlab使用Copula仿真优化市场风险数据VaR分析
R语言多元Copula GARCH 模型时间序列预测
R语言Copula函数股市相关性建模:模拟Random Walk(随机游走)
R语言实现 Copula 算法建模依赖性案例分析报告
R语言ARMA-GARCH-COPULA模型和金融时间序列案例
R语言基于copula的贝叶斯分层混合模型的诊断准确性研究
R语言COPULA和金融时间序列案例
matlab使用Copula仿真优化市场风险数据VaR分析
matlab使用Copula仿真优化市场风险
R语言多元CopulaGARCH模型时间序列预测
R语言Copula的贝叶斯非参数MCMC估计
R语言COPULAS和金融时间序列R语言乘法GARCH模型对高频交易数据进行波动性预测
R语言GARCH-DCC模型和DCC(MVT)建模估计
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语言ARMA-GARCH-COPULA模型和金融时间序列案例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/708009.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R语言中绘图设置不输出绘图内容

001、正常绘图plot(1:10, cex = 2, pch = 19) 002、不输出绘图内容plot(1:10, cex = 2, pch = 19, type = "n") 。

AnimationClip获取关键帧信息

1,关键帧数据都保存在AnimationCurve上,所以首先要获取到这个public static AnimationCurve GetAnimCurve(AnimationClip clip, string path, string propName) {EditorCurveBinding[] bindings = AnimationUtility.GetCurveBindings(clip);foreach (var b in bindings){if (…

Dism壳 (做系统的启动盘 多系统版本install.wim合成 界面化)

做系统优盘的时候不断的dism来dism去有些烦了 做了个小工具可以代替bat了... 没做异常处理 开始预览镜像把素材拖进去开始制作流程点击空动作后会出现创建的动作类型 其中合成就是把多个系统搓在一起用的 上面的索引代表的正是双击看到的那些信息的索引 输入对应索引然后空格分…

项目管理之八大绩效域------笔记(三)

18.3 开发方法和生命周期绩效域跟开发方法,项目交付节奏和生命周期相关的活动和职能.一、预期目标:①开发方法与项目可交付物相符合;②将项目交付与干系人价值紧密关联;③项目生命周期由促进交付节奏的项目阶段和产生项目交付物所需的开发方法组成。(项目周期的设计符合项目的…

CSAPP第二章

gcc指定不同的C语言版本 注意寻址和字节顺序讲的, 对象的地址都是从小地址开始算起, 而所谓大端法就是高位字节在前; 小端法则是低位字节在前 注意: 等号上的小圆点的组合表示"被定义为"的意思 反码有+0和-0, -0就是全为1的位模式, 负数的反码就是对应正数所有位取反…

R语言中判断数值是否带有小数点

001、不为整数> a <- 5.324 > floor(a) == a ## 截断后不相等, 说明带有小数点部分,即不为整数 [1] FALSE 002、是整数> b <- 324 > floor(b) == b ## 截断小数点后仍然相等,说明是整数 [1] TRUE 。

poj 3061 Subsequence

题目链接: 来自罗勇军《算法竞赛》书中的习题。 题意:给长度为 \(N\) 的数组和一个整数 \(S\),求总和不小于 \(S\) 的连续子序列的最小长度。 方法一:尺取法 主要思想为:当 \(a_1, a_2 , a_3\) 满足和 \(\geqslant S\),得到一个区间长度 \(3\), 那么去掉开头 \(a_1\),剩…

汇编语言基础及编译原理(网安)

汇编语言基础及编译原理 二进制基础 程序的编译 汇编与链接从c语言到可执行程序 源代码.c 编译 汇编代码.s 汇编 目标文件.o 链接(静态库直接拷贝,动态库运行时通过动态链接方式加载) 可执行文件(p)x86机器指令入门 栈 一种先进后出的数据结构 被用于保存函数的局部(保存…

SkyWalking 单机安装 + 集成springboot

一、下载地址 https://skywalking.apache.org/downloads/ 需下载安装包:SkyWalking APM (v9.6.0) (新版本 Booster UI 已集成在 SkyWalking APM中)apache-skywalking-apm-9.6.0.tarJava Agent (v9.1.0)apache-skywalking-java-agent-9.1.0.tar二、安装 2.1、安装SkyWalking …

R语言中小数点如何实现进位

001、round,四舍五入> a <- 5.345 ## 舍去 > round(a) [1] 5 > b <- 5.824 ## 进位 > round(b) [1] 6 002、round,四舍五入指定小数位数> a <- 8.426532 > round(a, 1) ## 保留一位小数,四舍五入 [1] 8.4 > round…

C122 李超树合并+DP CF932F Escape Through Leaf

视频链接:C122 李超树合并+DP CF932F Escape Through Leaf_哔哩哔哩_bilibili C65【模板】线段树合并 P4556 [Vani有约会]雨天的尾巴 - 董晓 - 博客园 (cnblogs.com) CF932F Escape Through Leaf#include <iostream> #include <cstring> #include <algorith…

kettle从入门到精通 第六十一课 ETL之kettle 任务调度器,轻松使用xxl-job调用kettle中的job和trans

1、大家都知道kettle设计的job流程文件有个缺点:只能设置简单的定时任务,无法设置复杂的如支持cron表达式的job。 今天给大家分享一个使用xxl-job调度carte的流程文件的示例。整个调度流程图如下: 1)xxl-job-admin,页面可视化配置任务。 2)xxl-job-executor,job执行器,…