
ARCH模型
音乐教师个人述职-协信未来城
2023年2月22日发(作者:凤凰琴电影)arch检验python_Python玩转⾦融时间序列之ARCH与GARCH
模型
原标题:Python玩转⾦融时间序列之ARCH与GARCH模型
01引⾔
作为⾦融时间序列的专题推⽂,【⼿把⼿教你】时间序列之⽇期处理主要介绍了使⽤Python处理时间序列的⽇期和统计分析;【Python量
化基础】时间序列的⾃相关性与平稳性主要介绍了时间序列的⼀些基础概念,包括⾃相关性、偏⾃相关性、⽩噪声和平稳性;⽽【⼿把⼿教
你】使⽤Python玩转⾦融时间序列模型主要介绍了AR、MA、ARMA和ARIMA模型的基本原理与Python的实现。从上⼀篇推⽂不难看
出,使⽤ARMA等模型对股票收益率的时间序列建模效果不是很理想,主要在于忽略了时间序列的异⽅差和波动聚集特性。所谓波动性聚
集,是指⾦融时间序列的波动具有⼤波动接着⼤波动,⼩波动接着⼩波动的特征,即波峰和波⾕具有连续性。ARCH和GARCH模型正是基
于条件异⽅差和波动聚集的特性建模的。本次推⽂着重介绍ARCH和GARCH模型的基本原理及其Python实现。
02股票收益率时间序列特点
在介绍ARCH和GARCH模型之前,我们先来看看⾦融资产收益率的时间序列有哪些⽐较突出的特点。仍然以沪深300指数为例,考察其收
益率时间的分布和统计特性。下⾯的Python代码与上⼀篇推⽂类似,包括导⼊需要⽤到的库、定义画图函数和使⽤tushare获取数据等。
importpandasaspd
importnumpyasnp
mt
#tsa为TimeSeriesanalysis缩写
m
sscs
fromarchimportarch_model
#画图
asplt
importmatplotlibasmpl
%matplotlibinline
#正常显⽰画图时出现的中⽂和负号
frompylabimportmpl
ms['-serif']=['SimHei']
ms['e_minus']=False
defts_plot(data,lags=None,title=''):
ifnotisinstance(data,):
data=(data)
#matplotlib官⽅提供了五种不同的图形风格,
#包括bmh、ggplot、dark_background、
#fivethirtyeight和grayscale
t('ggplot'):
fig=(figsize=(10,8))
layout=(3,2)
ts_ax=t2grid(layout,(0,0))
acf_ax=t2grid(layout,(1,0))
pacf_ax=t2grid(layout,(1,1))
qq_ax=t2grid(layout,(2,0))
pp_ax=t2grid(layout,(2,1))
(ax=ts_ax)
ts__title(title+'时序图')
_acf(data,lags=lags,
ax=acf_ax,alpha=0.5)
acf__title('⾃相关系数')
_pacf(data,lags=lags,
ax=pacf_ax,alpha=0.5)
pacf__title('偏⾃相关系数')
(data,line='s',ax=qq_ax)
qq__title('QQ图')
ot(data,sparams=((),
()),plot=pp_ax)
pp__title('PP图')
_layout()
return
使⽤tushare获取沪深300交易数据
importtushareasts
token='输⼊你的token'
pro=_api(token)
df=_daily(ts_code='')
=_datetime(_date)
df=_index()
df['ret']=(/(1))
#()
ts_plot((),lags=30,title='沪深300收益率')
从上图可以看出,沪深300指数收益率时间序列呈现出以下⼏个现象,具有⼀定的普遍性。
⾃相关性⽐较弱,但对其进⾏变换后,如取平⽅、绝对值等,则表现出很强的⾃相关性(见后⽂);
收益率的条件⽅差(ConditionalVariance)随着时间⽽变化,即存在条件异⽅差的特征。
收益率序列的波动具有持续性,即存在波动集聚(VolatilityClustering)的现象。⽐如2007-2008、2015-2016、2019具有较⼤的波动
性。
QQ图显⽰,收益率并不服从正态分布,极端值较多,具有厚尾的现象。
03ARCH模型
ARCH模型全称是⾃回归条件异⽅差模型,AutoregressiveConditionallyHeteroskedasticModels-ARCH(p),是Engle在1982年
分析英国通货膨胀率时提出的模型,主要⽤于刻画波动率的统计特征。
⼀般先假设收益率序列满⾜某个经典时间序列模型(MA、AR或ARMA),以AR(1)模型为例:
收益率yt的波动率(条件⽅差)可以使⽤残差项的波动率进⾏刻画:
为了刻画资产收益率的这种波动特性,可以令残差项的条件⽅差与过去残差项的平⽅相关。因此,ARCH(p)模型可以表⽰为:
其中,w是均值为0,⽅差为1的独⽴同分布时间序列,,且满⾜⼀定条件使得的⽆条件⽅差有限。ARCH(p)模型能够很好地刻画⾦融资产
收益率序列的波动特性和厚尾现象,但是其本⾝并不能⽤来解释⾦融资产收益率为何有这样的特征。关于ARCH模型的估计此处不详细展
开,感兴趣的可以参见的《⾦融时间序列分析》和计量经济学教材。下⾯简要介绍ARCH模型的建模步骤:
(1)检验收益率序列是否平稳,根据⾃相关性建⽴合适的均值⽅程,如ARMA模型,描述收益率如何随时间变化,根据拟合的模型和实际
值,得到残差序列。
(2)对拟合的均值⽅程得到的残差序列进⾏ARCH效应检验,即检验收益率围绕均值的偏差是否时⼤时⼩。检验序列是否具有ARCH效应的
⽅法有两种:Ljung-Box检验和LM检验。
(3)若ARCH效应在统计上显著,则需要再设定⼀个波动率模型来刻画波动率的动态变化。
(4)对均值⽅差和波动率⽅差进⾏联合估计,即假设实际数据服从前⾯设定的均值⽅差和波动率⽅差后,对均值⽅差和波动率⽅差中的参数
进⾏估计,并得到估计的误差。
(5)对拟合的模型进⾏检验。如果估计结果(残差项)不满⾜模型本⾝的假设,则模型的可⽤性较差。
下⾯使⽤Python模拟ARCH模型并对沪深300收益率的ARCH效应进⾏统计检验。
#模拟ARCH时间序列
(2)
a0=2
a1=.5
y=w=(size=1000)
Y=_like(y)
fortinrange(1,len(y)):
Y[t]=w[t]*((a0+a1*y[t-1]**2))
ts_plot(Y,lags=30,title='模拟ARCH')
defret_plot(ts,title=''):
ts1=ts**2
ts2=(ts)
t('ggplot'):
fig=(figsize=(12,6))
layout=(2,1)
ts1_ax=t2grid(layout,(0,0),colspan=2)
ts2_ax=t2grid(layout,(1,0))
(ax=ts1_ax)
ts1__title(title+'⽇收益率平⽅')
(ax=ts2_ax)
ts2__title(title+'⽇收益率绝对值')
_layout()
return
ret_plot((),title='沪深300')
从沪深300的⽇收益平⽅和绝对值⾛势图可以看出,存在较明显的波动聚集的现象,初步可以判断出沪深300⽇收益序列存在ARCH效应。
下⾯使⽤Ljung-Box统计量对收益率平⽅的⾃相关性进⾏统计检验。计算Q统计量和LB统计量都是⽤python中statsmodels模块
acorr_ljungbox⽅法.默认情况下,acorr_ljungbox只计算LB统计量,只有当参数boxpierce=True时,才会输出Q统计量。由LB⽩噪声检验
可以看出,Q统计量的p值都在0.05以下,表明原假设成⽴的概率极⼩,可以拒绝沪深300收益率的平⽅是⽩噪⾳序列的原假设,说明原序列
(沪深300收益率)存在ARCH效应。
defwhitenoise_test(ts):
'''计算boxpierce和boxljung统计量'''
sticimportacorr_ljungbox
q,p=acorr_ljungbox(ts)
t('ggplot'):
fig=(figsize=(10,4))
axes=ts(1,2)
axes[0].plot(q,label='Q统计量')
axes[0].set_ylabel('Q')
axes[1].plot(p,label='p值')
axes[1].set_ylabel('P')
axes[0].legend()
axes[1].legend()
_layout()
return
ret=()
whitenoise_test(ret**2)
04GARCH模型
GARCH模型是Bollerslev在1986年提出来的,全称为⼴义⾃回归条件异⽅差模型,GeneralizedAutoregressiveConditionally
HeteroskedasticModels-GARCH(p,q),是ARCH模型的扩展。GARCH模型认为时间序列每个时间点变量的波动率是最近p个时间点
残差平⽅的线性组合,与最近q个时间点变量波动率的线性组合加起来得到。即GARCH模型的条件⽅差不仅是滞后残差平⽅的线性函数,
还是滞后条件⽅差的线性函数,因⽽GARCH模型适合在计算量不⼤时,⽅便地描述⾼阶的ARCH过程,具有更⼤的适⽤性。
其中,为⽩噪⾳,,否则模型将是⾮平稳的。GARCH模型的估计与ARCH模型类似,具体推导过程参见计量经济学相关书籍。在实际应⽤
中,GARCH(1,1)和GARCH(2,1)⼀般可以满⾜对⾃回归条件异⽅差的描述。下⾯使⽤Python对GARCH(1,1)模型进⾏模拟和估计。
Python中的ARCH包
先来看下arch包中arch_model函数各参数的含义以及模型设定⽅法。
_model(y,x=None,mean='Constant',lags=0,vol='Garch',p=1,o=0,q=1,power=2.0,dist='Normal',
hold_back=None)
各参数含义:
y:因变量。
x:外⽣变量,如果没有外⽣变量则模型⾃动省略。
mean:均值模型的名称,可选:‘Constant’,‘Zero’,‘ARX’以及‘HARX’。
lags:滞后阶数。
vol:波动率模型,可选:‘GARCH’(默认),‘ARCH’,‘EGARCH’,‘FIARCH’以及‘HARCH’。
p:–对称随机数的滞后阶,即扣除均值后的部分。
o:⾮对称数据的滞后阶。
q:波动率或对应变量的滞后阶。
power:使⽤GARCH或相关模型的精度。
dist:误差分布,可选:正态分布:‘normal’,‘gaussian’(default);学⽣T分布:‘t’,‘studentst’;偏态学⽣T分布:
‘skewstudent’,‘skewt’;通⽤误差分布:‘ged’,‘generalizederror”。
hold_back:对同⼀样本使⽤不同的滞后阶来⽐较模型时使⽤该参数。
#模拟GARCH(1,1)过程
(1)
a0=0.2
a1=0.5
b1=0.3
n=10000
w=(size=n)
garch=_like(w)
sigsq=_like(w)
foriinrange(1,n):
sigsq[i]=a0+a1*(garch[i-1]**2)+b1*sigsq[i-1]
garch[i]=w[i]*(sigsq[i])
_=ts_plot(garch,lags=30,title='模拟GARCH')
#update_freq=0表⽰不输出中间结果,只输出最终结果
#使⽤模拟的数据进⾏GARCH(1,1)模型拟合
#arch_model默认建⽴GARCH(1,1)模型
am=arch_model(garch)
res=(update_freq=0)
print(y())
#拟合沪深300收益率数据
Y=ret*100.0
am=arch_model(Y,p=1,o=1,q=1,dist='StudentsT')
res=(update_freq=0)
#update_freq=0表⽰不输出中间结果,只输出最终结果
print(y())
(figsize=(12,5))
('沪深300收益率拟合GARCH(1,1)残差',size=15)
()
ional_(figsize=(12,5),color='r')
('沪深300收益率条件⽅差',size=15)
()
05结语
本⽂简要介绍了ARCH和GARCH模型的基本原理和Python实现,关于其应⽤还有待进⼀步拓展和挖掘。ARCH和GARCH模型能够较好的
刻画⾦融资产收益率的波动性聚集和厚尾现象,因此在量化投资上的应⽤主要表现在波动率的估计上,尤其是⾦融⼯程(期权波动率)和风险
管理(VaR模型)的应⽤上。同时,我们也注意到,ARCH和GARCH模型在应⽤中也存在⼀定的局限性和不⾜:⾸先,模型假定波动是对称
的,即过去的波动对现在条件⽅差的影响是相同的,但学术上的实证结果却表明,当坏(好)消息发布时,股票收益率的波动会增加(减⼩);
其次,模型对参数的限制条件较强,尤其是⾼阶模型,参数需要满⾜的约束⾮常复杂。最后,模型并没有提供关于波动率变化的更进⼀步解
释,⽽仅仅是拟合波动率变化的统计⾏为。针对现有模型的不⾜,学者们在GARCH模型的基础上⼜提出了⼀系列模型,简称GARCH模型
族,包括IGARCH、TGARCH、EGARCH等,更复杂的还有BEKK-GARCH、Coupla-GARCH等模型。当然,模型并⾮越复杂越好,特
别地,学术上⽤到的复杂模型,在现实的量化投资中能⽤到的往往很少。
参考资料:
AnalysisofFinancialTimeSeries(中⽂版《⾦融时间序列分析》第3版),作者:.
statsmodels官⽅⽂档。
TimeSeriesAnalysis(TSA)inPython-LinearModelstoGARCH.
蔡⽴耑.《量化投资以Python为⼯具》.电⼦⼯业出版社.2017.
关于Python⾦融量化
专注于分享Python在⾦融量化领域的应⽤。加⼊知识星球,可以免费获取量化投资视频资料、量化⾦融相关PDF资料、公众号⽂章Python
完整源码、量化投资前沿分析框架,与博主直接交流、结识圈内朋友等。返回搜狐,查看更多
责任编辑: