当前位置: 首页 > ops >正文

2-深度学习挖短线股1

选短线个股的流程

(1)数据预处理,根据短线个股筛选标准,给个股日线数据打标。
(2)模型训练,针对每只股票,训练得到分类模型。
(3)结果预测,根据训练得到的模型,计算股票每日的分类预测值。
(4)策略回测,基于股票每日的分类预测值,回测策略收益情况。
(5)个股筛选,如果策略验证可行,即可根据模型筛选出当前符合买入条件的股票。

数据预处理

       将短线个股的筛选问题处理为使用深度学习解决的分类问题,目标是筛选出10个交易日内,上涨幅度大于10%的股票。这里选择2017年12月31日及之前的数据作为训练数据,2018年1月1日之后的数据用于做预测。

股票范围选择

        为了应用深度学习算法,需要有足够的训练数据。为此,选择2016年1月1日至2017年12月31日内日线数量多于300的个股,代码如下:

# -*- coding: utf-8 -*-
"""
Created on Wed Jun  4 10:42:49 2025@author: Administrator
"""
import pandas as pd  # 导入pandas库,用于数据处理和分析stk_code_file = './stk_data/stk_list.csv'  # 定义股票代码文件的路径
stk_list = pd.read_csv(stk_code_file)['code'].tolist()  # 读取股票代码文件,提取code列并转换为列表pd_stocks_list = []  # 初始化符合条件的股票代码列表
for stk_code in stk_list:  # 遍历所有股票代码df = pd.read_csv('./stk_data/d/{}.csv'.format(stk_code))  # 读取单只股票的日线数据# 筛选出2016年到2017年的数据,并检查交易天数是否超过300天if df[(df['date'] >= '2016-01-01') & (df['date'] <= '2017-12-31')].shape[0] > 300:pd_stocks_list.append(stk_code)  # 如果符合条件,将股票代码添加到结果列表out_df = pd.DataFrame(pd_stocks_list, columns = ['code'])  # 将结果列表转换为DataFrame
out_df.to_csv('./stk_data/dp_stock_list.csv', index = False)  # 将结果保存为CSV文件,不包含行索引

训练数据计算

选择2017年12月31日及之前的数据作为训练数据,计算训练数据的输入特征及分类标签。将10个交易内上涨幅度超过10%的股票标记为类别1,其他股票标记为类别0。为了给深度学习模型提供更多的输入维度,可以基于日线数据的开盘价、收盘价、最高价、最低价、成交量等进行扩展。这里只扩展5、10、20、30、60、120、240均线及均量线数据,后续可根据需要计算MACD、KDJ、RSI等指标数据,进一步扩展输入维度。

程序的主要处理流程是:首先定义了买入信号的计算逻辑,即未来 N 个交易日内涨幅达到 INC_PER 则标记为买入信号;然后读取股票代码列表,逐个处理每只股票的数据,计算多种移动平均线指标;最后根据预设条件生成买入信号,并将所有处理后的数据保存到新文件中。注释部分还列出了其他可扩展的技术指标计算函数,方便后续扩展使用。

