波动率不是观察值,人们发现股票市场的波动率有高阶自相关性,这是产生波动聚集的原因。波动率发生一个变化是跟从前面的变化,称为波动聚集。金融时间序列的波动幅度可用方差表示,因此在前一个时间方差大小和方向变动的条件下,当期方差变化的大小和方向的趋势是这一条件决定的,称为条件异方差。条件异方差是t-k项不确定值平方的线性组合,用过去滞后期均方误差和历史期条件方差的两个统计量表示当期条件方差。ARCH模型用滞后值简单二次函数刻画资产收益率序列的不相关和不独立性,即过去的不确定项平方产生条件方差表示不独立性。波动率是市场风险判定的度量,ARCH模型公式刻画金融时间序列波动率,GARCH族模型公式丰富和深化ARCH模型,在高频数据和模型公式应用的更细致的情况下,新的公式将应时推出。

    波动率分析的标准过程:

1.建立资产收益率时间序列。分析时间序列的平稳性、自相关性和偏自相关性,以及数据属性。

2.资产收益率序列的ARCH效应。并且比较Ljung-Box校验

3.建立ARCH模型。关键是确定ARCH阶数,调整模型参数是学生氏、有偏学生氏。若不确定差仍存在ARCH建立arma+arch组合模型,确定arma模型的阶。

4.建立GARCH模型。学生氏和有偏学生氏模型。调整方程参数的显著性,在garch(1,1),garch(1,2),garch(2,1),garch(2,2)的四个模型中进行选择。GARCH模型定阶,常选择garch(1,1)模型。

5.若GARCH模型的不确定差仍存在ARCH效应,则建立arma+garch组合模型。

6.建立股市特征的GARCH族模型公式。

 

4.2.1 波动率

    金融数据分析的兴趣是资产收益率,而不是资产价格。资产收益率是作为风险度量的估计取得应用的,以及资产分配和期权定价。资产收益率的定义有单期简单收益率、多期简单收益率、连续复利收益率、连续复合收益率、资产组合收益率、红利支付、超额收益率,而波动率的分析有两个构造序列:1.日收盘价的对数收益率,称为连续复合收益率。2.实际收益率。日内高频数据的收益率,例如日内5分钟的对数收益率。因为数据来源和统计计算软件的限制,这一章主要介绍日收盘价的对数收益率。

日收盘价(closing) 在t时刻设为pt,则对数收益率rt

                      

利用python中GARCH模型求波动率 garch模型怎么求波动率_R语言

                   (4-1)

根据Tsay的《金融数据分析导论--基于R语言》,数值计算用微分实现对数减法。

4.2.2ARCH模型

ARCH模型有三个方程,资产收益率均值方程、新息正态分布方程、波动率方程,可表示为:

                     

利用python中GARCH模型求波动率 garch模型怎么求波动率_R语言_02

             (4-2) 

式中,是均值方程时间t的新息(innovation)、扰动(shock)、变动,称为不确定项。是均值为0,方差为1的独立同分布随机变量,一般假定服从正态分布。是新息的条件方差,表明大的变动发生的概率更高,但是并一定意味着大的实现值。

    ARCH公式的条件方差虽然可概括过去的各类随机干扰的函数,但是条件方差只与新息的历史值有关,因此只是提供机械方式描述条件方差的行为,所以对正扰动和负扰动反应相同,对参数的限制相当强,对孤立的扰动反应缓慢。ARCH模型公式用fGarch软件包的函数garchFit()建立,ARCH模型是否准确,根据序列数据性质和参数的设置决定。金融时间序列的标准差(Std.Dev.)是波动率的低精度估计。的概率分布可用参数设置为学生t分布或有偏学生t分布,或者广义误差分布GED。ARCH模型公式有两种情况,(1)若金融时间序列没有自相关性,则新息或不确定项为0,均值方程仅有常数项mu。(2)若均值mu不显著,则均值方程可不列出均值,仅是不确定项方程。

波动率分析的标准过程是建立ARCH族模型公式、模型有效性检验和预测三个阶段。ARCH模型不能解释金融时间序列变化的来源和方程的影响因素,不能使用外变量。

4.2.3ARCH 效应

1.不确定项平方序列的低阶自相关性

金融时间序列观测值的增量序列表明 k个时间间隔的观测值依次相关,因此有低阶相关。注意增量相关与周期性成分不同。若对数收益率序列只有低阶相关性或者不相关,然而绝对值序列通常有序列相关性,或者Ljung-Box统计量在5%和10%不同显著水平下,对原假设从不能拒绝到拒绝,或者平方序列有相关性,表明对数收益率序列不独立而有低阶相关性。金融时间序列低阶自相关性的判定标准过程是:

    (1)建立金融时间序列。函数ts()的输出结果在ACF图中能正确显示横坐标,因此建立时间序列不使用函数as.xts()。

    (2)t检验均值显著不为0。函数t.test()

    (3)CSI300 index时间序列和绝对值序列的ACF图和PACF图,发现异常值的相关性和增量序列。

