R语言实现:基于GARCH模型的股市危机预警

作者:huozi07

http://blog.csdn.net/huoz07/artile/details/48176587

为防范股票市场上的不确定性和风险,有效地度量股票指数收益率的波动性显得尤为重要。本文运用GARCH族模型拟合了股票指数收益率的波动性方程并实证研究了全球有代表性的上证综指、NASDAQ指数、德国DAX、日本日经指数。结果表明四个国家股票收益率均有聚集性、持续性,股票市场存在着冲击的非对称性。具体而言,美国、德国、日本股票市场对利空消息敏感,而对利好消息保持谨慎。而中国对利好利空消息均敏感,体现市场抗风险的薄弱性。此外,本文尝试使用SGARCH模型对股票收益率序列进行滚动预测,取得较好预测精度,同时文章首创性的基于Var曲线提出了股市危机预警信号。这些方案可以帮助投资者合理投资,增强股市的合理性、抗风险性。

各个股票市场操作方法类似,以上证指数为例展示代码。

包载入与数据预处理:

  1. #包载入
  2. library(fGarch)
  3. library(rugarch)#garch拟合与预测
  4. library(TSA)#BIC准则确定arma阶数 eacf确定garch阶数
  5. library(tseries)
  6. library(zoo)#转换成时间序列类型
  7. library(forecast)#auto.arima() arma阶数确定方法
  8. library(psych)#数据描述统计分析
  9. library(ggplot2)#绘图
  10. library(ccgarch)#JB统计量
  11. ###NASDAQ
  12. #数据预处理
  13. StockData<-read.csv("D:\\rwork\\课程设计\\SHANGZHENG1992-2015.csv",encoding='utf-8',header = T) #header = Falese
  14. time<-as.Date(StockData$'time',format="%Y/%m/%d")
  15. closeprice<-StockData$'closeprice'
  16. data<-zoo(closeprice,time)
  17. #选中局部数据
  18. selectdata=window(data, start = as.Date("2005-01-01"), end = as.Date("2015-05-01"))
  19. plot(selectdata,xlab="time",ylab="index",main="Shanghai Composite Index")
  20. rlog=log(selectdata)
  21. rlogdiff=diff(log(selectdata))*100 #数据转换
  22. rlogdifftime=index(rlogdiff)
  23. rlogdiffdata=coredata(rlogdiff)

数据样例:

数据描述与模型匹配检验

(1)正态性检验

  1. par(mfrow=c(1,3),oma=c(0.2,0.2,0.2,0.2))
  2. hist(rlogdiff,main="Shanghai Composite Index Log Return Distribution",col="yellow",xlab="",ylim=c(0,0.4),probability=T)
  3. lines(density(rlogdiff),lwd=1);rug(rlogdiff)#first graph
  4. qqnorm(rlogdiff);qqline(rlogdiff)#second graph
  5. plot(rlogdiff,ylab="value");abline(h=0,lty=2)#third graph

分布为数据分布函数,QQ图,对数收益率序列折现图。

收益率分布图、QQ图可以看出金融时间序列确实表现出尖峰厚尾性,相对于标准正态分布,峰度更高,两段的尾部更厚,也就是极值更多。由收益率波动序列可以看出各国股票指数收益率序列在样本区间内均表现出一定的波动性和聚集性,其中2008-2009年波动幅度尤为明显。

同时也可以用统计量检验正态性

  1. shapiro.test(rlogdiffdata)

#值越大,越表示不是正态,P越小越非正态

其他数据描述:

  1. describe(rlogdiffdata)
  2. jb.test(rlogdiffdata)

