在当今复杂多变的金融市场中,准确理解和预测股票指数的走势对于投资者和金融机构而言至关重要。
在当今复杂多变的金融市场中,准确理解和预测股票指数的走势对于投资者和金融机构而言至关重要。
GARCH 模型作为一种有效的工具,能够捕捉金融时间序列数据中的波动聚集性和异方差性,为我们提供更深入的市场洞察。
准确预测股票指数的波动对于实现稳健的投资回报至关重要。本研究中所提供的代码和分析文章,为投资者和研究者提供了一种强大且实用的工具,能够直接应用于投资决策、风险评估以及交易策略的制定。
本研究旨在对股票指数数据进行全面而深入的分析,通过读取、处理和拟合 GARCH 模型,来揭示数据中的潜在规律和趋势,并进行预测和评估。我们首先读取并合并了相关的股票指数数据,经过一系列的处理和转换,为后续的分析做好准备。然后,运用多种方法拟合 GARCH 模型,并进行了严格的检验和评估,包括模型的稳定性、残差的分布、预测效果等方面。
可下载资源
作者
通过这些步骤,我们期望能够为金融领域的研究和实践提供有价值的参考和决策依据。
数据读取
通过 library(data.table)
加载所需库后,运用以下代码读取两个股票指数数据。
并将其转换为 data.table
格式以便后续高效处理:
HSI=as.data.table(HSI)SSECI=as.data.table(SSECI)
视频
时间序列分析模型 ARIMA-ARCH GARCH模型分析股票价格数据
视频
LSTM模型原理及其进行股票收盘价的时间序列预测讲解
同样将合并后的数据转换为 data.table
格式:
data=as.data.table(data)
展示合并后数据的前几行,以初步了解数据概况:
head(data)
数据选择与进一步处理
仅选取 Close.x
和 Close.y
列用于后续分析:
data=data[,c("Close.x", "Close.y")]
加载 rugarch
库为后续分析做准备:
library(rugarch)
将数据转换为数据框格式,并将各列转换为数值型,此过程中出现了强制类型转换产生 NA
值的警告:
yield<-as.data.frame(data)for(i in 1:ncol(yield))yield[,i]=as.numeric(as.character(yield[,i]))
计算收益率:
yield[,1] =c(NA,diff(yield[,1] )/yield[,1][-length(yield[,1] )])yield[,2] =c(NA,diff(yield[,2] )/yield[,2][-length(yield[,2] )])
再次将数据转换为 data.table
格式:
yield=as.data.table(yield)
最后,使用 ts.plot
函数绘制时间序列图进行初步的可视化分析:
ts.plot(yield,col=1:2)
数据统计描述
首先,对收益率数据 yield
进行统计概括:
summary(yield)## Close.x Close.y ## Min. :-0.12700 Min. :-0.088406 ## 1st Qu.:-0.00681 1st Qu.:-0.006785 ## Median : 0.00036 Median : 0.000351 ## Mean : 0.00018 Mean : 0.000324 ## 3rd Qu.: 0.00751 3rd Qu.: 0.007739 ## Max. : 0.14347 Max. : 0.098570 ## NA's :131 NA's :4
方差计算与数据处理
计算数据的方差,并剔除其中的缺失值:
var(yield)yield=na.omit(yield)
GARCH 模型拟合与分析
分别使用不同的方法进行 GARCH(1,1) 模型的拟合:
# GARCH(1,1)-normgarch_norm<-garchFit(yield~ garch(1, 1),trace=FALSE)garch_norm# 另一种方法spec<-ugarchspec(variance.model=list(garchOrder=c(1,1)), mean.model=list(armaOrder=c(0,0)))fit <- ugarchfit(spec = spec, data = yield)fit
模型检验与评估
对拟合的模型进行多种检验和评估,包括:
# 信息准则# 加权 Ljung-Box 检验# 加权 ARCH LM 检验# Nyblom 稳定性检验# 符号偏差检验# 调整的皮尔逊拟合优度检验
预测
进行预测并展示预测结果:
通过以上步骤,完成了对股票指数收益率数据的全面分析和预测。
garch_norm<-garchFit(yield[,2]~ garch(1, 1),trace=FALSE)garch_norm#### Title:## GARCH Modelling#### Call:## garchFit(formula = yield[, 2] ~ garch(1, 1), trace = FALSE)#### Mean and Variance Equation:## data ~ garch(1, 1)## <environment: 0x000000001d965b48>## [data = fGarch::dem2gbp]#### Conditional Distribution:## norm#### Coefficient(s):## mu omega alpha1 beta1 ## -0.0061903 0.0107614 0.1531341 0.8059737 #### Std. Errors:## based on Hessian#### Error Analysis:## Estimate Std. Error t value Pr(>|t|) ## mu -0.006190 0.008462 -0.732 0.464448 ## omega 0.010761 0.002838 3.793 0.000149 ***## alpha1 0.153134 0.026422 5.796 6.8e-09 ***## beta1 0.805974 0.033381 24.144 < 2e-16 ***## ---## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' 1#### Log Likelihood:## -1106.608 normalized: -0.5605916#### Description:## Fri Dec 15 10:51:22 2017 by user: Administrator
预测
进行预测操作:
garch_norm<-garchFit(yield[,2]~ garch(1, 1),trace=FALSE)garch_norm#### Title:## GARCH Modelling#### Call:## garchFit(formula = yield[, 2] ~ garch(1, 1), trace = FALSE)#### Mean and Variance Equation:## data ~ garch(1, 1)## <environment: 0x000000001d965b48>## [data = fGarch::dem2gbp]#### Conditional Distribution:## norm#### Coefficient(s):## mu omega alpha1 beta1 ## -0.0061903 0.0107614 0.1531341 0.8059737 #### Std. Errors:## based on Hessian#### Error Analysis:## Estimate Std. Error t value Pr(>|t|) ## mu -0.006190 0.008462 -0.732 0.464448 ## omega 0.010761 0.002838 3.793 0.000149 ***## alpha1 0.153134 0.026422 5.796 6.8e-09 ***## beta1 0.805974 0.033381 24.144 < 2e-16 ***## ---## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' 1#### Log Likelihood:## -1106.608 normalized: -0.5605916#### Description:## Fri Dec 15 10:51:22 2017 by user: Administrator
预测
进行预测操作:
随时关注您喜欢的主题
head(sigma(forc))## 1981-04-27 08:00:00## T+1 0.007670930## T+2 0.007737697## T+3 0.007803402## T+4 0.007868074## T+5 0.007931742## T+6 0.007994435
展示预测的拟合值:
head(fitted(forc))## 1981-04-27 08:00:00## T+1 0.0005101378## T+2 0.0005101378## T+3 0.0005101378## T+4 0.0005101378## T+5 0.0005101378## T+6 0.0005101378
最后绘制预测结果:
plot(forc,which=1 )
首先进行了(Christoffersen)测试。通过以下代码实现:
filt=fitVaR = fitted(filt) + sigma(filt)*qdist("sstd", p=0.05, mu = 0, sigma = 1 )print(VaRTest(0.05, as.numeric(yield$Close.x), as.numeric(VaR)))
测试结果显示:
- 预期超出值为 206。
- 实际超出值为 266。
- 相关假设检验的结果包括“Correct Exceedances”“Correct Exceedances & Independent”等,决策均为“Reject H0”。
GJR-GARCH
接着,构建了 GJR-GARCH 模型。
模型拟合结果表明:
- 均值模型为 ARFIMA(1,0,1),分布为 std。
- 最优参数如 mu、ar1 等的估计值、标准误差、t 值和 p 值得以给出。
- 稳健标准误差也相应列出。
- 对数似然值为 12320.69。
- 信息准则包括 Akaike、Bayes 等。
- 多种检验如加权 Ljung-Box 检验、加权 ARCH LM 检验、Nyblom 稳定性检验、Sign Bias 检验、Adjusted Pearson 拟合优度检验等的结果一并呈现。
最后进行了预测:
forc = ugarchforecast(gjrGARCH )
预测结果包括未来 10 步的序列值和标准差,通过绘图可直观展示。
模型拟合结果呈现如下:
- 条件方差动态:GARCH 模型为 gjrGARCH(1,1),均值模型为 ARFIMA(1,0,1),分布为 std。
- 最优参数的估计值、标准误差、t 值和 p 值得以给出,如 mu、ar1 等。
- 稳健标准误差也相应列出。
- 对数似然值为 11920.54。
- 信息准则包括 Akaike、Bayes 等。
多种检验结果如下:
- 加权 Ljung-Box 对标准化残差的检验显示,部分滞后项的 p 值显著。
- 加权 Ljung-Box 对标准化平方残差的检验,各滞后项的 p 值较大。
- 加权 ARCH LM 检验中,各滞后项的 P 值较大。
- Nyblom 稳定性检验的联合统计量及个体统计量给出。
此外,还进行了拟合优度检验和符号偏差检验。
最后进行了预测,预测结果包括未来 10 步的序列值和标准差,通过绘图可直观展示。具体预测结果如下:
0-roll forecast [T0=1981-04-27 08:00:00]: Series SigmaT+1 0.0002435 0.007229T+2 0.0005105 0.007355...
首先是(Christoffersen)测试
- 预期超出值为 206,实际超出值为 224。
- 部分假设检验的决策为“Fail to Reject H0”,部分为“Reject H0”。
GARCH(1,1)-t
接着构建了 GARCH(1,1)-t 模型。
其系数估计及误差分析结果给出。
模型拟合结果表明:
- 条件方差动态、均值模型和分布情况。
- 最优参数的估计值、标准误差、t 值和 p 值。
- 稳健标准误差。
- 对数似然值和多种信息准则。
- 多种检验如加权 Ljung-Box 检验、加权 ARCH LM 检验、Nyblom 稳定性检验、Sign Bias 检验、Adjusted Pearson 拟合优度检验等的结果。
最后进行了预测:
forc = ugarchforecast(fit_std )
给出了未来 10 步的预测结果,包括序列值和标准差,并通过绘图展示。
该模型的拟合结果包括:
- 条件方差动态为
sGARCH(1,1)
,均值模型为ARFIMA(0,0,0)
,分布为std
。 - 最优参数的估计及相关统计信息。
- 对数似然值、信息准则等。
- 多种检验如加权 Ljung-Box 检验、加权 ARCH LM 检验、Nyblom 稳定性检验、Sign Bias 检验、Adjusted Pearson 拟合优度检验的结果。
最后进行了预测:
forc = ugarchforecast(fit_std )
给出了未来 10 步的预测结果,包括序列值和标准差,并通过绘图进行展示。
(Christoffersen)测试,针对 fit_std
模型:
filt=fit_stdVaR = fitted(filt) + sigma(filt)*qdist("sstd", p=0.05, mu = 0, sigma = 1 )print(VaRTest(0.05, as.numeric(yield$Close.x), as.numeric(VaR)))
测试结果为:预期超出值为 206,实际超出值为 225,部分假设检验的决策为“Fail to Reject H0”,部分为“Reject H0”。
GARCH(1,1)-ged
然后构建了 GARCH(1,1)-ged
模型
模型的相关信息包括均值和方差方程、条件分布、系数估计及误差分析等。
接着又构建了另一个相关模型:
spec_ged<-ugarchspec(variance.model=list(garchOrder=c(1,1)), mean.model=list(armaOrder=c(0,0)),distribution.model = "ged")fit_ged <- ugarchfit(spec = spec_ged, data = yield)
模型拟合结果呈现了条件方差动态、均值模型、分布情况、最优参数估计及相关统计量,还包括对数似然值、信息准则,以及多种检验如加权 Ljung-Box 检验、加权 ARCH LM 检验、Nyblom 稳定性检验、Sign Bias 检验、Adjusted Pearson 拟合优度检验的结果。
最后进行了预测:
给出了未来 10 步的预测结果,包括序列值和标准差,并通过绘图展示。
模型拟合结果显示:
- 条件方差动态为
sGARCH(1,1)
,均值模型为ARFIMA(0,0,0)
,分布为ged
。 - 最优参数的估计值、标准误差、t 值和 p 值得以给出,如
mu
、omega
等。 - 稳健标准误差也相应列出。
- 对数似然值为 11937.04。
- 多种信息准则包括 Akaike、Bayes 等。
多种检验结果如下:
- 加权 Ljung-Box 对标准化残差的检验显示部分滞后项的统计情况。
- 加权 Ljung-Box 对标准化平方残差的检验,各滞后项的统计结果。
- 加权 ARCH LM 检验中各滞后项的统计量及 P 值。
- Nyblom 稳定性检验的联合统计量及个体统计量。
- Sign Bias 检验的结果。
- Adjusted Pearson 拟合优度检验在不同分组下的统计量和 p 值。
最后进行了预测:
给出了未来 10 步的预测结果,包括序列值和标准差,并通过绘图展示。
检验与分析
本研究首先进行了(Christoffersen)测试,针对 fit_ged
模型:
测试结果为:预期超出值为 206,实际超出值为 239。部分假设检验决策为“Reject H0”。
对于 fit_std
模型,能得到模型的估计参数值,如 omega
、alpha1
、beta1
、shape
分别为 0.000003、0.077908、0.101390、0.916701、7.517278,以及模型的信息准则值。
此外,还对估计残差的自相关函数进行了分析:
acf(garch.fit@fit$residuals)
进一步评估
从 acf
值来看,由于很快落入置信区间,可认为模型的残差稳定,模型效果较好。
通过计算拟合值进行了如下检验:
Box.test(garch.fit@fit$residuals, type="Ljung-Box", 1)
,结果显示X-squared = 1.8712
,df = 1
,p-value = 0.1713
。Box.test(garch.fit@fit$residuals, type="Ljung-Box", 2)
,结果为X-squared = 4.7542
,df = 2
,p-value = 0.09282
。
从这些结果来看,boxtest
的 p
值显著大于 0.05,因此接受原假设,即模型残差是白噪声,残差稳定,模型效果较好。
还对残差的正态性进行了分析:
hist(garch.fit@fit$residuals, col="green", breaks=200, freq=FALSE)
从结果来看,残差的直方图接近正态分布曲线,因此可以认为残差满足正态分布。
综合评估与可视化
进行了 Kolmogorov-Smirnov 检验:
结果显示 D = 0.47441
,p-value < 2.2e-16
,同时有警告提示不应存在ties。从 QQ 图的结果来看,由于图中的点有些偏离红色直线,认为其可能不满足正态分布。
绘制了对数收益率:
绘制了 GARCH 模型的拟合曲线:
并绘制了拟合值的 95%置信区间:
lines( as.numeric(garch.fit@fit$fitted.values -1.96*sigma(garch.fit)),col="yellow")lines( as.numeric(garch.fit@fit$fitted.values +1.96*sigma(garch.fit)),col="blue")
大部分原始数据都落入 95%的置信区间内,因此认为模型拟合效果较好。
通过将我们的预测结果与实际市场走势进行对比,您会发现我们的模型在关键节点上能够准确捕捉市场的变化趋势。
最后添加了图例:
legend("right",c("observed","fitted","95%bound"),col=c(1,"steelblue","red2"),lwd=c(1,2,1),bg=rgb(1,1,.8), cex=0.5)
参考文献
[1]潘冬涛,马勇,刘云涛.跳跃视角下的股指期货价格发现功能研究[J].运筹与管理.2023,32(12).DOI:10.12005/orms.2023.0396 .
[2]饶瑞,潘志松,黎维,等.基于深度强化学习的高频交易优化算法[J].南京理工大学学报(自然科学版).2022,46(3).DOI:10.14177/j.cnki.32-1397n.2022.46.03.008 .
[3]文馨贤.融合经验模态分解与线性Transformer的高频金融时间序列预测[J].现代电子技术.2022,45(23).DOI:10.16652/j.issn.1004-373x.2022.23.023 .
[4]党聪,卢俊香.基于高频数据的金融市场风险溢出研究[J].宁夏大学学报(自然科学版).2022,43(3).DOI:10.3969/j.issn.0253-2328.2022.03.005 .
[5]徐薇.小波分析在经济金融领域的应用[J].全国流通经济.2022,(30).DOI:10.3969/j.issn.1009-5292.2022.30.037 .
[6]章涵.基于均值回归的超额价差套利策略研究[J].中国商论.2022,(17).DOI:10.19699/j.cnki.issn2096-0298.2022.17.106 .
[7]代军,叶幸玮.股指期货非线性动态套期保值研究[J].统计与决策.2021,(9).DOI:10.13546/j.cnki.tjyjc.2021.09.037 .
[8]郭树华,马啸宇.核心资产尾部风险溢出效应研究[J].技术经济.2021,40(12).DOI:10.3969/j.issn.1002-980X.2021.12.011 .
[9]曲传菊,杨皎平.基于小波去噪和协整理论的股指期货高频数据跨期择时套利策略[J].西南师范大学学报(自然科学版).2020,(3).DOI:10.13718/j.cnki.xsxb.2020.03.012 .
[10]韩晨宇,王一鸣.中国股票市场波动率的多重分形分析与实证[J].统计与决策.2020,(1).DOI:10.13546/j.cnki.tjyjc.2020.01.030 .
可下载资源
关于作者
Kaizong Ye是拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。
本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。
非常感谢您阅读本文,如需帮助请联系我们!