之前我们讨论过AR模型和ARMA模型,这两个模型是对时间序列数据的拟合与预测,此外时间序列模型对波动性的应用也较为广泛。(如:股票波动)。

ARIMA(这是我写的):链接

一、波动率的特征

  1. 存在波动率聚集现象,也就是说,波动率在一段时间内都比较高,在另一段时间内都比较低。
  2. 波动率是随着时间连续变化的。(一般来说波动率与时间的曲线f(x)是连续的)
  3. 波动率不会发散到无穷。
  4. 波动率对价格大幅上升和大幅下降的反应不同。这种现象称为杠杆效应。

二、建立模型

建立ARCH模型需要四个步骤:

  1. 通过检验数据的序列相关性,建立一个均值模型,如果有必要,对收益率序列建立一个计量经济模型来消除任何的线性依赖。
  2. 对均值的残差进行ARCH效应检验
  3. 如果ARCH效应在统计上是显著的则指定一个波动率模型,并对均值方程和波动率方程进行联合估计。
  4. 仔细地检验所拟合的模型,如有必要则对其进行改进。

三、波动率模型框架

对波动率进行建模的时候,我们需要同时考虑收益率的条件均值和条件方差。给定t-1时刻已知的信息集,的条件均值和条件方差为:

我们假设服从一个简单的时间序列模型,得到的平稳ARMA(p,q)模型如下:

其实这些不重要。

四、ARCH模型

ARCH采用自回归形式来刻画方差的变异。

我描述能力很差,这种就不耽误大家时间了,直接看大佬的描述,通俗易懂。

参考:小火君totora的博客ARCH模型是什么?

五、GARCH模型

如果说ARCH模型对应着AR模型,那么GARCH模型对应的就是ARMA模型。GARCH模型是ARCH模型的推广形式。

参考:无情小超超的博客时间序列--GARCH模型。

六、代码(我用的是测试的代码,自己的数据做的就不放了)

1.先导入相关的库,并获取数据,这里的这个例子求出我们要分析的收益率3


import pandas as pdimport tushare as ts
#获取股票数据进行测试的
import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as pltimport arch#实验品626,计算收益率,这里先留着,问一下是否需要求收益率。
df = ts.get_k_data('399300',index=True,start='2015-01-01',end='2015-12-31')
df = df.set_index('date')
df['rtn'] = np.log(df['close']) - np.log(df['close'].shift(1))
df = df.dropna()

2.ADF检验一下收益率是否平稳

rtn = df.rtn.values
t = sm.tsa.stattools.adfuller(df.rtn)#这就是adf检验结果
print("p-value是",t[1])
#这里p-value是0.00011588814525635444,小于0.05故收益序列是平稳的

3.我们假设该序列的均值方程是AR(p)模型,我们先求P

fig = plt.figure(figsize=(10,5))
ax1 = fig.add_subplot(111)
fig = sm.graphics.tsa.plot_pacf(rtn,lags=25,ax=ax1)

得到结果是:

从图可以看出p = 2

4.生成均值方程AR(2)模型

statsmodels,这个库里我没找到ARMA的函数,原本的例子是ARMA,现在改一下,改成ARIMA。

mean_model = sm.tsa.ARIMA(rtn,order = (3,0,0)).fit()
at = rtn - mean_model.fittedvalues
at2 = np.square(at)
plt.figure(figsize=(10,6))
plt.subplot(211)
plt.plot(at,label = 'at')
plt.legend()
plt.subplot(212)
plt.plot(at2,label='at^2')
plt.legend(loc = 0)

绘图结果:

5.检验是否具有相关性


#检验相关性
m1 = 10
acf1,q1,p1 = sm.tsa.acf(at2,nlags=m1,qstat=True)
out1 = np.c_[range(1,m1+1),acf1[1:],q1,p1]
output1 = pd.DataFrame(out1,columns=['lag','AC','Q','P-value'])
output1 = output1.set_index('lag')

结果:从下图中可以看出p-value小于0.05,所以认为序列具有相关性,即具有ARCH效应。

