✅ 操作成功!

ARCH模型

发布时间:2023-06-07 作者:admin 来源:文学

ARCH模型

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

完整源码、量化投资前沿分析框架,与博主直接交流、结识圈内朋友等。返回搜狐,查看更多

责任编辑:

👁️ 阅读量:0