乐趣区

关于算法:Python使用GARCHEGARCHGJRGARCH模型和蒙特卡洛模拟进行股价预测

原文链接: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)反映了油价稳定大。

规范正态分布的偏度和峰度别离为 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.inf

for 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 和  蒙特卡洛 模仿的的预测模型,其中思考了波动性特色,如波动性聚类和不对称性,时变危险和重尾散布,来掂量原油价格。


最受欢迎的见解

1.HAR-RV- J 与递归神经网络(RNN)混合模型预测和交易大型股票指数的高频稳定率

2. R 语言中基于混合数据抽样 (MIDAS) 回归的 HAR-RV 模型预测 GDP 增长

3.稳定率的实现:ARCH 模型与 HAR-RV 模型

4. R 语言 ARMA-EGARCH 模型、集成预测算法对 SPX 理论稳定率进行预测

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

6. R 语言多元 COPULA GARCH 模型工夫序列预测

7. R 语言基于 ARMA-GARCH 过程的 VAR 拟合和预测

8.matlab 预测 ARMA-GARCH 条件均值和方差模型

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

退出移动版