快捷搜索: 王者荣耀 脱发

金融学习之八——ARCH和GARCH模型应用

对衍生产品定价和风险管理中,常常需要对衍生产品的波动率进行预测,这就需要使用到波动率模型。常见的波动率模型有两个,一个是自回归条件异方差模型ARCH,另一个是广义自回归条件异方差模型GARCH。这两个模型的数学公式有点多,但如果只是跑代码的话就没那么麻烦,本次仅介绍这两个模型在python中的应用。 我们希望根据2016-2018年的沪深300指数的涨跌幅构建波动率模型,步骤如下: (1)利用Tushare获取沪深300指数的数据 因不知道沪深300指数的代码,所以先做了个查询

import tushare as ts
ts.set_token(b497571a3ddd7dde8ebe28b372879594b2f8356c918ad80dae01605b)
pro=ts.pro_api()
index=pro.index_basic()
index

由此拿到了所有指数的信息,从这些信息中,我们找到沪深300指数的相关信息:

index.loc[index.name==沪深300]

结果显示如下: 知道沪深300指数的代码为000300.SH后,再次调用接口:

data=pro.index_daily(ts_code=000300.SH,start_date=20160101,end_date=20181231)
data[new]=data[pct_chg]/100
data

这里的pct_chg就是每天的涨跌幅度,但因做了百分比处理,所以将这列数据再除以100,以恢复成原始数据。 拿到数据后,开始建立模型,首先是arch:

import arch
model=arch.arch_model(data.new,mean=Constant,lags=0,vol=ARCH,p=1,o=0,q=0,dist=normal)
result=model.fit()
result.summary()

这里需要用到arch模块中的arch_model函数,其中的mean参数表示平均方差是一个常数,lags表示滞后项阶数,vol是波动率模型的类型,p为对称随机数的滞后项阶数,o为非对称随机数的滞后项阶数,q为波动率的滞后项阶数,dist表示误差项服从的分布类型。 于是可以看到结果:

下面那个omega和alpha是我们关心的模型中的系数。p值也还可以。 接着再来构建Garch模型,过程与arch几乎一样,就是函数的参数小小调整了一下:

model1=arch.arch_model(data.pct_chg,mean=Constant,lags=0,vol=GARCH,p=1,o=0,q=1,dist=normal)
result1=model1.fit()
result1.summary()

这个结果是有了,看上去也能通过检验,但后面就发现不合理了。 试着求一下长期波动率:

import numpy as np
vol=np.sqrt(result1.params[1]/(1-result1.params[2]-result1.params[3]))
vol

这个结果是: 0.9240148943742655,太惊人了,感觉问题很大,但不知道是哪有问题。 最后将结果进行可视化:

result.plot()
result1.plot()

感觉这个过程少了些什么,自回归条件异方差的阶数没有做自相关图来确定最佳阶数,还有什么呢?反正结果不好看。

经验分享 程序员 微信小程序 职场和发展