开源项目_强化学习股票预测
1 项目介绍
项目地址:https://github.com/wangshub/RL-Stock
我修改后的地址:https://github.com/xieyan0811/RL-Stock-XY
我修改的内容:
更新了工具链和相关 API
添加参数以支持只下载指定的股票
对空数据进行了插补
为强化学习部分添加了更多注释
2 代码说明
代码只有几百行,比我想象中简单得多,没想到强化学习工具如此易用。
下载数据:get_stock_data.py
训练模型入口:main.py(stock_trade 函数),包括训练和测试功能。
逻辑核心:StockTradingEnv0.py,负责处理股票数据、定义状态空间和动作空间等。
3 用后感
股票数据集来源于 baostock,可直接下载 1990 年起的数据,无需注册,K 线数据除了开盘、收盘、最高、最低,还包含 市盈率、市争率等等。。
使用强化学习的方法并不复杂,项目中使用的是 stable_baseline 强化学习库,无需深入 PPO 和深度学习库,仅需几句代码即可训练。只需定义状态、动作、奖励,进行数据转换,并实现 step() 函数。整体难度类似于操作 gbm(如 xgboost/lightgbm),关键在于如何定义问题和处理数据。
在无 GPU 机器上,对每支股票训练的模型运行速度依然很快。测试了少量股票,预测效果一般,但结构设计良好。该项目本质是将股票数据与强化学习结合的演示,并非直接用于股票操作的工具,不建议直接用于股票操作!!!
建议添加参数 adjustflag = 1
以进行复权。
4 原理
4.1 数据
训练数据为股票 XX 从 1990 到 2025 年的日 K 线数据,每行代表一天的市场信息。
在强化学习环境中,每一步(step)代表一天,智能体根据当前状态(如价格、持仓、资金等)执行操作(买/卖/持有)。
4.2 状态空间
当前状态通常包括当天的市场数据和账户信息(如持仓、资金)。仅使用当天数据,智能体只能基于这一天做决策。
若将“过去几天的数据”(如最近 5 天的 K 线)纳入状态,智能体可利用历史信息进行更具上下文的决策。
4.3 决策逻辑
智能体在每一步只依据当前状态生成动作。
环境根据动作和新市场数据更新状态,让智能体继续决策。
通过试错,强化学习模型学习在不同状态下的最佳动作,以获得更高的长期收益。
4.4 扩展:强化学习如何学习“多步策略”?
我们希望强化学习模型在预测股票时,能够像围棋模型一样具备全局视角。
围棋 RL 模型通过累计奖励和复杂状态空间实现长视决策,智能体不仅关注当前,还能进行多步配合。以下是围棋模型的实现方式:
状态设计:棋局状态包含所有历史落子,智能体能“看到”全局。
策略网络:深度神经网络(如卷积网络 + LSTM)自动学习“多步配合”的模式。
回溯奖励:即使某步无直接奖励,智能体也可通过“回溯”识别其对最终胜负的贡献,从而形成策略。
当前方法仅关注单步,无异于 xgboost 模型:状态 ≈ 特征,奖励 ≈ 目标,智能体学的是“当前状态下的最优动作”,不具备历史记忆。
要实现多步策略,需要:
在状态中包含历史信息
如加入过去 N 天的 K 线数据和账户变化,让模型“看到”历史。在奖励函数中考虑一段时间的收益
将奖励设计为一段时间内的累计收益、回撤、风险等,而非单步利润。使用有记忆的神经网络
如 RNN/LSTM 策略网络,使模型能自动记住并利用历史序列。
5 相关工具
5.1 stable_baselines 库
Stable Baselines 是一个 Python 强化学习库,提供多种经典与先进的 RL 算法实现,简化了智能体的训练和评估过程。
支持的算法包括 DQN、DDPG、PPO、A2C、SAC、TD3 等。
完美兼容 Gym 环境,可在 OpenAI Gym 或自定义环境中使用。
由于原版 stable_baselines 已停止维护,推荐使用更稳定、文档更加完善并兼容 PyTorch 的 stable_baselines3。
此外,像 batch_size 网络大小等参数在使用算法时都可以自定义设置。
5.2 gym/gymnasium
Gym 是强化学习环境库,是 OpenAI Gym 的官方继任者和升级版。它提供标准化的环境接口(如 step、reset、render 方法),支持多种经典和自定义环境,包括游戏、控制、金融等场景,使智能体能够在这些环境中进行训练和测试。