Skip to content

SimTradeData is a utility library supporting SimTradeLab and simtradeML with reliable, high-quality simulated trading data for model training, backtesting, and performance evaluation.

License

Notifications You must be signed in to change notification settings

kay-ou/SimTradeData

Repository files navigation

SimTradeData - 高效量化交易数据下载工具

BaoStock + Mootdx 双数据源 | 统一下载命令 | PTrade格式兼容 | DuckDB + Parquet存储

SimTradeData 是为 SimTradeLab 设计的高效数据下载工具。支持 BaoStock 和 Mootdx(通达信)双数据源,各取所长自动编排,采用 DuckDB 作为中间存储,导出为 Parquet 格式,支持高效的增量更新和数据查询。


推荐组合:SimTradeData + SimTradeLab

完全兼容PTrade | 回测速度提升20倍以上

SimTradeLab

无需修改PTrade策略代码 | 极速本地回测 | 零成本解决方案


核心特性

高效存储架构

  • DuckDB 中间存储: 高性能列式数据库,支持 SQL 查询和增量更新
  • Parquet 导出格式: 压缩高效,跨平台兼容,适合大规模数据分析
  • 自动增量更新: 智能识别已下载数据,仅更新增量部分

数据完整性

  • 市场数据: OHLCV 日线数据,含涨跌停价、前收盘价
  • 估值指标: PE/PB/PS/PCF/换手率/总股本/流通股
  • 财务数据: 23个季度财务指标 + TTM指标自动计算
  • 除权除息: 分红、送股、配股数据
  • 复权因子: 前复权/后复权因子
  • 元数据: 股票信息、交易日历、指数成分股、ST/停牌状态

数据质量保障

  • 自动验证: 写入前自动验证数据完整性
  • 导出时计算: 涨跌停价、TTM指标等在导出时计算,确保数据一致性
  • 详细日志: 完整的错误日志和警告信息

生成的数据结构

data/
├── simtradedata.duckdb          # DuckDB 数据库(下载时使用)
└── parquet/                     # 导出的 Parquet 文件
    ├── stocks/                  # 股票日线行情(每股票一个文件)
    │   ├── 000001.SZ.parquet
    │   └── 600000.SS.parquet
    ├── exrights/                # 除权除息事件
    ├── fundamentals/            # 季度财务数据(含TTM)
    ├── valuation/               # 估值指标(日频)
    ├── metadata/                # 元数据
    │   ├── stock_metadata.parquet
    │   ├── benchmark.parquet
    │   ├── trade_days.parquet
    │   ├── index_constituents.parquet
    │   ├── stock_status.parquet
    │   └── version.parquet
    ├── ptrade_adj_pre.parquet   # 前复权因子
    ├── ptrade_adj_post.parquet  # 后复权因子
    └── manifest.json            # 数据包清单

快速开始

方式一:直接下载现成数据(推荐)

已导出的 Parquet 数据包(2025年数据),可直接用于 SimTradeLab 回测:

夸克网盘分享:simtradelab_data_2025_parquet.zip

提取码:5DdN

# 解压到 SimTradeLab 数据目录
unzip simtradelab_data_2025_parquet.zip -d /path/to/SimTradeLab/data/

方式二:自行下载数据

1. 安装依赖

# 克隆项目
git clone https://github.com/kay-ou/SimTradeData.git
cd SimTradeData

# 安装依赖
poetry install

# 激活虚拟环境
poetry shell

2. 下载数据

推荐方式:统一下载命令

一条命令完成所有数据下载,自动编排 Mootdx 和 BaoStock 各自擅长的数据:

# 完整下载(推荐)
# Mootdx: 行情、复权因子、除权除息、批量财务、交易日历、基准指数
# BaoStock: 估值指标、ST/停牌状态、指数成分股
poetry run python scripts/download.py

# 查看数据状态
poetry run python scripts/download.py --status

# 跳过财务数据(更快)
poetry run python scripts/download.py --skip-fundamentals

# 仅运行 Mootdx 阶段
poetry run python scripts/download.py --source mootdx

# 仅运行 BaoStock 阶段
poetry run python scripts/download.py --source baostock

数据源分工说明

数据类型 负责数据源 原因
行情 OHLCV Mootdx 速度快,本地网络
复权因子 Mootdx 随行情一起下载
除权除息 (XDXR) Mootdx 数据更完整
批量财务数据 Mootdx 一个ZIP=所有股票,远优于逐股查询
估值 PE/PB/PS/换手率 BaoStock 独有数据
ST/停牌状态 BaoStock 独有数据
指数成分股 BaoStock 独有数据
交易日历 Mootdx 随行情一起
基准指数 Mootdx 随行情一起

单独使用某个数据源

# BaoStock(包含估值数据,但速度较慢)
poetry run python scripts/download_efficient.py
poetry run python scripts/download_efficient.py --skip-fundamentals
poetry run python scripts/download_efficient.py --valuation-only  # 仅估值+状态

# Mootdx(速度快,但无估值数据)
poetry run python scripts/download_mootdx.py
poetry run python scripts/download_mootdx.py --skip-fundamentals

TDX 官方数据包(最快获取完整历史行情)

# 自动下载通达信官方沪深京日线完整包(~500MB)
poetry run python scripts/download_tdx_day.py

# 强制重新下载
poetry run python scripts/download_tdx_day.py --force-download

# 使用已下载的文件
poetry run python scripts/download_tdx_day.py --file hsjday.zip

3. 导出为 Parquet

# 导出为 PTrade 兼容的 Parquet 格式
poetry run python scripts/export_parquet.py

# 指定输出目录
poetry run python scripts/export_parquet.py --output data/parquet

4. 在 SimTradeLab 中使用