(4)CSI300index时间序列和绝对值序列Ljung-Box统计量。若没有自相关性,则提高lag,或者平方序列的Ljung-Box检验,判定p值。注意自相关性的不同表现。函数Box.test()。

program1   #源程序
library(fGarch)
library(fBasics)
library(fUnitRoots)
library(xlsx)
library(rJava)
library(forecast)
library(urca)
library(zoo)
dfile<-"D:/programsdata/2013CSI.xlsx"       #2013年CSI数据
dset<-read.xlsx(dfile,1)
dset1<-dset      
      #建立对数收益率时间序列dts                                
dset1e=dset1[4,drop=FALSE]
mean(dset1e[,1])
[1]2442.087
dv1=100*(diff(log(dset1e[,1])))             
dset11=data.frame(dv1)   
>head(dset11)
          dv1
1  0.45751458
2-0.42103745
3  0.03151567
4  0.17572747
5-1.88840465
6  3.73470949
>dimnames(dset11)=list(dset1[2:238,1],c("rtn"))
dts=ts(dset11,frequency=237,start=c(2013,1,7),end=c(2013,12,31))
plot(dts)    #见图4-1
  #分析rtn序列和rtn平方序列的自相关性、偏自相关性
par(mfcol=c(2,2))   #见图4-2
acf(dset11,lag=24)   #lag=24是横坐标,?acf间隔为1
pacf(dset11,lag=24)
acf(abs(dset11,lag=24) #绝对值序列的自相关性
pacf(abs(dset11),lag=24)  #绝对值序列的偏自相关性

    从plot图可知,CSI3002013时间序列是平稳时间序列。从4-2自相关图可知,CSI3002013时间序列没有明显的自相关性,但是绝对值序列在lag=2,7,16,20有相关性,并不独立。            

  

 

利用python中GARCH模型求波动率 garch模型怎么求波动率_数据_03

                 图4-1   CSI300 2013 plot图

利用python中GARCH模型求波动率 garch模型怎么求波动率_波动率_04

2.不确定项的ARCH效应

ARCH效应是金融时间序列有条件异方差的前提,ARCH效应的检验用Box.test()检验或拉格朗日乘子法。ARCH效应是均值方程的不确定项平方序列有条件异方差。不确定项是均值方程分离均值的结果(残差),实际是不能用公式和解释变量准确描述的数据项,原因是测量误差或随机因素的影响。拉格朗日乘子法是F统计量,原假设H0:异方差系数为0。若显著水平是5%,p_value<0.05,则拒绝H0,说明有条件异方差。拉格朗日检验等价线性回归(lm)中检验不确定项的F统计量:

利用python中GARCH模型求波动率 garch模型怎么求波动率_R语言_05

                     (4-3)   

式中,m是阶数lag,T是金融时间序列长度,是误差项,可称为残差。at与{at-1,...,at-m}的相关关系可描述为,当T充分大时,在原假设下,F统计量渐近服从自由度为m的分布。

    当判定CSI 300 index序列有低阶相关性后,则可判定序列的ARCH效应。标准过程:

(1)均值方程不确定项的获得。分离均值,得到扰动项或新息。

(2)不确定项平方序列的Ljung-Box统计量检验。

       原假设:平方序列前m个间隔的ACF值为0。

(3)函数archTest()应用拉格朗日乘子法,对CSI300时间序列判定ARCH效应。 

    不确定项平方序列与对数收益率平方序列的ARCH效应检验结果相同,但是在建立ARCH模型中,则对常量的取值有不同影响。应用Tsay的archTest()函数判定ARCH效应,源程序见下:


"archTest" <- function(rtn,m=10){

 
# Perform Lagrange Multiplier Test for ARCH effect of a time series
 
# rtn: time series
 
# m: selected AR order
 
#
 
y=(rtn-mean(rtn))^2      #不确定项的平方序列
 
T=length(rtn)           #样本容量T
 
atsq=y[(m+1):T]         #F统计量         
 
x=matrix(0,(T-m),m)     #建立m不确定项子集的矩阵
 
for (i in 1:m){

 
   x[,i]=y[(m+1-i):(T-i)] 
 
}
 
md=lm(atsq~x)        #lm()拟合atsq~x,取得(m+1)个条件异方差
 
summary(md)         #     统计信息
 
}
 
 
 
> archTest(dset11[,1],12)  
 
##Call:
##lm(formula = atsq ~ x)
##Residuals:
##  Min     1Q Median     3Q   Max 
##-5.786 -1.732 -1.217  0.393 37.754 
##Coefficients:
##             Estimate Std. Error t valuePr(>|t|)   
##(Intercept)    1.665851  0.518023   3.216   0.0015 ** #截踞
##x1           0.003085   0.068520  0.045   0.9641    #系数
##x2           0.123641   0.068550  1.804   0.0727 . 
##x3          -0.020541   0.068997 -0.298   0.7662   
##x4          -0.040732   0.068908 -0.591   0.5551   
##x5          -0.043911   0.068881 -0.637   0.5245   
##x6           0.004779   0.068411  0.070   0.9444   
##x7           0.125077   0.067102   1.864  0.0637 . 
##x8          -0.022395   0.067655 -0.331   0.7410   
##x9          -0.059000   0.067529 -0.874   0.3833   
##x10          0.041033   0.067655  0.607   0.5448   
##x11         -0.018949   0.067310 -0.282   0.7786   
##x12          0.058023   0.067328  0.862   0.3898   #系数
##---
##Signif. codes:  0 ‘***’0.001 ‘**’0.01 ‘*’0.05 ‘.’0.1 ‘ ’1
##Residual standard error: 4.228 on 212degrees of freedom
##Multiple R-squared:  0.03948,  Adjusted R-squared:  -0.01489 
##F-statistic: 0.7262 on 12 and 212DF,  p-value: 0.725
F=0.7262,p值为0.725,表明2013年的CSI300数据没有arch效应。在这个条件下,应将结果与Ljung-Box统计量比较。
>y=dset11[,1]
>mean(y)     #CSI 300 2013均值
##[1] -0.03380909
>y2=y-mean(y) #分离均值 
>Box.test(y2^2,lag=12,type='Ljung')  #不确定项平方序列的Ljung_Box统计量
##      Box-Ljung test
##data: y2^2
##X-squared = 7.9725, df = 12, p-value =0.7873

    LB检验的统计量Q(12)=7.9725,p-value=0.7873,同样表明CSI 300 2013没有ARCH效应。若金融时间序列并没有ARCH效应或ARCH模型阶数低,则最常用的解决问题的方法是增加样本空间,因此将CSI300 2014~2015年的数据增加到时间序列,则样本容量n=726。并且应用更完整的标准过程判断ARCH效应。

(1)CSI300 2013~2015时间序列属性

金融时间序列属性有概率核密度函数,四个特征统计量和分位数。属性和统计量可用basicStats()或summary(),比较CSI2013和CSI2015。数学期望E、方差D、偏度(Skewness)和峰度(kurtosis)是四个特征统计量。收益率序列的均值上升和下降表明收益率增长或变小。波动率是条件方差,标准差( Std.Dev.)是对波动率的粗略估计,分布图若标准差远大于均值则表明股票市场风险较大。

偏度与正态分布属性。若中位数和均值相差多,则收益率分布有左偏或右偏,若有一个较长的左尾,表明出现异常负收益率比出现异常正收益率的可能性大。

dfile2<-"D:/programsdata/2014CSI.xlsx";         #2014年CSI数据
dfile3<-"D:/programsdata/2015CSI.xlsx";         #2015年CSI数据
dset2014<-read.xlsx(dfile2,1);
dset2015<-read.xlsx(dfile3,1);
> dset12=dset2014[,4,drop=F]
> dim(dset12)
[1] 245  1
> mean(dset12[,1])
[1] 2372.951
> dset13=dset2015[,4,drop=F]
> dim(dset13)
[1] 244  1
> mean(dset13[,1])   #2015年均值上升
[1] 3929.914
> colnames(dset12)=c("rtn")
> colnames(dset13)=c("rtn")
> dset2=rbind(dset11,dset12,dset13)
> dim(dset2)
[1] 726  1
>basicStats(y)
hist(y,nclass=30)       #直方图
>d1=density(y)         #核密度图
>range(y)
[1] -9.154204  6.498852
>x=seq(-10.0,7.0,0.01)
>y1=dnorm(x,mean(y),stdev(y)) #正态分布密度函数
>plot(d1$x,d1$y,xlab='rtn',ylab='density',type='l')
>lines(x,y1,lty=2)       #正态分布比较
#是否正态分布
>normalTest(y,method='jb')  #JB-test
 Test Results:
  STATISTIC:
    X-squared: 73.7921 
  P VALUE:
    Asymptotic p Value: < 2.2e-16   #拒绝正态性

峰度的k值变化,尖峰现象更加突出,则出现极端值的可能性减小。