Python用GARCH对ADBL股票价格时间序列趋势滚动预测、损失、可视化分析

简介: Python用GARCH对ADBL股票价格时间序列趋势滚动预测、损失、可视化分析

全文链接:https://tecdat.cn/?p=33398


金融市场的股票价格时间序列分析一直以来都是投资者和研究者关注的主题之一。准确预测股票价格的趋势对于制定有效的投资策略和决策具有重要意义。因此,许多研究人员使用各种统计方法和模型来分析和预测股票价格的变动点击文末“阅读原文”获取完整代码数据


本文的目标是帮助客户应用GARCH模型对ADBL(ABC Development Bank Limited)股票价格的时间序列进行分析和预测,并通过可视化分析的方式展示结果。ADBL是尼泊尔地区最大的商业银行之一,其股票价格波动对投资者和研究者来说具有重要意义。

首先,我们将收集ADBL股票价格的历史数据,并对其进行描述性统计和可视化分析,以获取对股票价格的初步认识。然后,我们将使用GARCH模型对ADBL股票价格的波动进行建模,并通过模型参数的估计和模型检验来验证模型的适应性。

接下来,我们将利用已建立的GARCH模型对ADBL股票价格的未来走势进行预测。预测结果将以图表和可视化方式呈现,以便读者更加直观地理解和分析。

最后,我们将对模型的预测效果进行评估,并讨论模型的局限性和未来研究的方向。通过本文的研究,我们希望为投资者和研究者提供一个有效的工具和方法,帮助他们更好地理解和预测ADBL股票价格的趋势。

导入库

# 广义自回归条件异方差(GARCH模型)
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
     
plt.rcParams['figure.figsize'] = (12,6)

这段代码的主要作用是导入所需的库和模块,为接下来的数据处理、图表绘制和模型评估等操作提供必要的工具和函数。

导入数据

# df = df[df['Date'] >= '2015-01-01']
df.head()

这段代码主要是导入数据并对数据进行处理的操作。具体而言,代码的功能如下:

  1. pd.read_csv('ADBL_data.csv'): 使用 pandas 库的 read_csv() 函数读取名为 "ADBL_data.csv" 的 CSV 文件,并将数据加载到一个名为 df 的数据框(DataFrame)中。
  2. df['Date'] = pd.to_datetime(df.Date): 将 df 数据框中的 "Date" 列转换为日期时间类型。这里使用 pd.to_datetime() 函数将日期字符串转换为日期时间格式。
  3. # df = df[df['Date'] >= '2015-01-01']: 这一行代码是对数据进行筛选的注释,表示根据日期进行过滤,只保留日期大于等于 "2015-01-01" 的数据。注释符号 # 表示该行代码不会被执行。
  4. df.head(): 打印输出 df 数据框的前几行数据,默认显示前5行。通过调用 head() 方法可以快速查看数据框的结构和内容。

综上所述,这段代码的作用是读取名为 "ADBL_data.csv" 的 CSV 文件,并将其加载到名为 df 的数据框中。然后对数据进行了格式转换并打印出前几行的数据。

image.png

"ADBL的时间序列图"

plt.ylabel("Price")
plt.show()

image.png

点击标题查阅往期内容


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


01

02

03

04



df.reset_index(drop=True, inplace=True)
df

image.png

df.returns.plot() 
plt.show()

image.png

df.returns.describe()

image.png

# "平方股票收益的自相关图"
plot_acf(df.returns**2)
plt.show()

image.png

从ACF图中可以看出,在1个滞后时间步长内,方差存在显著的正相关关系。


识别 p 和 q


# 基于最小AIC确定的最佳p和q项
for p in range(1, 15):
  for q in range(1, 15):
    try:
     
print(f'GARCH order is ({p}, {q})')

image.png