(2)平稳性检验

  1. #若 ADF p<0.0 认为序列是均值回归的
  2. adf.test(rlog,alt="stationary") #注意 这是未差分的数据
  3. adf.test(rlogdiffdata,alt="stationary" #这是差分后的数据

p<0.01序列为平稳序列

(3)ARCH 效应检验

  1. #得先arima拟合模型,对残差进行LM检验
  2. armamodel=auto.arima(rlogdiff) #自动基于AIC最小准则,寻找最佳拟合模型
  3. armamodel
  4. plot(residuals(armamodel))
  5. par(mfrow=c(1,1))
  6. lmresult=McLeod.Li.test(y=residuals(armamodel)) #残差arch效应很显著

由图可知,残差序列滞后36阶后,残差自回归函数的系数显著,序列仍然存在自相关。因此 拒绝原假设,说明样本序列存在显著的ARCH效应。 综上,对数收益率序列具有波动聚集性,序列平稳,有显著ARCH效应。序列时候GARCH模型建模。

模型拟合

分别使用SGARCH与EGARCH模型拟合序列,SGARCH拟合效果更合适。但是EGARCH能分析收益率序列的“杠杆效应”此处以EGARCH做演示

  1. myspec=ugarchspec(
  2. variance.model = list(model = "eGARCH", garchOrder = c(1, 1)),
  3. mean.model = list(armaOrder = c(0,0), include.mean = TRUE),
  4. distribution.model = "std"
  5. )
  6. myfit=ugarchfit(myspec,data=rlogdiff,solver="gosolnp")
  7. myfit

模型诊断

  1. #残差正态性检验
  2. plot(myfit,which=8)
  3. plot(myfit,which=9)
  4. shapiro.test(coredata(residuals(myfit))) #值越大,越表示不是正态,P越小越非正态
  5. #残差相关性检验
  6. acf(coredata(residuals(myfit)))
  7. acf(residuals(myfit))
  8. plot(myfit,which=10)
  9. plot(myfit,which=11)
  10. #系数是否显著
  11. myfit #看P值是否够小
  12. #拟合效果 残差如何
  13. plot(myfit,which=3)
  14. plot(residuals(myfit)) #看残差

插曲:

各国收益率信息冲击曲线

  1. plot(myfit,which=12)

从上图可以看出,美国、德国、日本股票指数收益率在信息冲击小于零(即利空消息或负冲击)时比较陡峭,而在信息冲击大于零(即利好消息或正冲击时)则比较平缓。而上证综指在利空利好消息时曲线均走势陡峭。与其他国家有明显差异,说明上证综指对对消息敏感,抗风险能力较弱。

综上,用GARCH模型拟合收益率序列切实可行。

基于VAR曲线的收益风险预警

实现代码:

  1. spec = ugarchspec(variance.model = list(model = "sGARCH"), distribution.model = "std")
  2. cl = makePSOCKcluster(10)
  3. #滚动预测
  4. roll = ugarchroll(spec, rlogdiff, n.start =300,refit.every = 300,
  5. refit.window = "moving", solver = "hybrid", calculate.VaR = TRUE,
  6. VaR.alpha = c(0.01, 0.025, 0.05), cluster = cl,keep.coef = TRUE)

预测残差

  1. report(roll, type = "fpm")

结果展示

[plain] view plain copy

  1. plot(roll,which=4,VaR.alpha=0.01)

由上图可知在较大波动率之前确实有一些点落在Var曲线以下(标注为红点)。但在波动平稳期,模型预警正确率不高(如2011年4月到2013年4月)所以该模型在波动率非平稳期有一定参考价值。

以上证指数为例,在五月以前有不少收益率值落在了var曲线以下。可见,现在上证指数的大跌在之前是有留下一定信号的。

原文发布于微信公众号 - 大数据挖掘DT数据分析(datadw)

原文发表时间:2016-08-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏量子位

李飞飞CVPR最新论文 | 「文本转图」效果优化可多一步:物体关系描述

If有一款神器,可以根据文本生成图像,快速做出一般客户需求的海报,设计师们也许就可以把更多的时间用在创意上了。

632
来自专栏新智元

【1996~2016】盘点 20 年 AAAI 人工智能最佳论文

【新智元导读】新智元汇集计算机科学领域1996年到2016年人工智能领域最佳论文,附上题目及摘要的中文翻译,并对这些作品进行系统考察,从中可以看出人工智能这门学...

3889
来自专栏数说工作室

P值之死

有一天,我走进统计学的神殿 ,将所有谎言都装进原假设的盒子里, “P值为零”, 一个声音传来, “但你已经不能再拒绝,因为,P值已经死了” 从此,这个世界上充斥...

3467
来自专栏java一日一条

细数20世纪最伟大的10大算法

[1946: John von Neumann, Stan Ulam, and Nick Metropolis, all at the Los Alamos S...

481
来自专栏智能算法

细数 20 世纪最伟大的十大算法

英文:Barry A. Cipra 译者:JULY 链接:blog.csdn.net/v_july_v/article/details/6127953 发明...

32110
来自专栏AI2ML人工智能to机器学习

深度学习名校课程大全

在吴恩达的最新《深度学习》课程里面, 鼻祖辛顿(参考“攒说 Geoff Hinton”)反复强调这是一场革命,或许不如第二次工业革命的影响力, 但是类似规模还是...

833
来自专栏IT派

细数二十世纪最伟大的10大算法(Top10)

[1946: John von Neumann, Stan Ulam, and Nick Metropolis, all at the Los Alamos S...

983
来自专栏MixLab科技+设计实验室

研究了一堆Q-learning资料后,写了这份指南

“我从来不相信什么懒洋洋的自由,我向往的自由是通过勤奋和努力实现的更广阔的人生,那样的自由才是珍贵的、有价值的;我相信一万小时定律,我从来不相信天上掉馅饼的灵感...

1123
来自专栏绿巨人专栏

读书笔记: 博弈论导论 - 02 - 引入不确定性和时间

2776
来自专栏AI科技评论

开发 | 手工搭建神经网络太费劲?来试试精确度高达94.1%的进化算法

AI科技评论按:阳春三月,辽阔的南美洲大草原上,两只体格强健的雄性美洲豹正在为争夺一只拥有美丽花纹的雌豹,进行着一场血腥而又激烈的较量。它们心里很清楚,成者为王...

34614

扫码关注云+社区