trade-agent-data
收藏资源简介:
# Trade Agent RL Dataset ## 数据集简介  Trade Agent RL Dataset 是 [Trade Agent RL](https://gitcode.com/SwanHubX/Trade-Agent-RL) 项目配套的金融 Agent-RL 数据集。 在这个项目里,我们希望构建一只会看行情、查指标、算因子、再执行交易动作的“量化龙虾”。它每天面对一个固定的股票池、初始持仓和现金余额,需要通过多轮工具调用完成一次单日调仓,最后由交易环境根据后续价格表现给出奖励。 所以这份数据并不是传统意义上“给模型背答案”的监督数据。它更像是一个可复现的训练场:Qlib 行情数据提供真实的市场观察,JSONL 样本把每个交易日包装成 Verl 可以读取的 episode 起点,模型则在这些起点上采样自己的交易轨迹。 这份数据集主要服务于教学与复现实验,帮助开发者跑通 “LLM + 工具调用 + 强化学习 + 金融环境” 的完整闭环。它不构成投资建议,也不应直接用于实盘交易。 ## 数据内容 为了让项目拿到数据后就能直接训练,我们把数据拆成了两层:一层是 Qlib 可以读取的原始行情环境,另一层是已经构造好的 Agent-RL 训练入口。 | 数据 | 说明 | | --- | --- | | `qlib_data.zip` | Qlib bin 格式的中国 A 股日频行情数据包。它是交易环境的“市场事实”,用于行情查询、因子计算、环境结算和回测。 | | `rl_train.json` / `rl_val.json` | Verl 可读取的原始 Agent-RL JSONL 样本文件。下载数据中已经包含这两个文件,可以直接用于训练;如果希望自定义股票池、样本数量或切分方式,也可以基于行情数据重新生成。 | ### Qlib 行情数据 第一部分是 Qlib 行情数据。对于我们的交易 Agent 来说,行情数据不直接塞进 prompt,而是放在 Qlib 数据目录里,由工具在 rollout 过程中按需查询。这样做的好处是模型不会一次性面对一大张难读的股票表格,而是像真实交易员一样,在需要的时候再去看某只股票、某段时间或某个因子。 解压后的默认路径为: ```text data/qlib_data/cn_data ``` 典型目录结构如下: ```text 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 的起点,里面记录了当天日期、股票池、初始资金、初始持仓,以及四个工具共享的环境初始化参数。真正的策略好坏,要等模型完成多轮工具调用和交易动作后,再由奖励函数根据组合表现来判断。 示例结构: ```json { "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 bash scripts/download_data.sh ``` 脚本会下载数据包并完成解压整理。下载完成后,项目目录下应该能看到: ```text 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: ```bash python scripts/gen_rl_dataset.py \ --output-dir data \ --num-samples 500 \ --universe SH600519 SZ002156 SH600036 ``` 脚本会重新写出: ```text data/rl_train.json data/rl_val.json ``` 一些常用参数如下: ```bash 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 训练: ```bash DATA_DIR=./data \ MODEL_PATH=./models/Qwen3.5-4B \ bash run_grpo-qwen35.sh ``` 训练脚本默认读取: ```text 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>



