【小白也可做】基于2DCNN和LSTM的多特征输入的股票预测项目实战(pytorch)(多特征)

一、项目简介

股票预测是金融领域中的重要问题,通过对历史股票数据的分析和建模,我们可以尝试预测未来股票的价格趋势,为投资决策提供参考。本项目是基于PyTorch深度学习框架实现一个使用2D卷积神经网络和LSTM预测网络(2DCNN+LSTM)来进行股票收盘价预测的项目,该网络可以有效地处理时间序列数据,通过卷积层和LSTM层提取输入序列中的特征,并通过全连接层进行预测。网络的输入是历史股票开盘价、收盘价、最高价、最低价、成交量指标、百分比变化量(多特征),输出是预测下一天的股票收盘价。【本项目的代码文件分模块整理,包含模型构建、数据划分、训练过程等模块都清晰分明】

二、实验数据集

实验采用的是深沪300数据集sh300.csv(后文有源码和数据集获取方式),这是公开的数据集,百度一下应该也可以找得到,数据集展示如下(所展示的数据是本人删掉某些列的数据,即sh300_test.csv),实验只使用了红框中的数据特征作为输入特征进行预测。

数据划分:以滑窗的方式进行数据划分,滑窗大小为20,输入特征为6,每次滑窗的第21天的收盘价为预测的标签值。

 三、实验环境

平台:Window 11;语言:python3.9;编译器:Pycharm;框架:Pytorch:1.13.1

四、实验内容及部分代码展示

1、model_2DCNN_LSTM.py 模型构建

model_2DCNN_LSTM.py定义了项目用到的网络模型,本项目用到的模型是三层的一维卷积网络,使用relu激活,最后使用两层全连接层输出预测结果。

2、train.py 训练通用模板

训练过程集成到fit函数里面,包含测试集训练过程和验证集计算过程,是项目训练过程的通用代码,其他项目也可以在它的基础上修改后使用。

3、Config.py 参数定义

config中定义了项目所有需要的参数,可以在里面修改训练参数。其中可以看到三个卷积层的输出通道为[16,32,64]。根据实现效果调试[16,32,64]的训练效果比[32,64,128]要好很多,原因可能是数据集比较简单,通道数设置少一些就可以提取出不错的特征。

4、DataSplit.py 数据划分

 DataSplit.py 是实现数据划分的函数,通过滑动窗口,将每个窗口大小的六个特征数据作为训练数据,将滑窗后面一个收盘价的数据作为预测结果并制作成标签,最后再进行划分训练数据和标签,最后分成训练集和验证集。

5、test_stock_2dcnnLSTM_run.py 训练文件

该py文件实现整体训练流程并做绘图操作。依次实现加载数据、数据标准化、取出WIND数据、划分训练集测试集、数据转化为Tensor、形成数据更迭器、载入模型、定义损失、定义优化器、开始训练、损失可视化、显示预测结果。

 6、test_pth.py 模型训练后的测试文件

采用模型训练完成后产生的的pth参数文件对测试数据进行预测,可以展示模型预测效果,前面的处理过程类似test_stock_2dcnnLSTM_run.py所示。

7、loss_draw.py 模型训练后的测试文件

将训练产生并收集的loss.csv展示出来,也就是损失图,红框处可调展示范围。 

  五、实验结果及分析

1、损失图

①训练了200个epoch的损失图:

 ②训练了200个epoch的损失图(局部0-0.0001):

2、预测效果展示

①训练epoch=200后的股票收盘价预测效果如下(使用pth文件进行预测):其中,蓝色为预测曲线,红色为真实曲线,显然,预测基本相近。

 ② 局部展示(展示前两百天的预测效果):局部展示的效果也算是不错的

六、总结及资源

若有朋友需要可运行的源码和数据集,可以guan注【科研小条】公众号,回复【股票预测2DLS】,即可获得。

  • 4
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科研小条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值