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

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

Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列1:https://developer.aliyun.com/article/1485068

随机行走的一阶差分

我们的定义成立,因为这看起来与白噪声过程完全一样。如果我们对 SPY 价格的一阶差分进行随机游走会怎么样?

# SPY价格的一阶差分
plt(diff(dt.PY), lag=30)

将随机行走模型拟合到ETF价格

它与白噪声非常相似。但是,请注意 QQ 和概率图的形状。这表明该过程接近正态分布,但具有“重尾”。 ACF 和 PACF 在滞后 1、5?、16?、18 和 21 附近似乎也存在一些显着的序列相关性。这意味着应该有更好的模型来描述实际的价格变化过程。

线性模型

线性模型又称趋势模型,代表了一个可以用直线作图的TS。其基本方程为。

在这个模型中,因变量的值由β系数和一个单一的自变量--时间决定。一个例子是,一家公司的销售额在每个时间段都会增加相同的数量。让我们来看看下面的一个特制的例子。在这个模拟中,我们假设坚定的ABC公司在每个时间段的销售额为-50.00元(β0或截距项)和+25.00元(β1)。

# 模拟线性趋势
# 例子 公司ABC的销售额默认为-50元,在每个时间步长为+25元
w = n.anom.ann(100)
y = nppt_lke(w)
b0 = -50.
b1 = 25.
for t in rge(lnw)):
    y\[t\] = b0 + b1*t + w\[t\]
    
 plt(y, lags=ls)

线性趋势模型模拟

在这里我们可以看到模型的残差是相关的,并且作为滞后的函数线性减少。分布近似正态。在使用此模型进行预测之前,我们必须考虑并消除序列中存在的明显自相关。PACF 在滞后 1 处的显着性表明_自回归_ 模型可能是合适的。

对数线性模型

这些模型与线性模型类似,只是数据点形成了一个指数函数,代表了相对于每个时间步的恒定变化率。例如,ABC公司的销售额在每个时间步长增加X%。当绘制模拟的销售数据时,你会得到一条看起来像这样的曲线。

# 模拟ABC的指数式增长
# 日期
pdat_rge('2007-01-01', '2012-01-01', freq='M')
# 假设销售额以指数速度增长
ale = \[exp( x/12 ) for x inage1, len(id)+1)\]
# 创建数据框架并绘图
df = d.ataame(sals, ix=x)
plt()

模拟指数函数

然后我们可以通过采用销售额的自然对数来转换数据。现在线性回归拟合数据。

# ABC对数销售 
indexid.plot()

指数函数的自然对数

如前所述,这些模型有一个致命的弱点。它们假设连续不相关的误差,正如我们在线性模型的例子中看到的那样。在现实生活中,TS数据通常会违反我们的平稳假设,这使我们转向自回归模型。

自回归模型 - AR(p)

当因变量针对自身的一个或多个滞后值进行回归时,该模型称为自回归模型。公式如下所示:

AR (P) 模型

当您描述 模型的“阶”时,例如阶“p”的 AR 模型 p 表示模型中使用的滞后变量的数量。例如,AR(2) 模型或_二阶_自回归模型如下所示:

AR (2) 模型

这里,alpha (a) 是系数,omega (w) 是白噪声项。在 AR 模型中,Alpha 不能等于 0。请注意,alpha 设置为 1 的 AR(1) 模型是_随机游走_ ,因此不是平稳的。

AR(1) 模型,ALPHA = 1;随机漫步

让我们模拟一个 alpha 设置为 0.6 的 AR(1) 模型

# 模拟一个α=0.6的AR(1)过程
rndm.sed(1)
n_sams = int(1000)
a = 0.6
x = w = n.amma(siz=_apes)
for t in rane(n_saps):
    x\[t\] = a*x\[t-1\] + w\[t\]
    
plot(x, gs=lgs)

AR(1) 模型,ALPHA = 0.6

正如预期的那样,我们模拟的 AR(1) 模型的分布是正常的。滞后值之间存在显着的序列相关性,尤其是在滞后 1 处,如 PACF 图所示。

现在我们可以使用 Python 的 statsmodels 拟合 AR(p) 模型。首先,我们将 AR 模型拟合到我们的模拟数据并收益估计的 alpha 系数。然后我们使用 statsmodels 函数“order()”来查看拟合模型是否会选择正确的滞后。如果 AR 模型是正确的,估计的 alpha 系数将接近我们的真实 alpha 0.6,所选阶数等于 1。

