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

相关文章

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模