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')

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章