# 拟合AR(p)模型到模拟的AR(1)模型,alpa=0.6
md = AR(x).itm=30, ic='aic', trnd='nc')
%time st_oer = mt.R(x).stor(
    mxag=30, ic='aic', trnd='nc')
tuerer = 1

看起来我们能够恢复模拟数据的基础参数。让我们用 alpha\_1 = 0.666 和 alpha\_2 = -0.333 来模拟 AR(2) 过程。为此,我们使用 statsmodel 的“generate_samples()”函数。该函数允许我们模拟任意阶数的 AR 模型。

# 模拟一个AR(2)过程
n = int(1000)
# Python要求我们指定零滞后值,即为1
# 还要注意,AR模型的字母必须是否定的
# 对于AR(p)模型,我们也将MA的betas设置为0
ar = nr_\[1, -ahas\]
ma = npr_\[1, beas\]
ar2 = smt.arme_pe(ar=ar, ma=a, nsale=n) 
plot(ar2, lags=lags)

AR(2) 模拟 ALPHA\_1 = 0.666 和 ALPHA\_2 = -0.333

让我们看看是否可以恢复正确的参数。

# 拟合AR(p)模型来模拟AR(2)过程
max_lag = 10
est_rer = st.AR(r2)sennc')
tu_rder = 2

让我们看看 AR(p) 模型将如何拟合 MSFT 对数收益。这是收益TS。

MSFT 对数收益时间序列

# 选择MSFT收益的最佳滞后阶数
max_ag = 30
ml = smt.AR(ls.MSFT).fit(mam_lg, c='aic', tnc)
es_rr = tAR(rts.FT).secter(
    maag=malag ic=aic', re=nc')
p('最佳估计滞后阶数 = {}'.format(etoer))

最好的阶数是 23 个滞后或 23 !任何具有这么多参数的模型在实践中都不太可能有用。显然,收益过程背后的复杂性比这个模型所能解释的要复杂得多。

Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列3:https://developer.aliyun.com/article/1485073

相关文章
|
2月前
|
数据采集 Web App开发 数据可视化
Python零基础爬取东方财富网股票行情数据指南
东方财富网数据稳定、反爬宽松,适合爬虫入门。本文详解使用Python抓取股票行情数据,涵盖请求发送、HTML解析、动态加载处理、代理IP切换及数据可视化,助你快速掌握金融数据爬取技能。
1381 1
|
7月前
|
存储 数据采集 大数据
Python推导式进阶指南:优雅初始化序列的科学与艺术
本文系统讲解Python推导式的用法与技巧,涵盖列表、字典、集合推导式及生成器表达式。通过代码示例和性能对比,展示推导式在数据结构初始化中的优势:简洁高效、执行速度快30%-50%。文章分析基础语法、核心应用场景(如序列构造、键值对转换、去重运算)及嵌套使用,并探讨使用边界与最佳实践,强调可读性优先原则。最后指出,合理运用推导式能显著提升代码质量和处理效率,同时避免过度复杂化的陷阱。
224 0
|
10月前
|
存储 索引 Python
Python入门:6.深入解析Python中的序列
在 Python 中,**序列**是一种有序的数据结构,广泛应用于数据存储、操作和处理。序列的一个显著特点是支持通过**索引**访问数据。常见的序列类型包括字符串(`str`)、列表(`list`)和元组(`tuple`)。这些序列各有特点,既可以存储简单的字符,也可以存储复杂的对象。 为了帮助初学者掌握 Python 中的序列操作,本文将围绕**字符串**、**列表**和**元组**这三种序列类型,详细介绍其定义、常用方法和具体示例。
Python入门:6.深入解析Python中的序列
|
10月前
|
存储 数据采集 数据库
Python爬虫实战:股票分时数据抓取与存储
Python爬虫实战:股票分时数据抓取与存储
|
存储 C++ 索引
Python 序列类型(1)
【10月更文挑战第8天】
145 1
|
存储 编译器 索引
Python 序列类型(2)
【10月更文挑战第8天】
101 0
Python 序列类型(2)
|
Python 数据可视化 索引
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
|
数据可视化 数据挖掘 Python
Python用 tslearn 进行时间序列聚类可视化
Python用 tslearn 进行时间序列聚类可视化
|
自然语言处理 数据可视化 数据挖掘
如何用Python做舆情时间序列可视化?
如何批量处理评论信息情感分析,并且在时间轴上可视化呈现?舆情分析并不难,让我们用Python来实现它吧。 痛点 你是一家连锁火锅店的区域经理,很注重顾客对餐厅的评价。
1953 0
|
3月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
308 102

推荐镜像

更多