6.判定ARCH模型的阶次


fig = plt.figure(figsize=(10,5))
ax1 = fig.add_subplot(111)
fig = sm.graphics.tsa.plot_pacf(at2,lags=30,ax=ax1)

结果:不难看出可以将阶次定为2阶,所以动率模型为ARCH(2)模型。

7.拟合ARCH模型

am = arch.arch_model(rtn,mean='AR',lags=2,vol='ARCH',p=2)
res = am.fit()
res.summary()#看结果

结果:

8.GARCH模型的构造

gam = arch.arch_model(rtn,mean='AR',lags=2,vol='GARCH')
gres = gam.fit()
gres.summary()#看结果

结果:

甚至可以画个图:

gres.plot()

结果:

七、作者参考资料:

赵志强,刘志伟 的 <<Python量化投资:技术、模型与策略>>

上面推荐的一些博主的文章,我都是草草看过一遍,如果讲的不好请通知。谢谢。博客慢慢写,不急,如果时间序列数据分析的有关文章多起来的话,会整合成一个系列看看。

八、完整代码

# -*- coding: utf-8 -*-
"""
Created on Fri Jan  7 13:36:23 2022@author: 13056
"""import pandas as pdimport tushare as ts
#获取股票数据进行测试的
import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as pltimport arch#实验品626,计算收益率,这里先留着,问一下是否需要求收益率。
df = ts.get_k_data('399300',index=True,start='2015-01-01',end='2015-12-31')
df = df.set_index('date')
df['rtn'] = np.log(df['close']) - np.log(df['close'].shift(1))
df = df.dropna()rtn = df.rtn.values
t = sm.tsa.stattools.adfuller(df.rtn)#这就是adf检验结果
print("p-value是",t[1])
#这里p-value是0.00011588814525635444,小于0.05故收益序列是平稳的
fig = plt.figure(figsize=(10,5))
ax1 = fig.add_subplot(111)
fig = sm.graphics.tsa.plot_pacf(rtn,lags=25,ax=ax1)mean_model = sm.tsa.ARIMA(rtn,order = (3,0,0)).fit()
at = rtn - mean_model.fittedvalues
at2 = np.square(at)
plt.figure(figsize=(10,6))
plt.subplot(211)
plt.plot(at,label = 'at')
plt.legend()
plt.subplot(212)
plt.plot(at2,label='at^2')
plt.legend(loc = 0)#检验相关性
m1 = 10
acf1,q1,p1 = sm.tsa.acf(at2,nlags=m1,qstat=True)
out1 = np.c_[range(1,m1+1),acf1[1:],q1,p1]
output1 = pd.DataFrame(out1,columns=['lag','AC','Q','P-value'])
output1 = output1.set_index('lag')fig = plt.figure(figsize=(10,5))
ax1 = fig.add_subplot(111)
fig = sm.graphics.tsa.plot_pacf(at2,lags=30,ax=ax1)am = arch.arch_model(rtn,mean='AR',lags=2,vol='ARCH',p=2)
res = am.fit()
gam = arch.arch_model(rtn,mean='AR',lags=2,vol='GARCH')
gres = gam.fit()
gres.plot()

