---
title: trade-agent-data
canonical_url: "https://www.modelscope.cn/datasets/SwanLab/trade-agent-data"
md_url: "https://www.modelscope.cn/datasets/SwanLab/trade-agent-data.md"
repository: SwanLab/trade-agent-data
chinese_name: trade-agent-data
last_updated: 2026-06-15
license: other
downloads: 299
stars: 0
---

# trade-agent-data

> trade-agent-data - SwanLab 在 ModelScope 开源的数据集。Trade Agent RL Dataset

SwanLab/trade-agent-data 是 ModelScope 魔搭社区上的数据集，采用 other 许可。

- **Repository**: SwanLab/trade-agent-data
- **License**: other
- **Downloads**: 299
- **Stars**: 0
- **Last updated**: 2026-06-15

Source: https://www.modelscope.cn/datasets/SwanLab/trade-agent-data

---

# Trade Agent RL Dataset

## 数据集简介

![](images/dataset.png)

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>
