首页 > 编程语言 >Python用GARCH对ADBL股票价格时间序列趋势滚动预测、损失、可视化分析

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

时间:2023-08-09 19:56:20浏览次数:36  
标签:预测 Python 模型 ADBL df GARCH 代码

全文链接: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

   

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 方式进行建模。p 和 q 是 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 模型对象,并将预测数据作为输入。模型对象中的 p 和 q 参数由之前确定的值指定。

综上所述,这段代码的作用是在每个时间点上,基于滚动的测试数据来预测波动性。通过一个循环,在每次循环迭代中,根据当前的训练数据来构建 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()

1.png


gettyimages-1379895972-1536x1536.webp 最受欢迎的见解

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

2.R语言改进的股票配对交易策略分析SPY—TLT组合和中国股市投资组合

3.R语言时间序列:ARIMA GARCH模型的交易策略在外汇市场预测应用

4.TMA三均线期指高频交易策略的R语言实现

5.r语言多均线量化策略回测比较

6.用R语言实现神经网络预测股票实例

7.r语言预测波动率的实现:ARCH模型与HAR-RV模型

8.R语言如何做马尔科夫转换模型markov switching model

9.matlab使用Copula仿真优化市场风险

标签:预测,Python,模型,ADBL,df,GARCH,代码
From: https://www.cnblogs.com/tecdat/p/17617868.html

相关文章

  • Python | 函数、数据容器
    1.函数函数:是组织好的,可重复使用的,用来实现特定功能的代码段。1.1简单案例重复使用计算字符串的长度str1="heystar"str2="python"str3="abcd"count=0for_instr1:count+=1print(f"字符串{str1}的长度是:{count}")count=0for_instr2:coun......
  • Python潮流周刊#2:Rust 让 Python 再次伟大
    这里记录每周值得分享的Python及通用技术内容,部分为英文,已在小标题注明。(本期标题取自其中一则分享,不代表全部内容都是该主题,特此声明。)文章&教程1、Python修饰器的函数式编程介绍了装饰器的实现原理、带参装饰器、多装饰器、类装饰器和几个典型的示例。文章发布于2014年,代码用......
  • Python潮流周刊#5:并发一百万个任务要用多少内存?
    你好,我是猫哥。这里记录每周值得分享的Python及通用技术内容,部分为英文,已在小标题注明。(标题取自其中一则分享,不代表全部内容都是该主题,特此声明。)文章&教程1、并发一百万个任务要用多少内存?(英文)文中测试了主流的编程语言(Rust、Go、Java、C#、Python、Node.js和Elixir),依次运行......
  • 软件测试|Python函数参数之必传参数、默认参数、可变参数、关键字参数的详细使用
    在Python中,函数参数是定义在函数头部的变量,用于接收传递给函数的数据。Python函数参数有四种类型:必传参数、默认参数、可变参数和关键字参数。每种类型都有不同的使用方式和适用场景。本文将详细介绍这四种函数参数的使用方法。Python函数参数类型必传参数:最常用的,必传确定数量的参......
  • python数据分分析
    数据处理的步骤graphLR处理数据-->清洗数据目的:如何用python操作数据对象:需要的是结构化的数据工具:用到的库库名用途NumpyPandasmatplotlibJupyterNotebookScipyScikit-learnStatsmodelspython的内建数据结构;元组、列表、字典元组......
  • 解决window移植到linux shell执行Python脚本提示找不到模块问题
    1、将工程目录添加到sys.path中(测试有效importsyscpath='project_path'#写成项目的地址最好是绝对地址因为有的地方确实会报错不清楚原因sys.path.append(cpath) eg:sys_path=os.path.abspath(os.curdir)sys.path.append(sys_path.split('test_case')[0])#为了......
  • python 应用包nltk了解
    NLTK(NaturalLanguageToolkit)是一个用于自然语言处理(NLP)的Python库。它为处理和分析人类语言数据提供了许多工具和接口。NLTK包含了一系列用于文本处理、分析、语言学研究以及机器学习的函数和类。NLTK提供了许多功能,包括:1.文本处理:NLTK提供了处理文本的工具,如分词......
  • Python命令行参数输入
    sys.argv#test.pyimportsysif__name__=='__main__':print(sys.argv[1:])终端输入内容并查看接收到的参数使用argparseimportargparseif__name__=='__main__':#python.\excelcompare.py发票列表1.xlsx发票列表2.xlsxsheet1sheet11BC#pars......
  • python离线打包
    1.导出已安装的列表pipfreeze>dependency.txt2.创建虚拟环境python-mvenvpath2venv3.在虚拟环境中安装导出的依赖列表path2venv/Script/pythoninstall-rdependency.txt4打包path2venv到自己的程序中,在程序中调用......
  • python正则表达式笔记1
    最近工作中经常用到正则表达式处理数据,慢慢发现了正则表达式的强大功能,尤其在数据处理工作中,记录下来分享给大家。一、正则表达式语法介绍正则表达式(或RE)指定了一组与之匹配的字符串;模块内的函数可以检查某个字符串是否与给定的正则表达式匹配(或者正则表达式是否匹配到字符串,......