ARCH与GARCH模型相关推荐

  1. Python玩转金融时间序列之ARCH与GARCH模型

    01 引言 作为金融时间序列的专题推文,[手把手教你]时间序列之日期处理主要介绍了使用Python处理时间序列的日期和统计分析:[Python量化基础]时间序列的自相关性与平稳性主要介绍了时间序列的一 ...

  2. arch检验python_Python玩转金融时间序列之ARCH与GARCH模型

    01 引言 作为金融时间序列的专题推文,[手把手教你]时间序列之日期处理主要介绍了使用Python处理时间序列的日期和统计分析:[Python量化基础]时间序列的自相关性与平稳性主要介绍了时间序列的一 ...

  3. 时间序列异方差ARCH和GARCH模型

    实验数据来源于1926年-1991年标准普尔500股票价值加权月度收益序列: 图形检验: 首先对1926年-1991年标准普尔500股票价值加权月度收益序列的进行集群效应:集群效应为在波动大的地方波动 ...

  4. 【更新7】ARCH和GARCH模型

    ARCH模型(Autoregressive conditional heteroskedasticity model)全称"自回归条件异方差模型",在现代高频金融时间序列中,数据经 ...

  5. 【项目实战】Python基于波动率模型(ARCH和GARCH)进行股票数据分析项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+代码讲解),如需数据+代码+文档+代码讲解可以直接到文章最后获取. 1.项目背景 在衍生产品定价和风险管理中,对当前波动率是很感兴趣的,这是因为需 ...

  6. garch模型python步骤_GARCH模型的建模步骤?

    泻药,我将建立道琼斯工业平均指数(DJIA)日交易量对数比的ARMA-GARCH模型来演示建模步骤. 原文链接:R语言: GARCH模型股票交易量的研究道琼斯股票市场指数​tecdat.cn 获取数据 ...

  7. r语言 col_R语言: GARCH模型股票交易量的研究道琼斯股票市场指数

    我将建立道琼斯工业平均指数(DJIA)日交易量对数比的ARMA-GARCH模型. 获取数据 load(file='') 日交易量  每日交易量内发生的 变化. plot(dj_vol) 首先,我们验证 ...

  8. CSDN ARIMA R语言_R语言时间序列:ARIMA / GARCH模型的交易策略在外汇市场预测应用...

    原文链接: http://tecdat.cn/?p=17622​tecdat.cn 最近,我们继续对时间序列建模进行探索,研究时间序列模型的自回归和条件异方差族.我们想了解自回归移动平均值(ARIMA ...

  9. garch dcc用matlab,用matlab工具箱怎么对garch模型做...

    对garch模型做预测可以用matlab自带的garchfit()函数,该函数主要用于估计ARMAX / GARCH模型参数. garchfit()函数使用格式: [Coeff,Errors,LLF, ...

最新文章

  1. 语言沟通6c,如何做到轻松有效沟通
  2. oracle tns 连接关闭,ORA-12537 TNS:连接关闭
  3. Mysql数据库和表的操作
  4. C11语言比C99,C11相比C99的变化
  5. 《深入浅出WPF》-刘铁猛学习笔记——XAML
  6. (已解决)ubuntu下网易云音乐无法打开
  7. 计算机芯片级维修包括哪些,计算机芯片级维修1
  8. 淘客订单检测接口--检测淘宝订单是否是淘客订单的接口
  9. 如何让vnc控制由默认的twm界面改为gnome?(转)
  10. 【计算机网络】 网关:即“默认网关”的作用, 以及 默认路由的作用(只有路由器才有默认路由)
  11. 操作系统真像还原 - MBR主引导程序初体验
  12. 计算机操作电脑试题评分标准,2014计算机一级上机试题(1—5套)评分标准.docx
  13. python递归必须要有_Python的递归
  14. 【数据结构】-顺序栈(初始化栈顶指针为-1)
  15. C语言 输入一个字符,并判断这个字符属于哪一类字符
  16. Sensor Hub
  17. Leetcode1091_二进制矩阵中的最短路径(Java+BFS解法)
  18. Core Bluetooth框架之一:Central与Peripheral
  19. 服务器tomcat运行一段时间会报org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header
  20. 2020 mse 清华_2020年的北大清华在世界上属于什么水平?

热门文章

  1. centos 6 install EPEL
  2. 第8章 静态路由配置
  3. 初学QT遇到的“_on_OK_clicked(bool)未定义的引用”的问题,以及使用windows远程桌面登录树莓派
  4. TCP_IP Sockets编程C语言实现第2版 源码下载
  5. mysql免安装版的下载与安装
  6. 本地Navicat连接虚拟机MySQL
  7. mongoDB的配置以及运行
  8. [case29]JDK11的ZGC小试牛刀
  9. jmx为啥开了额外两个随机端口?
  10. PECL PEAR php扩展模块的简便安装方式