全文下载链接:http://tecdat.cn/?p=20678

在本文中,预测股价已经受到了投资者,政府,企业和学者广泛的关注。然而,数据的非线性和非平稳性使得开发预测模型成为一项复杂而具有挑战性的任务点击文末“阅读原文”获取完整代码数据

在本文中,我将解释如何将 GARCH,EGARCH和 GJR-GARCH 模型与Monte-Carlo 模拟结合使用, 以建立有效的预测模型。金融时间序列的峰度,波动率和杠杆效应特征证明了GARCH的合理性。时间序列的非线性特征用于检查布朗运动并研究时间演化模式。非线性预测和信号分析方法因其在特征提取和分类中的鲁棒性而在股票市场上越来越受欢迎。

相关视频

动力学系统可以用一组时变(连续或离散)变量来描述,这些变量构成信号分析非线性方法的基础。如果时间的当前值和状态变量可以准确地描述下一时刻的系统状态,则可以说这样的系统是确定性的。另一方面,如果时间和状态变量的当前值仅描述状态变量的值随时间变化的概率,则将动力学系统视为随机系统。

因此,在使用GARCH 建模方法之前 ,我将采用 分形维数(FD),重定 范围 和 递归量化分析(RQA)的 数据建模 技术 来总结数据的非线性动力学行为并完成研究目标。

方法

Hurst系数 (H) 是长期依赖的特征参数,与 FD (_FD + H = 2_)有关。 R / S分析是数据建模的核心工具。经验研究表明, 与同类中的其他方法相比,  R / S_带来了更好的结果,例如自相关,光谱分解的分析。它是度量时间序列差异的度量,该时间序列的定义是给定持续时间_(T)_的均值范围  ,除以该持续时间的标准偏差 [ R / S = k * T(H) ]; _ķ 是一个取决于时间序列的常数。H度量时间序列的长期记忆,将其表征为均值回复,趋势或随机游走。

H <0.5表示均值回复

H> 0.5表示趋势序列,并且

H = 0.5表示随机游走。

我将展示如何使用 GARCH 模型进行风险评估。

GARCH 模型的一个关键限制 是对其参数施加非负约束,以确保条件方差的正性。这样的约束会给估计GARCH 模型带来困难 。

因此,提出了 非对称GARCH 模型,即俗称的 GJR-GARCH 模型,以解决对称GARCH 模型的局限性 。更重要的是,指数 GARCH 或 EGARCH 模型相对于传统的GARCH 模型具有潜在的改进 。

数据挖掘

查看数据。

在过去的几十年中,原油价格呈现出较大的波动,尤其是在2008年左右。可以看出,随着多次上升和下降,价格保持在相对较低的水平。从自相关图可以看出原始数据中明显的自相关。QQ和PP图的形状表明该过程接近正态,但是_重尾分布_。

简单收益率的常用形式为:r(t)= {p(t)— p(t-1)} / p(t-1),对数收益率= ln(pt / p(t-1),pt每日原油价格,r(t)是每日收益。

对数收益率在这里被视为本文的每日收益率。原始价格和对数收益率的直观显示清楚地证明了以几乎恒定的均值,使用对数收益率是合理的。

收益率序列图显示了高和低变化周期。在图中可以看到一个随机且集中在零附近的过程。大幅度波动的正收益和负收益都增加了风险投资和管理的难度。每日收益率的平均值基本上在零水平水平附近,并且具有明显的波动性聚类,表明存在异方差性。ACF很小,但是高度相关。QQ和PP图的形状没有明显变化。

sns.distplot(df.returns, color=’blue’) #密度图# 汇总统计数据
print(df.returns.describe())

收益率的偏度(-0.119)和向右偏离表明,收益率正比负收益率高,峰度(7.042)反映了油价波动大。


点击标题查阅往期内容

R语言ARMA-GARCH-COPULA模型和金融时间序列案例

左右滑动查看更多

01

02

03

04

标准正态分布的偏度和峰度分别为0和3。

Jarque-Bera检验的值表明,传统的正态分布假设不适用于原油收益的真实分布。

ADF = ADF(df.returns)
print(ADF.summary().as_text())kpss = KPSS(df.returns)
print(kpss.summary().as_text())

进行了VR检验,以测试对数收益率序列是否是纯粹的随机游走,以及是否具有一定的可预测性。我在这里比较了1个月和12个月的对数收益率,并且拒绝了该系列为纯随机游走的空值。用负检验统计量VA(-11.07)拒绝零表示在时间序列中存在序列相关性。用ADF,KPSS,DFGLS,PP和ZA统计量对单位根和平稳性进行的检验均显示出显着性,表明使用 GARCH型模型来拟合收益序列是合适的。

非线性动力学

使用_Hurst_对平稳性的研究 。

# 计算最近价格的Hurst系数tau = \[sqrt(std(subtract(closes\_recent\[lag:\], closes\_recent\[:-lag\]))) for lag in lags\]
m = polyfit(log(lags), log(tau), 1)
hurst = m\[0\]*2

_H_(0.531)表示具有长期依赖性的随机运动时间序列。证明了 本研究中GARCH模型的合理性 。

computation = RQAComputation.create(settings,
verbose=True)
result = computation.run()
result.min\_diagonal\_line_length = 2

此处,低 R 表示较低的周期性和随机行为。此外,较低的 DET 值表示不确定性。这证明了使用GARCH 方法的合理性 。

GARCH模型

在估算GARCH类型的模型之前,将收益率乘以100。由于波动率截距与模型中其他参数非常接近,因此这有助于优化程序进行转换。

X = 100* df.returns

让我们拟合一个 ARCH 模型并绘制平方残差以检查自相关性。

def getbest(TS):
best_aic = np.inffor i in pq_rng:
for d in d_rng:
for j in pq_rng:
try:
tmp_mdl = smt.ARIMA(TS, order=(i,d,j)).fit(#aic: 22462.01 | order: (2, 0, 2)
gam = arch_model(Model.resid, p=2, o=0, q=2, dist=’StudentsT’)
gres = gam.fit(update_freq=5, disp=’off’)
print(gres.summary())tsplot(gres.resid**2, lags=30)

我们可以看到平方残差具有自相关的依据。让我们拟合一个GARCH模型并查看其性能。我将按照以下步骤进行操作:

  • 通过ARIMA(p,d,q) 模型的组合进行迭代 以拟合最优时间序列。

  • 根据 具有最低AIC的ARIMA模型选择 GARCH模型 。

  • 将 GARCH(p,q) 模型拟合到时间序列。

  • 检查模型残差和平方残差进行自相关

因此,我们在这里发现,最好的模型是 ARIMA(2,0,2)。现在,我们对残差进行绘图,以确定它们是否具有条件异方差。

arch_model(X, p=2, q=2, o=1,power=2.0, vol=’Garch’, dist=’StudentsT’)

am = arch_model(X, p=2, q=2, o=1,power=2.0, vol=’Garch’, dist=’StudentsT’)

所有3个GARCH 模型的输出 都以表格格式显示。Ω  (ω) 是白噪声,alpha和beta是模型的参数。此外,  α[1] +β[1] <1 表示稳定的模型。 EGARCH 似乎是最好的三个这模型。

最好在训练/测试中拆分数据并获得MSE / MAE / RMSE结果以比较最佳模型拟合。

通过将残差除以条件波动率来计算标准化残差。

std\_resid =  resid /  conditional\_volatility
unit\_var\_resid =  resid /  resid.std()

标准化残差和条件波动图显示了一些误差,但幅度不大。

sns.kdeplot(squared_resid, shade=True)
sns.kdeplot(std_resid, shade=True)
sns.kdeplot(unit\_var\_resid, shade=True)

还标绘了标准化残差以及非标准化的残差。残差的平方在中心更加尖峰,表明分布的尾部比标准残差的尾部更重。让我们检查一下ACF图。

plot\_acf(std\_resid)

看起来有些尖峰超出了阴影的置信区。让我们查看残差平方。

残差平方显示数据点在蓝色阴影的置信度区域(95%)内,表示模型拟合较好。

res = am.fit()
fig = res.hedgehog_plot(type=’mean’)

图显示了整个2019年的预测。橙色线表示在不同时间区间的预测。

基于模拟的预测

这里使用基于仿真的方法从EGARCH 模拟中获得预测波动率的置信区间 。要从EGARCH 模型获得波动预测,该 模型是从拟合模型的最后一次观察中模拟得出的。重复此过程很多次,以获得波动率预测。预测点是通过对模拟求平均值来计算的,分别使用模拟分布的2.5%和97.5%的分位数来计算95%的置信区间。考虑平均收益率(mu)为0.0292,年波动率(vol)为(26.48)* sqrt 252 = 37.37%。

#定义变量
T = 252 #交易天数
mu = 0.0622 #收益
vol = 0.3737 #波动率daily_returns=np.random.normal((1+mu)**(1/T),vol/sqrt(T),T)#生成图-价格序列和每日收益的直方图
plt.plot(price_list)
plt.hist(daily_returns-1, 100)

在最上方的图上,根据遵循正态分布的随机每日收益,显示了一个交易年度(252天)内潜在价格序列演变的模拟。第二个图是一年中这些随机每日收益的直方图。但是,可以通过运行成千上万的模拟来获得洞察,每次模拟都基于相同的特征(价格交易量)产生一系列不同的潜在价格演变。

#设置一个空列表来保存我们每个模拟价格序列的最终值
result = \[\]S = df.Price\[-1\] #起始股票价格(即最后可用的实际股票价格)
T = 252 #交易天数
mu = 0.0622 #收益率
vol = 0.3737 #波动率#选择要模拟的运行次数-我选择了10,000
for i in range(10000):
#使用随机正态分布创建每日收益表
daily_returns= np.random.normal((1+mu)**(1/T),vol/sqrt(T),T)#设定起始价格,并创建由上述随机每日收益生成的价格序列#将每次模拟运行的结束值添加到我们在开始时创建的空列表中
result.append(price_list\[-1\])

由于这些是对每日收益的随机模拟,因此此处的结果会略有不同。由于每个模拟中包含的路径,平均值趋向于“ mu”使用的平均收益。下面的直方图显示了价格分布的两个分位数,以了解高收益率或低收益率的可能性。

很显然,原油价格有5%的机会最终跌破29.72元,有5%的机会高于101.75美元。

概括

在原油价格高波动的背景下,我研究并提出了混合时变长记忆 GARCH 和基于模拟的预测模型,该模型考虑了诸如非对称性和异方差,时变风险,长记忆和重尾分布等波动事实。经验证据表明,具有布朗运动的原油数据往往在其时间动态方面显示出一定程度的可预测性。这项研究考虑了2000年至2019年的数据,当时股市经历了几次金融危机和危机后阶段。使用此时期的数据训练的模型有望具有出色的预测能力。

当处理长时间波动的原油价格的时间序列数据时,GARCH (2,2)模型估计了方差的持久性 。  进行了蒙特卡洛分析,以检查结果的稳健性。蒙特卡洛 模拟的输出 表明,即使在控制了无关因素之后,结果仍然是可靠的。因此,这些发现提供了出色的混合 EGARCH 和 蒙特卡洛 模拟的的预测模型,其中考虑了波动性特征,如波动性聚类和不对称性,时变风险和重尾分布,来衡量原油价格。


本文摘选Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测,点击“阅读原文”获取全文完整资料。


点击标题查阅往期内容

ARMA-GARCH-COPULA模型和金融时间序列案例

时间序列分析:ARIMA GARCH模型分析股票价格数据

GJR-GARCH和GARCH波动率预测普尔指数时间序列和Mincer Zarnowitz回归、DM检验、JB检验

【视频】时间序列分析:ARIMA-ARCH / GARCH模型分析股票价格

时间序列GARCH模型分析股市波动率

PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化

极值理论 EVT、POT超阈值、GARCH 模型分析股票指数VaR、条件CVaR:多元化投资组合预测风险测度分析

Garch波动率预测的区制转移交易策略

金融时间序列模型ARIMA 和GARCH 在股票市场预测应用

时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格

R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据

R语言GARCH建模常用软件包比较、拟合标准普尔SP 500指数波动率时间序列和预测可视化

Python金融时间序列模型ARIMA 和GARCH 在股票市场预测应用

MATLAB用GARCH模型对股票市场收益率时间序列波动的拟合与预测

R语言GARCH-DCC模型和DCC(MVT)建模估计

Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列

R语言中的时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格

R语言ARIMA-GARCH波动率模型预测股票市场苹果公司日收益率时间序列

Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测

R语言时间序列GARCH模型分析股市波动率

R语言ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测

matlab实现MCMC的马尔可夫转换ARMA - GARCH模型估计

Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测

使用R语言对S&P500股票指数进行ARIMA + GARCH交易策略

R语言用多元ARMA,GARCH ,EWMA, ETS,随机波动率SV模型对金融时间序列数据建模

R语言股票市场指数:ARMA-GARCH模型和对数收益率数据探索性分析

R语言多元Copula GARCH 模型时间序列预测

R语言使用多元AR-GARCH模型衡量市场风险

R语言中的时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格

R语言用Garch模型和回归模型对股票价格分析

GARCH(1,1),MA以及历史模拟法的VaR比较

matlab估计arma garch 条件均值和方差模型

R语言POT超阈值模型和极值理论EVT分析

R语言时间序列GARCH模型分析股市波动率

R语言ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测

matlab实现MCMC的马尔可夫转换ARMA - GARCH模型估计

Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测

使用R语言对S&P500股票指数进行ARIMA + GARCH交易策略

R语言用多元ARMA,GARCH ,EWMA, ETS,随机波动率SV模型对金融时间序列数据建模

R语言股票市场指数:ARMA-GARCH模型和对数收益率数据探索性分析

R语言多元Copula GARCH 模型时间序列预测

R语言使用多元AR-GARCH模型衡量市场风险

R语言中的时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格

R语言GARCH-DCC模型和DCC(MVT)建模估计

R语言用Garch模型和回归模型对股票价格分析

GARCH(1,1),MA以及历史模拟法的VaR比较

matlab估计arma garch 条件均值和方差模型

R语言ARMA-GARCH-COPULA模型和金融时间序列案例

Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测相关推荐

  1. MPI对道路车辆情况的Nagel-Schreckenberg 模型进行蒙特卡洛模拟

    平台Ubuntu 16.04,Linux下MPI环境的安装见链接:https://blog.csdn.net/lusongno1/article/details/61709460 据 Nagel-Sc ...

  2. Python、MATLAB股票投资:ARIMA模型最优的选股、投资组合方案与预测

    全文链接:http://tecdat.cn/?p=31651 我们基于当前统计的股票数据为客户选择最优的选股方案和投资组合方案,以及预测股票价格未来一段时间的走向趋势以及波动程度,具有很大的实用价值. ...

  3. 数据分享|SAS与eviews用ARIMA模型对我国大豆产量时间序列预测、稳定性、白噪声检验可视化...

    全文链接:http://tecdat.cn/?p=31480 我国以前一直以来都是世界上大豆生产的第一大国.但由于各国的日益强大,导致我国豆种植面积和产量持续缩减.因此,预测我国的大豆产量对中国未来的 ...

  4. 我想使用 fGarch 建立egARCH(1,1)模型

    您可以使用R语言中的fGarch包来建立EGARCH(1,1)模型.首先,您需要安装fGarch包,然后使用以下代码进行模型拟合: library(fGarch) fit = egarch(data, ...

  5. python使用matplotlib对比多个模型在测试集上的效果并可视化、设置模型性能可视化结果柱状图(bar plot)标签的小数点位数(例如,强制柱状图标签0.7显示为两位小数0.70)

    python使用matplotlib对比多个模型在测试集上的效果并可视化.设置模型性能可视化结果柱状图(bar plot)标签的小数点位数(例如,强制柱状图标签0.7显示为两位小数0.70) 目录

  6. python使用matplotlib对比多个模型的在训练集上的效果并使用柱状图进行可视化:基于交叉验证的性能均值(mean)和标准差(std)进行可视化分析、使用标准差信息添加误差区间条yerr

    python使用matplotlib对比多个模型的在训练集上的效果并使用柱状图进行可视化:基于交叉验证的性能均值(mean)和标准差(std)进行可视化分析.使用标准差信息添加误差区间条yerr 目录

  7. Python使用tpot获取最优模型并抽取最优模型模型参数

    Python使用tpot获取最优模型并抽取最优模型模型参数 目录 Python使用tpot获取最优模型并抽取最优模型模型参数 #数据划分

  8. Python使用tpot获取最优模型、将最优模型应用于交叉验证数据集(5折)获取数据集下的最优表现,并将每一折(fold)的预测结果、概率、属于哪一折与测试集标签、结果、概率一并整合输出为结果文件

    Python使用tpot获取最优模型.将最优模型应用于交叉验证数据集(5折)获取数据集下的最优表现,并将每一折(fold)的预测结果.概率.属于哪一折与测试集标签.结果.概率一并整合输出为结果文件 目 ...

  9. Python使用sklearn构建lasso回归模型并指定样本权重:即构建带样本权重(sample_weight)的回归模型

    Python使用sklearn构建lasso回归模型并指定样本权重:即构建带样本权重(sample_weight)的回归模型 目录

最新文章

  1. 基于html的数据库,基于HTML5的本地数据库与服务端数据库的协同研究
  2. 陶哲轩实分析定理17.3.8(三)
  3. 监控mysql的shell脚本_监控MySQL主从状态的shell脚本
  4. Windows10 ISO下载
  5. 【渝粤教育】电大中专会计电算化 (2)作业 题库
  6. 在VMWare上安装CentOS8
  7. ThinkPHP admin.php后台登录
  8. [古怪问题] Marshal.GetActiveObject 在管理员模式下无法正常运行
  9. 计算机应用技术专业的未来,计算机应用技术专业召开“2020级人才培养方案修订”主题网络研讨会...
  10. shell 单词末尾家字符_58、最后一个单词的长度
  11. 三菱触摸屏通讯错误_一台威纶通触摸屏与多台三菱PLC通讯案例
  12. 对Ajax回调函数中返回错误信息的处理及常见情况整理
  13. 手机上将mp4转换成amv_如何在Linux上将所有文本从大写转换为小写?
  14. QScrollArea使用详解
  15. 百度联合哈尔滨发布城市大模型“冰城-百度·文心”, 助力城市智能化建设
  16. windows 10 电脑必备软件
  17. 开源python-向tensorflow-addons学习
  18. 2020年如何成为全栈工程师
  19. appdata文件夹有什么用途?C盘appdata可以删除吗?
  20. python 调用 CTP API 进行下多单 下空单 平单 撤单 操作

热门文章

  1. 制作FLV格式Flash视频
  2. [erlang] windows下idea使用rebar3
  3. 开源免费erp ,erp5和odoo的对比
  4. java greenfoot_Greenfoot下载
  5. π122E31Q 超低功耗 200Mbps高速率 双通道数字隔离器兼容代替ADuM1201WURZ
  6. 百度地图RichMarker富标记点
  7. c++ SFML 获取ftp某个目录下所有的文件或者文件夹
  8. 视频剪辑配音怎么弄?三分钟轻松搞定短视频配音!
  9. Fluent Meshing对称模型形成完整模型
  10. pubwin2009三秒钟快速破解无需开卡登录