这段代码的主要功能是基于最小化赤池信息准则(AIC)来确定 GARCH 模型的最佳 p 和 q 值。具体而言,代码的执行过程如下:

  1. 创建一个空字典 dict_aic,用于保存每个不同 p 和 q 值组合对应的 AIC 值。
  2. 使用两个嵌套的循环遍历从 1 到 14 的所有整数值。外层循环控制 p 值的范围,内层循环控制 q 值的范围。
  3. 在每次循环迭代中,尝试构建一个 GARCH 模型,其中 vol 参数设为 'Garch',p 参数设为当前的外层循环变量 p,q 参数设为当前的内层循环变量 q。
  4. 如果成功拟合模型,则计算该模型的 AIC 值,并将其保存到 dict_aic 字典中对应的键值对中,键为 (p, q),值为 AIC 值。

综上所述,这段代码的作用是通过遍历多个 p 和 q 值的组合,并拟合 GARCH 模型来计算对应的 AIC 值。然后,基于最小 AIC 值确定最佳的 p 和 q 值,并输出结果。

训练/测试分割

# 将训练集和测试集按照70/30的比例分割
st.shape)

image.png

模型训练

model.summary()

image.png

这段代码的目的是使用 GARCH 模型对训练数据进行拟合,并打印出模型的摘要信息。

具体而言,代码的执行流程如下:

  1. 创建一个 GARCH 模型对象并将其赋值给变量 model,其中 X_train 是作为训练数据的输入。vol='Garch' 表示使用 GARCH 方式进行建模。pq 是 GARCH 模型中的参数,分别表示 ARCH 部分和 GARCH 部分的滞后阶数。

综上所述,这段代码的作用是创建一个 GARCH 模型对象并使用训练数据进行拟合,然后打印出模型的摘要信息,以便查看模型拟合的结果和相关统计指标。

测试集上的滚动预测

# 基于滚动测试集预测波动性。
forecasts = list()
for i in range(X_test.shape[0]):
 
    forecasts.appe

这段代码的目的是基于滚动测试集预测波动性。

具体而言,代码的执行流程如下:

  1. 创建一个空列表 forecasts,用于保存每个时间点的波动性预测结果。
  2. 进行一个循环,循环次数根据测试数据的行数来确定,每次循环表示一个时间点的波动性预测。
  3. 在每次循环迭代中,首先获取用于预测的测试数据。通过 df.returns[:-(X_test.shape[0] - i)] 获取了从开始到当前循环迭代索引位置的训练数据。
  4. 创建一个 GARCH 模型对象,并将预测数据作为输入。模型对象中的 pq 参数由之前确定的值指定。

综上所述,这段代码的作用是在每个时间点上,基于滚动的测试数据来预测波动性。通过一个循环,在每次循环迭代中,根据当前的训练数据来构建 GARCH 模型,并使用该模型进行波动性预测,将预测结果保存在 forecasts 列表中。

损失分析

from sklearn.metri
# 计算均方根误差
testScore = mean_sq

image.png

# 参考训练集最后一个指数的实际收盘价,根据预测收益生成收盘价
# 今日值 = 昨日值 + (pct_returns * 昨日值) / 100
pred_vals = []
for i in range(len(forecasts)):
  if pred_vals:
    pre
# 今日值 = 昨日值 + (pct_returns * 昨日值) / 100
testSco

image.png

date_range = df['Date'][-X_test.shape[0]:]
     