# -*- coding: utf-8 -*-
"""
Created on Thu Jun  5 08:54:22 2025@author: Administrator
"""
from __future__ import (absolute_import, division, print_function,unicode_literals)
import datetime  # 用于datetime对象操作
import os.path  # 用于管理路径
import sys  # 用于在argvTo[0]中找到脚本名称
import pandas as pd
import numpy as np
# 引入topq_talib,计算技术指标
script_path = os.path.dirname(os.path.abspath(sys.argv[0]))
talib_path = os.path.join(script_path, '../../TQDat/TQDown2020v1/topqt/')
sys.path.append(talib_path)
import topq_talib1 as tt # 类别标准:N个交易日内上涨INC_PER
N = 10
INC_PER = 0.1# n 天内上涨inc_per,生成买入信号
def calc_buy_signal(df, n, inc_per):df = df[df.notnull().T.all()]  # 过滤掉包含缺失值的行buy = np.zeros(df.shape[0])  # 初始化买入信号数组,全部设为0df.insert(df.shape[1], 'buy', buy)  # 在DataFrame中插入buy列df = df.copy()  # 复制DataFrame,避免后续操作影响原数据row_i = 0for row_i in range(df.shape[0]):  # 遍历每一行for n_i in range(n):  # 在未来n天内查找# 如果未来某天的收盘价相比当前行的收盘价涨幅超过inc_per,则标记为买入信号if row_i + n_i + 1 < df.shape[0] and \df.iloc[row_i + n_i + 1].at['close'] - df.iloc[row_i].at['close'] > inc_per * df.iloc[row_i].at['close']:df.loc[df.index[row_i], 'buy'] = 1  # 设置买入信号为1break  # 找到符合条件的日期后跳出循环return df# 读入股票代码
stk_code_file = './stk_data/dp_stock_list.csv'
stk_pools = pd.read_csv(stk_code_file, encoding = 'gbk')  # 读取股票代码池
# 对每个股票添加衍生数据
for stk_code in stk_pools['code']:  # 遍历每个股票代码# 读入数据input_file = './stk_data/d/' + stk_code + '.csv'if not os.path.exists(input_file):  # 检查文件是否存在continue  # 不存在则跳过当前股票df = pd.read_csv(input_file, index_col = 0)  # 读取股票数据,使用第一列作为索引df = df.sort_index(ascending = True)  # 按索引升序排列数据# 计算移动平均线(MA)ma_list = [5, 10, 20, 30, 60, 120, 240]for i in ma_list:df = tt.MA_n(df, i)  # 计算不同周期的移动平均线# 计算成交量移动平均线(vol_MA)vol_ma_list = [5, 10, 20, 30, 60, 120, 240]for i in vol_ma_list:df = tt.vol_MA_n(df, i)  # 计算不同周期的成交量移动平均线'''可扩展指标#BBANDSdf = tt.BBANDS_UpLow(df, 20)#MACDdf = tt.MACD020(df, 12, 26)#KDJdf = tt.KDJ(df, 9, 3)#RSIdf = tt.RSI(df, 14)# A/Dad_list = [5, 10, 20, 30, 60, 120, 240]for i in ad_list:df = tt.ACCDIST(df, i)# ATRcdatr_list = [5, 10, 20, 30, 60, 120, 240]for i in atr_list:df = tt.ATR(df, i)'''df = calc_buy_signal(df, N, INC_PER)  # 计算买入信号# 写出文件output_file = './baostock/data_ext/' + stk_code +'.csv'df.to_csv(output_file)  # 将处理后的数据保存到新文件print(stk_code + ' done!')  # 打印处理完成的股票代码

http://www.xdnf.cn/news/12415.html

相关文章:

  • JS面试常见问题——数据类型篇
  • 边缘计算网关提升水产养殖尾水处理的远程运维效率
  • 【油藏地球物理正演软件ColchisFM】浅谈ColchisFM地震正演分析在地震资料解释中的作用(四)
  • 加密狗、注册机:常见的软件加密工具介绍
  • 利用NVivo进行数据可视化,重塑定性研究
  • 基于Selenium+Python的web自动化测试框架
  • Android Camera Hal中通过Neon指令优化数据拷贝
  • 使用扩散模型解决Talking Head生成中的头像抖动问题
  • 数据结构与算法——并查集
  • curl获取ip定位信息 --- libcurl-multi(三)
  • 在线OJ项目测试
  • [蓝桥杯]搭积木
  • OD 算法题 B卷【猴子吃桃】
  • 常用操作符,操作符相关笔试题(谷歌)及算法的优化(上)
  • C++编程——关于比较器的使用
  • 1panel面板中部署SpringBoot和Vue前后端分离系统 【图文教程】
  • 深入解析YUM与DNF:RPM包管理器的架构演进与功能对比
  • 前端flex、grid布局
  • VS如何编译Zlib库
  • curl获取ip定位信息 --- libcurl-easy(二)
  • 理解非结构化文档:将 Reducto 解析与 Elasticsearch 结合使用
  • Qt生成日志与以及报错文件(mingw64位,winDbg)————附带详细解说
  • Cesium使用glb模型、图片标记来实现实时轨迹
  • 数学:数的概念是如何发展的?
  • 基于IDIG-GAN的小样本电机轴承故障诊断
  • PWN-中级ROP-[HNCTF 2022 WEEK2]ret2csu
  • 紧急调整!亚马逊70%谷歌广告预算转向新渠道
  • 引领AI安全新时代 Accelerate 2025北亚巡展·北京站成功举办
  • Spring Boot 实现流式响应(兼容 2.7.x)
  • 408第一季 - 数据结构 - 栈与队列