# 复制 Parquet 文件到 SimTradeLab 数据目录
cp -r data/parquet/* /path/to/SimTradeLab/data/

项目架构

SimTradeData/
├── scripts/
│   ├── download.py                # 统一下载入口(推荐)
│   ├── download_efficient.py      # BaoStock 下载脚本
│   ├── download_mootdx.py         # Mootdx(通达信API)下载脚本
│   ├── download_tdx_day.py        # TDX 官方日线数据包下载导入脚本
│   ├── import_tdx_day.py          # TDX .day 文件导入脚本
│   └── export_parquet.py          # Parquet 导出脚本
├── simtradedata/
│   ├── fetchers/
│   │   ├── base_fetcher.py      # 基础 Fetcher 类
│   │   ├── baostock_fetcher.py  # BaoStock 数据获取
│   │   ├── unified_fetcher.py   # BaoStock 统一数据获取(优化版)
│   │   ├── mootdx_fetcher.py    # Mootdx 基础数据获取
│   │   ├── mootdx_unified_fetcher.py  # Mootdx 统一数据获取
│   │   └── mootdx_affair_fetcher.py   # Mootdx 财务数据获取
│   ├── processors/
│   │   └── data_splitter.py     # 数据分流处理
│   ├── writers/
│   │   └── duckdb_writer.py     # DuckDB 写入和导出
│   ├── validators/
│   │   └── data_validator.py    # 数据质量验证
│   ├── config/
│   │   ├── field_mappings.py    # 字段映射配置
│   │   └── mootdx_finvalue_map.py  # Mootdx 财务字段映射
│   └── utils/
│       ├── code_utils.py        # 股票代码转换
│       └── ttm_calculator.py    # 季度范围计算
├── data/                        # 数据目录
└── docs/                        # 文档
    ├── PTRADE_PARQUET_FORMAT.md # Parquet 格式规范
    └── PTrade_API_mini_Reference.md

核心模块

1. UnifiedDataFetcher - 统一数据获取

  • 一次 API 调用获取行情、估值、状态数据
  • 减少 API 调用次数 33%

2. DuckDBWriter - 数据存储和导出

  • 高效的增量写入(upsert)
  • 导出时计算涨跌停价、TTM指标
  • Forward fill 季度数据到日频

3. DataSplitter - 数据分流

  • 将统一数据按类型分流到不同表

数据字段说明

stocks/ - 股票日线

字段 说明
date 交易日期
open/high/low/close OHLC价格
high_limit/low_limit 涨跌停价(导出时计算)
preclose 前收盘价
volume 成交量(股)
money 成交金额(元)

valuation/ - 估值指标(日频)

字段 说明
pe_ttm/pb/ps_ttm/pcf 估值比率
roe/roe_ttm/roa/roa_ttm 盈利指标(季报forward fill)
naps 每股净资产(导出时计算)
total_shares/a_floats 总股本/流通股
turnover_rate 换手率

fundamentals/ - 财务数据(季频)

包含23个财务指标及其TTM版本,详见 PTRADE_PARQUET_FORMAT.md

配置说明

编辑 scripts/download_efficient.py:

# 日期范围
START_DATE = "2017-01-01"
END_DATE = None  # None = 当前日期

# 输出目录
OUTPUT_DIR = "data"

# 批次大小
BATCH_SIZE = 20

文档

文档 说明
PTRADE_PARQUET_FORMAT.md Parquet 数据格式规范
PTrade_API_mini_Reference.md PTrade API 参考

注意事项

数据源对比

特性 BaoStock Mootdx API TDX 官方数据包
速度 较慢 最快(一次性下载)
估值数据 有 (PE/PB/PS等)
财务数据 有(逐股查询) 有(批量ZIP,更快)
历史起始 2015年 2015年 完整历史
并发支持 不支持 支持 N/A

推荐:使用 scripts/download.py 统一命令,自动让 Mootdx 负责行情和财务,BaoStock 负责估值和状态,各取所长。

增量更新机制

  • 行情数据:检查是否有新交易日,无新数据时秒级跳过
  • 财务数据:基于远程文件 hash 增量检查,仅下载有变更的季度
  • 指数成分股:记录已下载月份,仅下载新月份
  • 中断恢复:财务数据进度与数据在同一事务中提交,中断后可续传

数据质量

  • 数据来自 BaoStock 免费数据源
  • 仅供学习研究使用

版本历史

v0.5.0 (2026-02-01) - 统一下载命令

  • 新增 scripts/download.py 统一下载入口
  • 自动编排 Mootdx 和 BaoStock 数据源,各取所长
  • 优化增量检测:无新交易日时秒级跳过全部股票
  • 财务数据增量:基于远程文件 hash 检测变更
  • 指数成分股增量:记录已下载月份避免重复
  • 修复 Mootdx Affair API 返回值处理
  • 修复 DuckDB changes() 函数兼容性
  • 自动过滤停牌股票的空行数据

v0.4.0 (2026-01-30) - DuckDB + Parquet 架构

  • 存储格式从 HDF5 迁移到 DuckDB + Parquet
  • 添加涨跌停价计算(导出时基于 preclose)
  • 添加 TTM 指标计算(导出时用 SQL window function)
  • 添加除权除息数据下载
  • 添加股本数据(total_shares/a_floats)
  • 优化增量更新逻辑
  • 清理废弃代码和文档

v0.3.0 (2025-11-24) - 质量与架构优化版

  • 实现市值字段计算
  • 修复 TTM 指标计算
  • 添加数据验证器
  • 提取 BaseFetcher 基类

v0.2.0 (2025-11-22) - 性能优化版

  • 实现统一数据获取,API 调用减少 33%
  • 优化 HDF5 写入逻辑

v0.1.0 (2024-11-14) - 初始版本

  • 基础数据下载功能
  • BaoStock 数据源集成

相关链接

许可证

本项目采用 AGPL-3.0 许可证。详见 LICENSE 文件。


项目状态: 生产就绪 | 当前版本: v0.5.0 | 最后更新: 2026-02-01

About

SimTradeData is a utility library supporting SimTradeLab and simtradeML with reliable, high-quality simulated trading data for model training, backtesting, and performance evaluation.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages