CNN-LSTM选A股牛股(代码+数据+一键可运行)

2023-10-14 14:50

本文主要是介绍CNN-LSTM选A股牛股(代码+数据+一键可运行),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在当前金融市场中,投资者对于高效的股票推荐系统需求不断增加。为了满足这一需求,我们开发了一款基于人工智能的牛股推荐器V1.0,其技术路线和方法在本文中将得到详细阐述。

全代码和数据关注公众号《三个篱笆三个班》免费提供!一键可跑,每日选股。

对AI炒股感兴趣的小伙伴可加WX群:caihaihua057200(备注:学校/机构+姓名+专业)

一、数据集构建与预处理

    为了构建可靠的牛股推荐器,我们首先需要一个可信的数据集。我们使用akshare爬取了自2015年至今的前复权股票数据,包括每日的开盘价、收盘价、最高价、最低价、成交量、成交额、振幅、涨跌幅、涨跌额以及换手率等特征。这一数据集涵盖了5000+支股票。爬虫代码如下:

### 导包
import akshare as ak
import pandas as pd
import numpy as np
import os
from tqdm import tqdm
### 设置工作路径
mypath=r"D:\akshare"
stock_zh_spot_df = ak.stock_zh_a_spot_em() ## 获取实时数据
stock_zh_spot_data=stock_zh_spot_df[stock_zh_spot_df['名称']!=''] ## 去除名称为空值的数据
codes_names=stock_zh_spot_data[['代码','名称']]
day ='20150101'
length=len(codes_names)
all_data = pd.DataFrame([])
for i in tqdm(range(length), desc="Processing items"):data_df = ak.stock_zh_a_hist(symbol=codes_names['代码'][i], period="daily", start_date=f"{day}",adjust="qfq")  ## 日度数据,后复权data_df['stock_id'] = codes_names['代码'][i]all_data = all_data.append(data_df)
all_data.to_csv(os.path.join(mypath+'\\'+f'{day}.csv'),encoding='utf_8_sig') ## 数据导出为csv文件

在数据预处理过程中,排除总交易日少于300天的股票,接下来我们将单只股票按照时间窗口大小为90天进行滑动裁剪,形成(90,10)的数据样本,即每个样本包含了90天的历史特征形成一个矩阵。整个预处理过程共生成了约600多万个矩阵,即(600W+,90,10)。这些矩阵将作为训练特征。而对应于每个矩阵的标签(label)则是基于该90天之后的趋势得到的。我们设计了一个指标,即未来5天后最低价均价相对于明天开盘价的涨幅,如果未来五天内开盘价均值相对于明天的开盘价增长了25%以上,将其定义为正样本,否则为负样本。代码如下:

df = pd.read_csv('/data/chh/NLP/20150101.csv')
start_time = time.time()
grouped = df.groupby('stock_id')
samples = []
label = []
# 遍历每个产品ID的分组
for _, group in tqdm(grouped):product_samples = group.valuesnum_samples = len(product_samples)if num_samples < 300:continuefor i in range(num_samples - 95):LLL = product_samples[i:i + 96, 2:6].astype(np.float32)LLLL = product_samples[i:i + 96, 11:12].astype(np.float32)if np.any(np.isnan(LLL)) or np.any(LLL <= 0) or np.any(np.isnan(LLLL)) or np.any(LLLL < 0.1):# print("存在负值、零或空值")passelse:sample = product_samples[i:i + 90, 2:-1]l = product_samples[i + 90:i + 91, 2:3]ll = np.mean(product_samples[i + 91:i + 96, 5:6])lll = (ll - l) / lif lll > 0.25 :label.append(1)else:label.append(0)samples.append(sample)
train_data = np.array(samples)
train_data = train_data.astype(np.float32)
train_label = np.array(label)
print(train_data.shape)

二、模型构建

    在牛股推荐器V1.0中,我们采用了一种强大的混合模型,它由CNN-BiLSTM和2DCNN组成,用于对股票数据进行建模和预测。这个混合模型结合了卷积神经网络(CNN)和双向长短期记忆网络(BiLSTM),能够更好地捕捉时间序列信息和长期依赖关系,从而显著提高了预测性能。

    在模型构建过程中,我们还引入了注意力机制和残差模块来处理近期振幅特征和换手率特征。这一举措进一步增强了模型对于这些特征的关注程度和信息利用效率。我们设计这些模块的原因在于股票数据存在时间序列现象。因此,我们选择了CNN-BiLSTM来处理时间序列数据。另外,特征也可视为一个(90,10)的特征图谱,为了提取图谱中局部特征和全局特征,我们采用了2DCNN。最后,我们将所有特征融合,并利用MLP降维到2维,从而将问题转化为分类任务。这样的设计旨在综合利用多种特征,以更好地进行股票预测。

三、训练与优化

    为了得到高效的牛股推荐器V1.0,我们使用了交叉熵损失函数进行模型训练。优化器方面,采用了ADAM优化器和余弦退火学习率的策略,初始学习率设置为0.001,并采用较大的batch_size=40000,以加快训练过程。为了确保模型的泛化性能,我们进行了十折交叉验证。通过十个在验证集loss最低的模型,并将最终结果取十个最优模型的均值,得到了最终的推荐结果。十折交叉验证测试结果(ROC-AUC≈0.895)证明模型具备强大的分类能力。如图:

四、应用

    我们的基于AI的牛股推荐器V1.0将成为一个每日更新的实用工具。每天,我们将使用该模型爬取当天的股票数据,并通过模型的预测结果进行股票推荐。用户可以通过我们的平台免费测试和获取推荐结果。

    使用我们的牛股推荐器非常简单,用户只需访问我们的公众号【三个篱笆三个班】,即可获取每日推荐结果。推荐结果将是信心指数。

    值得一提的是,我们的推荐器经过了充分的训练和优化,尽可能提供准确、稳定的推荐结果。然而,投资股市存在风险,股票市场的走势难以完全预测,因此我们建议用户在做出投资决策前,还是应该谨慎考虑并做好自己的独立研究。

    我们衷心希望,基于AI的牛股推荐器V1.0能够为广大投资者提供有价值的信息,帮助大家做出更明智的投资决策。同时,我们将持续改进和优化推荐器的性能,以提供更好的服务和用户体验。

    欢迎大家来体验我们的牛股推荐器,并在使用过程中提供宝贵的反馈意见。我们将不断努力,为用户提供更优质的服务。祝大家投资顺利,收获丰富!

这篇关于CNN-LSTM选A股牛股(代码+数据+一键可运行)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/211213

相关文章

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1