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

相关文章

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

Python屏幕抓取和录制的详细代码示例

《Python屏幕抓取和录制的详细代码示例》随着现代计算机性能的提高和网络速度的加快,越来越多的用户需要对他们的屏幕进行录制,:本文主要介绍Python屏幕抓取和录制的相关资料,需要的朋友可以参考... 目录一、常用 python 屏幕抓取库二、pyautogui 截屏示例三、mss 高性能截图四、Pill

使用MapStruct实现Java对象映射的示例代码

《使用MapStruct实现Java对象映射的示例代码》本文主要介绍了使用MapStruct实现Java对象映射的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、什么是 MapStruct?二、实战演练:三步集成 MapStruct第一步:添加 Mave