SwanHubX/trade-agent-data
数据集
数据集查看器
文件和版本
Pull Requests
讨论

Trade Agent RL Dataset

数据集简介

Trade Agent RL Dataset 是 Trade Agent RL 项目配套的金融 Agent-RL 数据集。

在这个项目里,我们希望构建一只会看行情、查指标、算因子、再执行交易动作的“量化龙虾”。它每天面对一个固定的股票池、初始持仓和现金余额,需要通过多轮工具调用完成一次单日调仓,最后由交易环境根据后续价格表现给出奖励。

所以这份数据并不是传统意义上“给模型背答案”的监督数据。它更像是一个可复现的训练场:Qlib 行情数据提供真实的市场观察,JSONL 样本把每个交易日包装成 Verl 可以读取的 episode 起点,模型则在这些起点上采样自己的交易轨迹。

这份数据集主要服务于教学与复现实验,帮助开发者跑通 “LLM + 工具调用 + 强化学习 + 金融环境” 的完整闭环。它不构成投资建议,也不应直接用于实盘交易。

数据内容

为了让项目拿到数据后就能直接训练,我们把数据拆成了两层:一层是 Qlib 可以读取的原始行情环境,另一层是已经构造好的 Agent-RL 训练入口。

数据说明
qlib_data.zipQlib bin 格式的中国 A 股日频行情数据包。它是交易环境的“市场事实”,用于行情查询、因子计算、环境结算和回测。
rl_train.json / rl_val.jsonVerl 可读取的原始 Agent-RL JSONL 样本文件。下载数据中已经包含这两个文件,可以直接用于训练;如果希望自定义股票池、样本数量或切分方式,也可以基于行情数据重新生成。

Qlib 行情数据

第一部分是 Qlib 行情数据。对于我们的交易 Agent 来说,行情数据不直接塞进 prompt,而是放在 Qlib 数据目录里,由工具在 rollout 过程中按需查询。这样做的好处是模型不会一次性面对一大张难读的股票表格,而是像真实交易员一样,在需要的时候再去看某只股票、某段时间或某个因子。

解压后的默认路径为:

data/qlib_data/cn_data

典型目录结构如下:

data/qlib_data/cn_data/
├── calendars/
│   └── day.txt
├── instruments/
│   └── all.txt
└── features/
    └── <symbol>/
        ├── open.day.bin
        ├── high.day.bin
        ├── low.day.bin
        ├── close.day.bin
        ├── volume.day.bin
        ├── amount.day.bin
        ├── factor.day.bin
        ├── vwap.day.bin
        ├── change.day.bin
        └── adjclose.day.bin

项目中的数据工具主要会读取这些字段:

字段含义
date交易日期,由 Qlib 交易日历提供。
symbol股票或指数代码,例如 SH600519、SZ002156、SH000300。
open / high / low / close开盘价、最高价、最低价、收盘价。
volume / amount成交量和成交额。
factor / adjclose复权与调整价格相关字段。
vwap / change成交均价和日收益变化等派生字段。

教程实验使用了开源项目 chenditc/investment_data 提供的 A 股 Qlib 数据,并在项目脚本中补充了指数和 ETF 数据。在这里再次感谢上游数据项目的整理工作。重新分发或二次使用前,请确认并遵守上游数据来源的许可证和使用条款。

Agent-RL 样本

第二部分是已经构造好的 Agent-RL 样本,也就是 rl_train.json 和 rl_val.json。

这里有一个容易误解的点:JSONL 文件里并没有“正确买哪只股票”的标准答案。每一行只是一个单日交易 episode 的起点,里面记录了当天日期、股票池、初始资金、初始持仓,以及四个工具共享的环境初始化参数。真正的策略好坏,要等模型完成多轮工具调用和交易动作后,再由奖励函数根据组合表现来判断。

示例结构:

{
  "prompt": [
    {
      "role": "system",
      "content": "你是一个专业的量化交易分析师..."
    },
    {
      "role": "user",
      "content": "当前交易日:2025-01-02。\n初始持仓:..."
    }
  ],
  "data_source": "a_stock_single_day",
  "agent_name": "trader_agent",
  "reward_model": {
    "ground_truth": ""
  },
  "extra_info": {
    "date": "2025-01-02",
    "env_id": "3f7a2c9b0d1e4f6a",
    "sample_idx": 0,
    "need_tools_kwargs": true,
    "tools_kwargs": {
      "get_price_data": {
        "create_kwargs": {
          "env_id": "3f7a2c9b0d1e4f6a",
          "scenario": {
            "start_date": "2025-01-02",
            "end_date": "2025-01-02",
            "initial_cash": 1000000.0,
            "universe": ["SH600519", "SZ002156", "SH600036"],
            "initial_positions": []
          }
        }
      }
    }
  }
}

