(四十八)用EWMA和GARCH模型估计波动率和相关系数

article/2025/10/26 12:56:45

ARCH、EWMA、GARCH介绍

在这里插入图片描述
在这里插入图片描述

案例

  对2016年至2018年沪深300指数的涨跌幅数据建立ARCH(1)、EWMA和GARCH(1,1)三种波动率模型,并以30天前的数据为起点,逐一预测后一天的波动率。

ARCH(1)

import numpy as np
import pandas as pd
df=pd.read_excel('C:/Users/Desktop/沪深300指数.xlsx',header=0,index_col=0)
data=(df.iloc[:,0]/df.iloc[:,0].shift(1)-1).dropna()
data.name='沪深300涨跌幅'
from arch import arch_model
#建立ARCH(1)模型
arch=arch_model(y=data,mean='Constant',lags=0,vol='ARCH',p=1,o=0,q=0,dist='normal')
#vol参数可选波动率模型的类型,除了ARCH、GARCH外还有EGARCH、FIARCH、HARCH等
archmodel=arch.fit()
archmodel.summary()
archmodel.plot()
Out[6]: 
<class 'statsmodels.iolib.summary.Summary'>
"""Constant Mean - ARCH Model Results                      
==============================================================================
Dep. Variable:           沪深300涨跌幅   R-squared:                      -0.000
Mean Model:             Constant Mean   Adj. R-squared:                 -0.000
Vol Model:                       ARCH   Log-Likelihood:                2232.59
Distribution:                  Normal   AIC:                          -4459.18
Method:            Maximum Likelihood   BIC:                          -4445.41No. Observations:                  730
Date:                Sun, Mar 29 2020   Df Residuals:                      727
Time:                        18:59:32   Df Model:                            3Mean Model                                  
==============================================================================coef    std err          t      P>|t|       95.0% Conf. Int.
------------------------------------------------------------------------------
mu         -3.0768e-04  4.190e-04     -0.734      0.463 [-1.129e-03,5.135e-04]Volatility Model                              
============================================================================coef    std err          t      P>|t|      95.0% Conf. Int.
----------------------------------------------------------------------------
omega      8.9476e-05  8.234e-06     10.866  1.671e-27 [7.334e-05,1.056e-04]
alpha[1]       0.4000      0.107      3.754  1.737e-04     [  0.191,  0.609]
============================================================================
Covariance estimator: robust

在这里插入图片描述
  可以看到ARCH(1)模型的参数ω=0.0000895,α=0.4,因此模型表达式为σn2=0.0000895+0.4(un-1)2

GARCH(1,1)

#建立GARCH(1,1)模型
garch=arch_model(y=data,mean='Constant',lags=0,vol='GARCH',p=1,o=0,q=1,dist='normal')
garchmodel=garch.fit()
garchmodel.params
Out[7]: 
mu          0.000465
omega       0.000003
alpha[1]    0.100000
beta[1]     0.880000
Name: params, dtype: float64
garchmodel.plot()

在这里插入图片描述
  可以看到GARCH(1,1)模型的参数ω=0.00000298,α=0.1,β=0.88,因此模型表达式为σn2=0.00000298+0.1(un-1)2+0.88(σn-1)2。下面计算长期波动率,即√VL

vol=np.sqrt(garchmodel.params[1]/(1-garchmodel.params[2]-garchmodel.params[3]))
vol
Out[10]: 0.012212037954677738

EWMA

  由于实践证明对于日收益率数据,λ=0.94时预测效果最好,因此EWMA模型为σn2=0.06(un-1)2+0.94(σn-1)2

逐一预测后30天的波动率并比较

  根据上述三种模型的结果,我们就可以根据前一天的波动率和收益率数据来预测下一天的波动率。最后30天数据日期为2018年11月19号-2018年12月28号,因此随着每一天的数据更新,我们可以用以上三种模型预测2018年11月20号-2018年12月29号的波动率数据,并画图比较:

#ARCH(1)
vol301=np.zeros(30)
u30=data[-30:]
vol301[0]=np.sqrt(0.0000895+0.4*data[-31]**2)
for i in range(29):vol301[i+1]=np.sqrt(0.0000895+0.4*u30[i]**2)
#GARCH(1,1)
vol302=np.zeros(30)
vol302[0]=data[-34:-29].std()#5日MA估计11月19号的波动率
for i in range(29):vol302[i+1]=np.sqrt(0.00000298+0.1*u30[i]**2+0.88*vol302[i]**2)
#EWMA,λ=0.94
vol303=np.zeros(30)
vol303[0]=data[-34:-29].std()
for i in range(29):vol303[i+1]=np.sqrt(0.06*u30[i]**2+0.94*vol302[i]**2)
#画出30天的波动率预测图
import datetime
riqi=(u30.index+datetime.timedelta(days=1)).strftime("%Y-%m-%d")
import matplotlib.pyplot as plt
plt.figure(figsize=(15,5))
plt.plot(riqi,vol301,label='ARCH(1)')
plt.plot(riqi,vol302,label='GARCH(1,1)')
plt.plot(riqi,vol303,label='EWMA')  
plt.xticks(rotation=30)
plt.legend()
plt.grid()

在这里插入图片描述
  可以发现GARCH(1,1)和EWMA模型的预测结果是非常相似的。

EWMA和GARCH估计相关系数

  思路和估计波动率一样,方差换成了协方差,u²n-1换成了ux n-1· uy n-1
在这里插入图片描述
  注意上式中Covn-1 = ρxy,n-1×σx,n-1×σy,n-1,后面三项都可以通过同一种方法估算出来,比如5日MA。计算出Covn后代入相关系数公式可得ρxy,n = Covn / σx,n×σy,n。下面简单介绍相关系数5日MA的计算方法:

df2=pd.read_excel('C:/Users/Desktop/沪深300指数与上证180指数的日涨跌幅.xlsx',header=0,index_col=0)
cor=df2.rolling(window=5).corr().dropna();cor
Out[16]: 沪深300涨跌幅  上证180涨跌幅
日期                                     
2016-01-08 沪深300涨跌幅  1.000000  0.999923上证180涨跌幅  0.999923  1.000000
2016-01-11 沪深300涨跌幅  1.000000  0.999783上证180涨跌幅  0.999783  1.000000
2016-01-12 沪深300涨跌幅  1.000000  0.999685...       ...
2018-12-26 上证180涨跌幅  0.966159  1.000000
2018-12-27 沪深300涨跌幅  1.000000  0.984355上证180涨跌幅  0.984355  1.000000
2018-12-28 沪深300涨跌幅  1.000000  0.987533上证180涨跌幅  0.987533  1.000000
[1454 rows x 2 columns]
c=cor.loc[(slice(None),'沪深300涨跌幅'),:]
d=pd.Series(c.iloc[:,1].values,index=df2.index[4:],name='5日移动平均相关系数')
d.index.name='date'
d.plot()

在这里插入图片描述
  其中cor.loc[(slice(None),‘沪深300涨跌幅’),:]的各参数的解释如下:loc[(a,b),c]中第一个参数元组为索引内容,a为level0索引对应的内容,b为level1索引对应的内容;因为cor是一个dataframe,所以要用c即‘:’来指定任意的列;slice(None)是切片操作,这里用来选择任意的level0索引,也就是日期。


http://chatgpt.dhexx.cn/article/9jHIt4Kq.shtml

相关文章

Matlab正态分布、历史模拟法、加权移动平均线 EWMA估计风险价值VaR和回测Backtest标准普尔指数 SP500时间序列

最近我们被客户要求撰写关于风险价值的研究报告&#xff0c;包括一些图形和统计输出。 此示例说明如何使用三种方法估计风险价值 (VaR) 并执行 VaR 回测分析。这三种方法是&#xff1a; 正态分布 历史模拟 指数加权移动平均线 (EWMA) 视频&#xff1a;风险价值VaR原理与Py…

指数加权移动平均法(EWMA)

指数加权移动平均法&#xff08;EWMA&#xff09; https://www.cnblogs.com/jiangxinyang/p/9705198.html ** 本文内容来自于吴恩达深度学习公开课 1、概述 加权移动平均法&#xff0c;是对观察值分别给予不同的权数&#xff0c;按不同权数求得移动平均值&#xff0c;并以最…

R语言指数加权模型EWMA预测股市多变量波动率时间序列

最近我们被客户要求撰写关于波动率的研究报告&#xff0c;包括一些图形和统计输出。 从广义上讲&#xff0c;复杂的模型可以实现很高的预测准确性。 但是您的读者需要快速理解。他们没有意愿或时间去处理任何太乏味的事情&#xff0c;即使它可以稍微准确一些。简单性是商业中…

pandas 0.23.4 :'pd.ewma'没有这个模块,改用`Series.ewm` 或 降低版本到 pandas 0.21.0

问题&#xff1a; 在进行画出指数平滑移动平均线&#xff0c;遇到如下问题&#xff1a; # pd.ewma(comNone, spanone) # 指数平均线。com&#xff1a;数据&#xff1b;span&#xff1a;时间间隔AttributeError: module pandas has no attribute ewma解决办法&#xff1a; 方…

java 移动平均_EWMA之——EWMA指数加权移动平均模型的Java实现

具体代码如下&#xff1a; package com.lyz.storm.ewma; import java.io.Serializable; /** * 实现指数移动平均值计算 * 实现中使用了流式风格的builder API * author liuyazhuang * */ public class EWMA implements Serializable { private static final long serialVersion…

EWMA模型估计波动率

#tushare ID&#xff1a;474220 指数移动平均&#xff08;Exponential Moving Average, EMA或EWMA&#xff09;是以指数式递减加权的移动平均。各数值的加权而随时间而指数式递减&#xff0c;越近期的数据加权越重&#xff0c;但较旧的数据也给予一定的加权。加权的程度以常数λ…

史上最通俗易懂的EWMA(指数加权移动平均)的参数解释以及程序代码

文章目录 一、EWMA&#xff08;指数加权移动平均&#xff09;是什么&#xff1f;二、详细的参数解释3、使用Python pandas库中的ewm()函数实现指数加权移动平均&#xff08;EWMA&#xff09;的示例代码总结 一、EWMA&#xff08;指数加权移动平均&#xff09;是什么&#xff1f…

用计算器来进行计算10的几次方的问题

一、首先找到计算器&#xff0c;然后就是找到科学&#xff0c;如图&#xff1a; 二、比如说进行10的2次方&#xff0c;先进行CE清除&#xff0c;然后就是选中10&#xff0c;然后就是选中如下&#xff1a;10^x,如图&#xff1a; 选择10的平方为100&#xff0c;如图&#xff1a; …

十次方项目登陆问题 token令牌解析,claims获取不到userid,求大神帮忙看下代码解决问题

十次方项目登陆问题 token令牌解析&#xff0c;claims获取不到userid 这个是拦截器&#xff1a; 判断角色是用户还是管理员&#xff0c;如果是用户就存入(“claims_user”,token);到controller控制层 此时clims为空&#xff0c;所以下面取值为权限不足

C语言求次方代码

使用pow库函数求2的10次方 #include <stdio.h> #include <math.h>int main() {double a pow(2, 10);printf("%lf",a);return 0; }使用C编译器运行程序 只需更换pow函数中的参数即可求其他结果 _Check_return_ double __cdecl pow(_In_ double _X, …

十次方:区块链需要服务器吗?

随着区块链被正名&#xff0c;上升国家战略后&#xff0c;区块链“忽如一夜春风来&#xff0c;瞬间火遍了全国”。 什么是区块链? 区块链技术是指全民参与记账的一种方式。所有系统背后都有一个数据库&#xff0c;你可以把它看作是一个大账簿。目前是各自记各自的账。它最本…

十次方:服务器的1U、2U、U代表什么意思?

我们在租用或购买服务器的时候&#xff0c;其中有个需要考虑的因素是&#xff0c;我们的服务器需要选择多少U?有1U、2U、4U等服务器可以选择&#xff0c;那么这里的U代表是什么意思? 服务器中的 “U” 代表什么意思 ? 服务器里的“U”特指的是服务器机箱的高度&#xff0c…

五次方数(C语言)

解题思路&#xff1a; 本题的难点在于如何判断边界&#xff0c;我们先判断上边界&#xff1a;我们试着以每位数最大单位数9为边界&#xff0c;所以9^559049,有5位数&#xff0c;所以5*59049295245&#xff1b; 下边界&#xff1a;按题目要求&#xff0c;对一个数十进制表示时的…

科学计算机怎么用10次方,一个数怎么用计算器开10次方

2010-10-20 关于使用计算器&#xff1f;谢谢 那个x^y的按键就是x的y次方的意思 不知道您上高中没有&#xff0c;大概是上高中的时候学的&#xff0c;开根号的新的表示方法 比如说根号下3&#xff0c;也就是2次根号下3&#xff0c;就等于3的2分之1次方 再比如3次根号下16&#x…

window如何安装head插件

head插件是给Elasticsearch提供的图形化界面 1&#xff0c;下载地址 head插件下载地址 2&#xff0c;解压 3&#xff0c;安装node js&#xff0c;安装cnpm npm install ‐g cnpm ‐‐registryhttps://registry.npm.taobao.org4&#xff0c;将grunt安装为全局命令 。Grunt是…

用计算机怎么按四分之三次方等于多少,八十一分之十六的负四分之三次方怎么算,要具体过程,答案是多少?...

八十一分之十六的负四分之三次方怎么算&#xff0c;要具体过程&#xff0c;答案是多少&#xff1f;以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01; 八十一分之十六的负四分之三次方怎么算&a…

十次方:机架式服务器和塔式服务器有什么区别?

通过服务器外形的结构,可以把服务器分为塔式、机架式、刀片式服务器三种类型。而目前市场上比较常见的是塔式和机架式服务器两种,那么这两种服务器有什么区别呢? 外形上: 塔式服务器它的外形上跟我们普通电脑的主机差不多,是立的,可以随便放置,无需机柜。只不过个头更…

【十次方】Springboot中使用SpringCache做缓存

Spring全家桶分布式微服务&#xff08;十次方项目学习&#xff09; 十次方学习交流qq群&#xff1a;672373393 其实在sptringboot中本身提供了一个缓存SpringCache&#xff0c;相比redis更加的简单&#xff0c;但是相对的功能也没有redis强大。如果没有其它特别的需求&#xff…

10的几次方 用计算机计算公式,在excel中如何计算10的几次方呢

excel的运算功能我们都知道非常强大&#xff0c;但是在excel中如何计算10的几次方呢&#xff1f;今天小编就通过一个简单的例子来给大家介绍下在excel中10的几次方的输入和运算方法。 第一、excel 10的几次方运算结果。 在excel中如何得到 10的几次方的结果呢&#xff1f;提供两…

【十次方】Springboot中使用Redis做缓存

Spring全家桶分布式微服务&#xff08;十次方项目学习&#xff09; 十次方学习交流qq群&#xff1a;672373393 今天学习十次方项目&#xff0c;其中说到了如何在springboot框架中如何使用redis缓存&#xff0c;写篇博客记录一下。 为什么要用缓存&#xff1f; 在我们平时开发…