plt.title(
plt.legend(fontsize=14)
plt.show()

image.png

相关文章
|
25天前
|
缓存 Rust 算法
从混沌到秩序:Python的依赖管理工具分析
Python 的依赖管理工具一直没有标准化,主要原因包括历史发展的随意性、社区的分散性、多样化的使用场景、向后兼容性的挑战、缺乏统一治理以及生态系统的快速变化。依赖管理工具用于处理项目中的依赖关系,确保不同环境下的依赖项一致性,避免软件故障和兼容性问题。常用的 Python 依赖管理工具如 pip、venv、pip-tools、Pipenv、Poetry 等各有优缺点,选择时需根据项目需求权衡。新工具如 uv 和 Pixi 在性能和功能上有所改进,值得考虑。
83 35
|
1月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
在现代数据分析中,高维时间序列数据的处理和预测极具挑战性。基于矩阵分解的长期事件(MFLEs)分析技术应运而生,通过降维和时间序列特性结合,有效应对大规模数据。MFLE利用矩阵分解提取潜在特征,降低计算复杂度,过滤噪声,并发现主要模式。相比传统方法如ARIMA和深度学习模型如LSTM,MFLE在多变量处理、计算效率和可解释性上更具优势。通过合理应用MFLE,可在物联网、金融等领域获得良好分析效果。
60 0
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
|
26天前
|
数据采集 数据可视化 数据挖掘
金融波动率的多模型建模研究:GARCH族与HAR模型的Python实现与对比分析
本文探讨了金融资产波动率建模中的三种主流方法:GARCH、GJR-GARCH和HAR模型,基于SPY的实际交易数据进行实证分析。GARCH模型捕捉波动率聚类特征,GJR-GARCH引入杠杆效应,HAR整合多时间尺度波动率信息。通过Python实现模型估计与性能比较,展示了各模型在风险管理、衍生品定价等领域的应用优势。
230 66
金融波动率的多模型建模研究:GARCH族与HAR模型的Python实现与对比分析
|
16天前
|
并行计算 安全 Java
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
在Python开发中,GIL(全局解释器锁)一直备受关注。本文基于CPython解释器,探讨GIL的技术本质及其对程序性能的影响。GIL确保同一时刻只有一个线程执行代码,以保护内存管理的安全性,但也限制了多线程并行计算的效率。文章分析了GIL的必要性、局限性,并介绍了多进程、异步编程等替代方案。尽管Python 3.13计划移除GIL,但该特性至少要到2028年才会默认禁用,因此理解GIL仍至关重要。
83 16
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
|
4天前
|
数据采集 数据安全/隐私保护 Python
从零开始:用Python爬取网站的汽车品牌和价格数据
在现代化办公室中,工程师小李和产品经理小张讨论如何获取懂车帝网站的汽车品牌和价格数据。小李提出使用Python编写爬虫,并通过亿牛云爬虫代理避免被封禁。代码实现包括设置代理、请求头、解析网页内容、多线程爬取等步骤,确保高效且稳定地抓取数据。小张表示理解并准备按照指导操作。
从零开始:用Python爬取网站的汽车品牌和价格数据
|
1月前
|
数据可视化 算法 数据挖掘
Python时间序列分析工具Aeon使用指南
**Aeon** 是一个遵循 scikit-learn API 风格的开源 Python 库,专注于时间序列处理。它提供了分类、回归、聚类、预测建模和数据预处理等功能模块,支持多种算法和自定义距离度量。Aeon 活跃开发并持续更新至2024年,与 pandas 1.4.0 版本兼容,内置可视化工具,适合数据探索和基础分析任务。尽管在高级功能和性能优化方面有提升空间,但其简洁的 API 和完整的基础功能使其成为时间序列分析的有效工具。
79 37
Python时间序列分析工具Aeon使用指南
|
1月前
|
机器学习/深度学习 运维 数据可视化
Python时间序列分析:使用TSFresh进行自动化特征提取
TSFresh 是一个专门用于时间序列数据特征自动提取的框架,支持分类、回归和异常检测等机器学习任务。它通过自动化特征工程流程,处理数百个统计特征(如均值、方差、自相关性等),并通过假设检验筛选显著特征,提升分析效率。TSFresh 支持单变量和多变量时间序列数据,能够与 scikit-learn 等库无缝集成,适用于大规模时间序列数据的特征提取与模型训练。其工作流程包括数据格式转换、特征提取和选择,并提供可视化工具帮助理解特征分布及与目标变量的关系。
68 16
Python时间序列分析:使用TSFresh进行自动化特征提取
|
2天前
|
存储 数据采集 数据库
Python爬虫实战:股票分时数据抓取与存储
Python爬虫实战:股票分时数据抓取与存储
|
30天前
|
数据采集 缓存 API
python爬取Boss直聘,分析北京招聘市场
本文介绍了如何使用Python爬虫技术从Boss直聘平台上获取深圳地区的招聘数据,并进行数据分析,以帮助求职者更好地了解市场动态和职位需求。
|
2月前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费市场分析的深度学习模型
使用Python实现智能食品消费市场分析的深度学习模型
152 36

热门文章

最新文章