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

2-深度学习挖短线股-2-训练数据计算

2  训练数据计算

        选择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  # 导入os.path模块用于路径处理
import sys  # 导入sys模块用于获取脚本路径等系统信息
import pandas as pd  # 导入pandas模块用于数据处理
import numpy as np  # 导入numpy模块用于数值计算# 引入topq_talib,计算技术指标
script_path = os.path.dirname(os.path.abspath(sys.argv[0]))  # 获取当前脚本路径
talib_path = os.path.join(script_path, '../../TQDat/TQDown2020v1/topqt/')  # 计算topq_talib模块路径
sys.path.append(talib_path)  # 将topq_talib模块路径添加到系统路径
import topq_talib1 as tt  # 导入topq_talib1模块并命名为tt# 类别标准:N个交易日内上涨INC_PER
N = 10  # 定义预测周期为10个交易日
INC_PER = 0.1  # 定义上涨阈值为10%# n 天内上涨inc_per
def calc_buy_signal(df, n, inc_per):df = df[df.notnull().T.all()]  # 移除包含空值的列buy = np.zeros(df.shape[0])  # 创建全0数组用于存储买入信号df.insert(df.shape[1], 'buy', buy)  # 在DataFrame中插入buy列,初始值为0df = df.copy()  # 复制DataFrame防止SettingWithCopyWarningrow_i = 0for row_i in range(df.shape[0]):  # 遍历DataFrame的每一行for n_i in range(n):  # 遍历未来n个交易日# 检查是否超出数据范围,并且是否满足上涨条件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  # 满足条件则标记为买入信号break  # 找到第一个满足条件的交易日即退出内层循环return df  # 返回添加了买入信号的DataFrame# 读入股票代码
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)  # 读取股票数据,设置index列为索引df = df.sort_index(ascending=True)  # 按索引升序排序# MAma_list = [5, 10, 20, 30, 60, 120, 240]  # 定义移动平均线周期列表for i in ma_list:  # 遍历每个周期df = tt.MA_n(df, i)  # 计算i周期的移动平均线并添加到DataFrame# vol_MAvol_ma_list = [5, 10, 20, 30, 60, 120, 240]  # 定义成交量移动平均线周期列表for i in vol_ma_list:  # 遍历每个周期df = tt.vol_MA_n(df, i)  # 计算i周期的成交量移动平均线并添加到DataFrame'''可扩展指标#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)  # 将处理后的数据保存为CSV文件print(stk_code + ' done!')  # 打印完成提示

相关文章:

  • Elasticsearch 中的精确搜索与模糊搜索
  • 从手机随拍到标准扫描件:AI如何智能校正证件照片(Python+OpenCV)
  • 机器人系统ROS中包内节点启动详解和实战示例
  • Maven配置本地仓库、中央仓库、公司私有仓库
  • 笔记04:层叠的定义及添加
  • 【机器学习深度学习】线性回归
  • 高中成绩可视化平台开发笔记
  • Jenkins 部署与使用
  • Nordic nRF52832 寄存器级 UARTE 发送实现
  • Python中的多线程与协程:程序、线程、进程之间的关联关系
  • 发布:大彩DN系列3.2寸全视角IPS串口屏发布!
  • MySQL(基础篇)
  • Django 零基础起步:开发你的网站第一步
  • 阿里推出 R1-Omni:将强化学习与可验证奖励(RLVR)应用于全模态大语言模型
  • 如何将 Memfault 固件 SDK 集成到使用 Nordic 的 nRF Connect SDK(NCS)的项目中
  • LlamaIndex基础概念与核心架构
  • Linux中部署Jenkins保姆间教程
  • [mcp-servers] docs | AI客户端-MCP服务器-AI 架构
  • WPF 实现自定义弹窗输入功能
  • 第一章-人工智能概述-深度学习与AI发展(2/36)