[关闭]
@fanxy 2020-05-03T18:16:31.000000Z 字数 6883 阅读 6085

第十一讲 波动率模型及应用(II)

樊潇彦 复旦大学经济学院 金融数据


下载:Ch11_Data.rar

  1. # 准备工作
  2. setwd("D:\\...\\Ch11")
  3. ## 调用
  4. library(fGarch)
  5. library(rugarch)
  6. library(tidyverse)
  7. library(readxl)
  8. library(ggplot2)
  9. library(tseries)
  10. library(zoo)
  11. library(forecast)

3. GARCH模型(续)

3.4 指数GARCH模型(EGARCH)

考虑到正的和负的资产收益率的非对称效应,Nelson(1991)提出了指数GARCH(m,n)模型:

注:Tsay(2015,P171)第二行:

与GARCH模型相比,EGARCH模型有两点改进:
1. 使用对数条件方差,放松了对模型系数非负性的限制
2. 股价上升/下跌( 为正/负)对模型的影响不对称。当 时,价格下跌()将使资产波动率上升,存在杠杆效应

  1. load("AAPL.RData")
  2. colnames(AAPL)
  3. ret.aapl=diff(log(zooreg(AAPL)$AAPL.Close)) # 计算收益率
  4. plot(ret.aapl)
  5. egarch11.spec = ugarchspec(
  6. variance.model = list(model="eGARCH", garchOrder=c(1,1)),
  7. mean.model = list(armaOrder=c(0,0))) # 设定EGARCH(1,1)模型
  8. aapl.egarch11.fit = ugarchfit(spec=egarch11.spec, data=ret.aapl)
  9. aapl.egarch11.fit
  10. plot(aapl.egarch11.fit,which=12) # 冲击影响非对称,存在杠杆效应
  11. # 与GARCH(1,1)模型比较
  12. garch11.spec = ugarchspec(
  13. variance.model =list(model="sGARCH", garchOrder=c(1,1)),
  14. mean.model = list(armaOrder=c(0,0)))
  15. aapl.garch11.fit = ugarchfit(spec=garch11.spec, data=ret.aapl)
  16. plot(aapl.garch11.fit,which=12) # 冲击影响对称,没有杠杆效应
  1. # P171(4-34)式
  2. source("Egarch.R")
  3. da=read.table("m-ibmsp6709.txt",header=T)
  4. head(da)
  5. ibm=log(da$ibm+1)
  6. Box.test(ibm,lag=12,type='Ljung')
  7. m1=Egarch(ibm)
  8. # 用rugarch包中命令回归
  9. egarch11.spec= ugarchspec(
  10. variance.model =list(model="eGARCH", garchOrder=c(1,1)),
  11. mean.model = list(armaOrder=c(0,0),include.mean=T))
  12. ibm.egarch11.fit = ugarchfit(spec=egarch11.spec, data=ibm)
  13. ibm.egarch11.fit

3.5 门限GARCH模型(TGARCH)

  1. # 欧元兑美元汇率数据,P174:(4-36)式
  2. da=read.table("d-useu9910.txt",header=T)
  3. eu=diff(log(da$rate))*100
  4. source('Tgarch11.R') # 原文件中 filter 命令前加上 stats::
  5. m1=Tgarch11(eu)
  6. # 用rugarch包中命令回归
  7. tgarch11.spec = ugarchspec(
  8. variance.model = list(model="gjrGARCH", garchOrder=c(1,1)), # GJR模型
  9. mean.model = list(armaOrder=c(0,0),include.mean=T))
  10. eu.tgarch11.fit = ugarchfit(spec=tgarch11.spec, data=eu)
  11. eu.tgarch11.fit
  12. # TGARCH杠杆效应作图
  13. plot(eu.tgarch11.fit, which=12)

3.6 非对称幂ARCH模型(APARCH)

  1. # P175:汇率数据的APARCH模型
  2. m1=garchFit(~1+aparch(1,1),data=eu,trace=F)
  3. summary(m1)
  4. m2=garchFit(~1+aparch(1,1),data=eu,trace=F,delta=2,include.delta=F) # delta=2, TGARCH(1,1)模型
  5. summary(m2)
  6. # 用rugarch包中命令回归
  7. aparch11.spec = ugarchspec(
  8. variance.model = list(model="apARCH", garchOrder=c(1,1)),
  9. mean.model = list(armaOrder=c(0,0),include.mean=T))
  10. eu.aparch11.fit = ugarchfit(spec=aparch11.spec, data=eu)
  11. # APARCH杠杆效应作图
  12. plot(eu.aparch11.fit, which=12)

3.7 非对称GARCH模型(NGARCH 或 AGARCH)

  1. # P178:(4-41)式
  2. source("Ngarch.R")
  3. m1=Ngarch(eu)
  4. summary(m1)
  5. # 用rugarch包中命令回归
  6. ngarch11.spec = ugarchspec(
  7. variance.model = list(model="fGARCH",submodel = "NAGARCH", garchOrder=c(1,1)),
  8. mean.model = list(armaOrder=c(0,0)))
  9. eu.ngarch11.fit = ugarchfit(spec=ngarch11.spec, data=eu)
  10. # NGARCH杠杆效应作图
  11. plot(eu.ngarch11.fit, which=12)

4. 用高频率数据估计波动率

高频数据包括两种:一是每天同一价格(如收盘价),另一种是每天开盘、最高、最低、收盘(OHLC)四种价格,这两种高频的日度数据都可以用来计算低频的月度(或年度)收益率。用 TTR 包中的 volatility(OHLC, calc = "close", n = 10, N = 260, ...) 命令可以轻松实现,其中 n 为天数,N 为一年的交易日数,calc 为不同的估计方法,具体包括:

  1. da=read.table("d-sp58010.txt",header=T) # 1980-2010年S&P500数据
  2. head(da)
  3. ohlc <- da[,c("Open","High","Low","Close")]
  4. library(TTR)
  5. vClose <- volatility(ohlc, calc="close")
  6. plot(vClose,type="l")
  7. par(mfcol=c(3,1))
  8. tdx=c(1:7737)/253+1980
  9. vYZ63 <- volatility(ohlc, calc="yang.zhang", n=63, N=252) # 窗口为63期
  10. plot(x=tdx,vYZ63,type="l",xlab="")
  11. vYZ32 <- volatility(ohlc, calc="yang.zhang", n=32, N=252) # 窗口为32期
  12. plot(x=tdx,vYZ32,type="l",xlab="")
  13. cl=da[,"Close"]
  14. rtn=diff(log(cl)) # 计算收盘价对数回报率
  15. armagarch= ugarchspec(
  16. variance.model = list(model="sGARCH", garchOrder=c(1,1)),
  17. mean.model = list(armaOrder=c(4,0),include.mean=T))
  18. fitted=ugarchfit(spec=armagarch, data=rtn) # P186:ARMA-GARCH模型
  19. names(fitted@fit) # 查看估计结果的名称
  20. vARMAGARCH=fitted@fit$sigma
  21. plot(x=tdx[-1],vARMAGARCH,type="l",xlab="") # sigma作图

5. 波动率预测

  1. aapl.garch11.fit = ugarchfit(spec=garch11.spec, data=ret.aapl, out.sample=20)
  2. aapl.garch11.fcst = ugarchforecast(aapl.garch11.fit, n.ahead=10, n.roll=10)
  3. plot(aapl.garch11.fcst)
  4. plot(aapl.garch11.fcst, which='all')

课后练习

纽约大学斯特恩商学院波动研究所的波动实验室提供了大量金融数据的建模结果:

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注