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

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来