完整样本会为以下工具写入同一个 scenario。也就是说,同一次 rollout 里的行情查询、因子计算和交易动作,看到的是同一个交易日、同一个股票池和同一组初始持仓。

工具用途
get_price_data查询单个标的的历史行情和技术指标。
get_macro_indicators查询沪深 300 等市场指数行情和大盘状态。
compute_alpha_factor使用 Qlib 表达式计算自定义 Alpha 因子。
TakeAction执行买入、卖出或停止交易,并在 episode 结束时产生奖励依据。

默认生成配置见 scripts/train_data_config.py:

配置项默认值
交易日期范围2025-01-01 至 2025-06-30
初始总资产1,000,000
默认股票池SH600519、SZ002156、SH600036
训练/验证切分按交易日时间切分,默认最后 10% 交易日作为验证集

我们按交易日切分训练集和验证集,而不是随机打散。这样做是为了尽量避免时间泄漏,让验证集更接近“未来行情”的评估方式。模型在一个 episode 中只能基于当前交易日及历史市场数据调用工具,最终奖励来自交易结束后的组合表现评估。

下载方法

为了避免不同平台下载命令造成目录结构不一致,本数据集只通过 Trade Agent RL 项目中的 bash 脚本下载。请先进入项目根目录,然后运行:

bash scripts/download_data.sh

脚本会下载数据包并完成解压整理。下载完成后,项目目录下应该能看到:

data/qlib_data/cn_data
data/rl_train.json
data/rl_val.json

生成 RL 训练样本

通常情况下不需要重新生成训练样本,因为下载数据中已经包含可直接训练的原始 JSONL 文件:data/rl_train.json 和 data/rl_val.json。

如果开发者想做自己的实验,例如换一组股票池、增加样本数量、调整初始资金,或者改变训练集和验证集的时间切分,可以基于同一份 Qlib 行情数据重新生成 JSONL:

python scripts/gen_rl_dataset.py \
  --output-dir data \
  --num-samples 500 \
  --universe SH600519 SZ002156 SH600036

脚本会重新写出:

data/rl_train.json
data/rl_val.json

一些常用参数如下:

python scripts/gen_rl_dataset.py \
  --initial-cash 1000000 \
  --max-position-value 400000 \
  --val-ratio 0.1 \
  --qlib-data-dir data/qlib_data/cn_data \
  --seed 42

在训练中使用

拿到 rl_train.json、rl_val.json 和 Qlib 行情目录后,就可以回到 Trade Agent RL 项目里启动 Verl GRPO 训练:

DATA_DIR=./data \
MODEL_PATH=./models/Qwen3.5-4B \
bash run_grpo-qwen35.sh

训练脚本默认读取:

data/rl_train.json
data/rl_val.json
data/qlib_data/cn_data

需要注意的是,工具的数据路径也要与 tool_config.yaml 中的 qlib_data_dir 保持一致。否则模型在 rollout 时虽然能读到 JSONL 样本,但工具会找不到对应的行情数据。

适用场景

  • Agentic-RL / 多轮工具调用训练实验
  • Verl GRPO 金融 Agent 示例复现
  • Qlib 行情工具调用和因子查询实验
  • 单日股票调仓环境的教学演示
  • LLM 金融决策轨迹采样、奖励设计和回测可视化

限制与风险

⚠️注意:数据集和项目环境仅用于教学与研究样例,无法直接进行实盘交易!

为了让 Agent-RL 训练闭环更容易被理解和复现,我们简化了真实交易里的撮合、盘口、涨跌停、成交量约束、滑点细节和风控流程。模型输出也可能产生错误判断、无效交易或过拟合行为。

请勿将本数据集、模型训练结果或回测结果直接作为投资建议或实盘交易依据。

数据来源与致谢

  • Qlib: https://github.com/microsoft/qlib
  • investment_data: https://github.com/chenditc/investment_data