CSI 300 波动率程序

 library(fGarch)   #R语言CSI300数据分析程序

library(fBasics)

library(fUnitRoots)

library(xlsx)

library(rJava)

library(forecast)

library(timeDate)

library(zoo)

    #建立对数收益率时间序列

dfile<-"D:/programsdata/2013CSI.xlsx";         #2013CSI数据

dset<-read.xlsx(dfile,1);

dset1<-dset

dset1e=dset1[,4,drop=FALSE]     #注意dset1e=dset1[4,drop=FALSE]出现警告

dv1=100*(diff(log(dset1e[,1])))            

dset11=data.frame(dv1)  

dfile2<-"D:/programsdata/2014CSI.xlsx";         #2014CSI数据

dfile3<-"D:/programsdata/2015CSI.xlsx";         #2015CSI数据

dset2014<-read.xlsx(dfile2,1);

dset2015<-read.xlsx(dfile3,1);

dset1f=dset2014[,4,drop=F]

dset1g=dset2015[,4,drop=F]

colnames(dset11)=c("rtn")

dv2=100*(diff(log(dset1f[,1])))

dset12=data.frame(dv2)

dv3=100*(diff(log(dset1g[,1])))

dset13=data.frame(dv3)

colnames(dset12)=c("rtn")

colnames(dset13)=c("rtn")

dset2=rbind(dset11,dset12,dset13)  #CSI300 对数收益率序列

y=dset11[,1]

y1=dset2[,1]

dts=ts(y1,frequency=244,start=c(2013,1,9))  #建立对数收益率时间序列

plot(dts)

par(mfcol=c(2,2))  

acf(dset11,lag=24)  

pacf(dset11,lag=24)

acf(abs(dset11),lag=24)

pacf(abs(dset11),lag=24) 

      #判定“波动率”的ARCH效应

"archTest" <- function(rtn,m=10){#Tsay判断ARCH效应函数
# 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)           
atsq=y[(m+1):T]                   
x=matrix(0,(T-m),m)    
for (i in 1:m){
   x[,i]=y[(m+1-i):(T-i)]  
}
md=lm(atsq~x)        
summary(md)         
}

archTest(dset11[,1],12) 

    #数据属性

y=dset11[,1]

mean(y)  #均值

Box.test((y1-mean(y1))^2,lag=12,type='Ljung') #LB统计量Q(12)值

basicStats(y1) #基本统计量信息

basicStats(y)  #2013

basicStats(dv3)  #2015

hist(y1,nclass=30)  #直方图

d1=density(y1) #核密度函数

range(y1)

x=seq(-10.0,7.0,0.01)

y2=dnorm(x,mean(y1),stdev(y1))  #正态分布

plot(d1$x,d1$y,1xlab='rtn',ylab='density',type='l')  #核密度图

lines(x,y2,lty=2)

normalTest(y,method='jb')  #正态分布效应

par(mfcol=c(1,1))

pacf(y1^2,lag=100)

pacf(y1^2,lag=24)

  #建立ARCH模型

cm11=garchFit(~1+garch(4,0),data=y1,trace=F) #arch(4,0)

summary(cm11)

cm12=garchFit(~1+garch(3,0),data=y1,trace=F)

summary(cm12)

cm13=garchFit(~1+garch(3,0),data=y1,trace=F,cond.dist="std")  #条件分布调整

summary(cm13)

cm15=garchFit(~1+garch(3,0),data=y1,trace=F,cond.dist="sstd")

summary(cm15)

cm16=garchFit(~1+garch(4,0),data=y1,trace=F,cond.dist="std")

summary(cm16)

resi=residuals(cm16,standardize=T)   #判定模型有效性

par(mfcol=c(3,1))

plot(1:724,resi,xlab='date',ylab='stand-resi',type='l')

acf(resi,lag=20)

pacf(resi^2,lag=20)

plot(cm16)

cm1=garchFit(~1+garch(3,0),data=y1,trace=F)   #比较波动率的不确定差,模型选择

cm2=garchFit(~1+garch(3,0),data=y1,trace=F,cond.dist="std")

cm3=garchFit(~1+garch(4,0),data=y1,trace=F,cond.dist="std")

resi3.0=residuals(cm1,standardize=T)

resi3.std=residuals(cm2,standardize=T)

resi4.std=residuals(cm3,standardize=T)

par(mfcol=c(3,1))

plot(1:724,resi3.0,xlab='date',ylab='stand-resi-3.0',type='l')

plot(1:724,resi3.0,xlab='date',ylab='stand-resi-3.0std',type='l')

plot(1:724,resi3.0,xlab='date',ylab='stand-resi-4.0std',type='l')

    #建立Garch模型

gcm1=garchFit(~1+garch(1,1),data=y1,trace=F) #garch(1,1)模型

summary(gcm1)

gcm2=garchFit(~1+garch(1,2),data=y1,trace=F)

summary(gcm2)

gcm3=garchFit(~1+garch(2,1),data=y1,trace=F)

summary(gcm3)

gcm4=garchFit(~1+garch(2,2),data=y1,trace=F)

summary(gcm4)

gcm5=garchFit(~1+garch(1,1),data=y1,trace=F,cond.dist="std") #garch(1,1)学生氏模型

summary(gcm5)

gcm6=garchFit(~1+garch(1,1),data=y1,trace=F,cond.dist="sstd") #garch(1,1)有偏学生氏模型

summary(gcm6)

#建立组合模型

arm=arima(y1,order=c(4,0,2))  #arima模型

summary(arm)

tsdiag(arm) #模型诊断

gcm7=garchFit(~arma(4,2)+garch(1,1),data=y1,trace=F)  #arma(4,2)+garch(1,1)

summary(gcm7)

gcm8=garchFit(~arma(2,2)+garch(1,1),data=y1,trace=F)  #arma(2,2)+garch(1,1)

summary(gcm8)

gcm9=garchFit(~arma(2,2)+garch(1,1),data=y1,trace=F,cond.dist="std") #arma(2,2)+garch(1,1)学生氏模型

summary(gcm9)

    #garch组合模型数据拟合优度

v1=volatility(gcm9)     #提取arma(2,2)+garch(1,1)学生氏模型波动率

resi=residuals(gcm9,standardize=T)

vol=ts(v1,frequency=244,start=c(2013,1,9))

res=ts(resi,frequency=244,start=c(2013,1,9))

par(mfcol=c(2,1))

plot(vol,xlab='date',ylab='volatility',type='l')

plot(res,xlab='date',ylab='st. resi',type='l')

par(mfcol=c(2,2))

acf(resi,lag=24)

pacf(resi,lag=24)

acf(resi^2,lag=24)

pacf(resi^2,lag=24)

  #参数估计模型的预期

par(mfcol=c(1,1))

upp=0.16479+2*v1  

low=0.16479-2*v1   

tdx=c(1:724)

plot(tdx,dts,xlab='date',ylab='series',type='l',ylim=c(-8.0,8.0))

lines(tdx,upp,lty=2,col='red')

lines(tdx,low,lty=2,col='red')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值