Skip to main content

tdxrs — 通达信行情数据解析库 (Rust + Python)

English | 中文

Rust Python License PyPI version PyPI downloads GitHub stars GitHub forks GitHub last commit

tdxrs 是通达信 (TDX) 行情数据解析库的 Rust 高性能实现。通过 PyO3/maturin 提供 Python 调用接口,保持与 Python tdxpy 的 API 兼容,本地解析性能提升 9-11 倍。

from tdxrs import TdxHqClient
from tdxrs.constants import MARKET_SH, KLINE_DAILY, FQ_QFQ

client = TdxHqClient()
client.connect_to_any()

# 贵州茅台日K → DataFrame
df = client.get_security_bars_dataframe(KLINE_DAILY, MARKET_SH, "600519", 0, 500)
df["ma20"] = df["close"].rolling(20).mean()

# 批量实时行情 (上限 60 只/次)
quotes = client.get_security_quotes([
    (MARKET_SH, "600519"), (0, "000858"), (0, "300750")
])

性能

本地文件解析

操作 tdxrs (Rust) tdxpy (Python) 加速比
日线 1000 条 0.3ms 2.8ms 9×
分钟线 1000 条 0.5ms 5.1ms 10×
板块 500 条 1.2ms 12.0ms 10×
财务 500 条 0.8ms 8.5ms 11×

网络 API (连接池模式)

操作 tdxrs tdxpy 加速比
K 线 100 条 73ms 110ms 1.5×
行情 3 只 75ms 95ms 1.3×
日K 800 条 290ms — —

并发性能 (60 线程)

方案 5 线程 60 线程 扩展比
裸连接 (Direct) 381ms 344ms 0.9× (零退化)
连接池 (Pool) 337ms 4110ms 12.2×
异步 (Async) 345ms 3880ms 11.2×

详见 性能基准。


功能

网络行情 (13 类数据)

数据 覆盖
K 线 个股 + 指数,12 种周期 (1分钟 ~ 年线)
实时行情 五档盘口,含成交额/总量
分时数据 当日 + 历史 (按日期查询)
逐笔成交 当日 + 历史 (按日期查询,自动翻页)
证券信息 全市场列表 + 数量 (带缓存)
财务数据 实时 34 项 + 45 个英文命名财务指标
除权除息 分红/送股/配股/缩股历史
板块数据 行业/概念/地域分类

基金数据 (ETF/LOF/REITs/分级基金)

TdxHqFundClient 提供基金专用 API,接口格式与股票一致:

from tdxrs import TdxHqFundClient
from tdxrs.constants import MARKET_SH, MARKET_SZ, KLINE_DAILY

client = TdxHqFundClient()
client.connect_to_any()

# 基金实时行情 (上限 60 只/次)
quotes = client.get_fund_quotes([
    (MARKET_SH, "510300"),   # 沪深300ETF
    (MARKET_SZ, "159915"),   # 创业板ETF
])

# 基金 K 线 (接口与股票相同)
bars = client.get_fund_bars(KLINE_DAILY, MARKET_SH, "510300", 0, 100)

# 基金列表
funds = client.get_fund_list(MARKET_SH)  # 返回 code, name, fund_type
类型 代码前缀 示例
ETF 510/512/513/515/516, 159 510300 沪深300ETF
LOF 501/502, 160/161 160105 南方积配
REITs 508 508000 普洛斯
分级基金 162/163/164 162006 银华锐进
债券基金 511 511010 国债ETF
场外基金 519 519003 海富通收益

详细说明见 基金模块文档。

客户端侧复权计算

TDX 服务端返回未复权原始数据。tdxrs 在客户端自行计算前复权/后复权:

  • 中国 A 股标准除权除息公式
  • 支持分红+送股+配股联动
  • 自动补全早期除权事件 (context_bars 机制)
  • fq=0 路径零额外开销

四种客户端方案

客户端 策略 场景
TdxHqClient 连接池(5) + 心跳 + 重试 + 缓存 主力,顺序请求
TdxHqFundClient 共享连接池 + 基金代码验证 基金数据
TdxDirectClient 每请求独立 TCP 高并发 (60线程零退化)
AsyncTdxHqClient tokio 异步 + 心跳 异步生态集成

请求限流

内置交易时段自适应限流,保护服务器:

时段 默认限流 说明
盘中 (9:30-15:00) 15 req/s 交易活跃期
盘前/盘后 30 req/s 过渡时段
休市 60 req/s 非交易日
client = TdxHqClient()
client.connect_to_any()
client.auto_detect_phase()  # 自动检测当前时段
# 或手动设置
client.set_phase("trading")  # trading / prepost / closed

每连接独立限流,4 连接池实际吞吐 ×4。批量行情单次上限 60 只,超出自动截断。

本地文件解析

格式 Reader 输出
.day 日线 DailyBarReader dict / tuple / DataFrame
.lc5 .lc1 分钟线 MinBarReader LcMinBarReader 同上
.dat 板块 BlockReader flat / group 两种模式
gpcw*.dat 财务 FinancialReader f32 字段数组

批量下载 (tdxrs.downloader)

多服务器分发 + 自动翻页 + 增量更新 + 断点续传:

from tdxrs.downloader import Downloader

# 日线下载 (默认 .day 格式,原始数据 fq=0)
dl = Downloader(data_dir="./data")
dl.run(markets=["sh", "sz"], categories=["daily"])
dl.update()  # 增量更新 (仅 fq=0 支持)

# 按日下载分时/逐笔数据 (需指定股票代码)
dl.download_minute(dates=["2026-06-25"], codes=["600519", "000858"])
dl.download_ticks(dates=["2026-06-25"], codes=["600519"])

CLI 命令行

无需编写代码,直接在终端查询行情:

tdxrs quote 600519,000858          # 实时行情
tdxrs bars 600519 --count 30 --fq 1  # K线 (前复权)
tdxrs trades 600519 --count 100      # 逐笔成交
tdxrs download --market sh --category daily  # 批量下载
tdxrs servers                        # 测试服务器

完整文档见 CLI 使用指南。


安装

pip install tdxrs

或从源码构建:

git clone https://github.com/jiangtaovan/tdxrs && cd tdxrs
pip install maturin
maturin develop --release

Windows x86_64-pc-windows-gnu 需额外安装 MSYS2 dlltool。详见 安装说明。


快速示例

K 线 — 完整复权演示

from tdxrs import TdxHqClient
from tdxrs.constants import MARKET_SH, KLINE_DAILY, KLINE_WEEKLY, FQ_QFQ, FQ_HFQ, FQ_NONE

client = TdxHqClient()
client.connect_to_any()

# 前复权 (默认)
bars = client.get_security_bars(KLINE_DAILY, MARKET_SH, "600519", 0, 100)

# 未复权原始数据
raw = client.get_security_bars(KLINE_DAILY, MARKET_SH, "600519", 0, 100, fq=FQ_NONE)

# 后复权
hfq = client.get_security_bars(KLINE_DAILY, MARKET_SH, "600519", 0, 100, fq=FQ_HFQ)

# 周K + 自动分页 (3000条)
all_bars = client.get_security_bars_all(KLINE_WEEKLY, MARKET_SH, "600519", count=3000)

# Tuple 高性能模式 (快 40-60%)
tuples = client.get_security_bars_tuples(KLINE_DAILY, MARKET_SH, "600519", 0, 500)
# → (open, close, high, low, vol, amount, year, month, day, hour, minute, datetime)

client.disconnect()

多股票批量财务

# 实时财务 (TDX 原始值, 不自动转换单位)
info = client.get_finance_info(market=1, code="600519")
# 经验规则: 股本类 ≈万元, 资产类 ≈万元, 每股指标 ≈元
print(f"净资产: {info['jingzichan']:.0f}")   # e.g. 270894048 → 2709亿元
print(f"每股净资产: {info['meigujingzichan']:.2f}")  # 216.32元

# 多股票对比 DataFrame
df = client.get_finance_info_dataframe([
    (MARKET_SH, "600519"), (MARKET_SZ, "000858"), (MARKET_SZ, "300750")
])
print(df[["code", "jingzichan", "jinglirun", "meigujingzichan"]])

本地文件解析

from tdxrs import DailyBarReader

reader = DailyBarReader(coefficient=0.01)
df = reader.to_dataframe(open("600519.day", "rb").read())
# df.columns: date, open, high, low, close, amount, volume, year, month, day

工程亮点

语言:    Rust 2021 edition, 0 行 unsafe
测试:    139 个单元/集成测试
依赖:    6 个核心 crate (pyo3, flate2, tokio, serde, thiserror, encoding_rs)
文档:    12 篇维护文档 (6 public + 6 internal)

架构

flowchart TD
    U["👤 用户代码"] --> API["Python API — 5 客户端 + 4 Reader"]
    API --> B["PyO3 绑定层"]
    B --> NET["Net 网络层 — 连接池 / 独立连接 / 异步"]
    B --> RDR["Reader 解析层 — 日线 / 分钟线 / 板块 / 财务"]
    B --> FUND["Fund 基金层 — ETF / LOF / REITs / 分级"]
    NET --> P["Protocol 协议层 — 11 解析器 + 复权算法"]
    RDR --> P
    FUND --> NET
    P --> OUT1["dict / tuple / DataFrame"]

    S1[("TDX 服务器 — TCP / zlib")] -.-> NET
    S2[("本地文件 — .day / .lc5 / .dat")] -.-> RDR

    classDef user fill:#E3F2FD,stroke:#1565C0,color:#333
    classDef api fill:#3776AB,stroke:#2D5F8A,color:#fff
    classDef bind fill:#6C757D,stroke:#495057,color:#fff
    classDef core fill:#FF6B35,stroke:#CC5529,color:#fff
    classDef out fill:#E8F5E9,stroke:#2E7D32,color:#333
    classDef src fill:#FFF8E1,stroke:#F9A825,color:#333

    class U user
    class API api
    class B bind
    class NET,RDR,P,FUND core
    class OUT1 out
    class S1,S2 src

客户端:TdxHqClient(连接池 + 心跳 + 重试)、TdxHqFundClient(基金专用)、TdxDirectClient(独立连接,高并发)、AsyncTdxHqClient(tokio 异步)

Reader:DailyBarReader(.day 日线)、MinBarReader / LcMinBarReader(.lc5 分钟线)、BlockReader(.dat 板块)、FinancialReader(gpcw 财务)

输出格式:list[dict](调试)、list[tuple](遍历,快 40-60%)、DataFrame(分析回测)

📖 详细架构说明见 ARCHITECTURE.md


文档

文档 说明
API 参考 完整 Python API + 最佳实践
架构说明 模块设计、数据流、客户端策略
性能基准 顺序/并发性能 + 场景选择指南
CLI 指南 命令行工具使用说明
基金模块 基金数据 (ETF/LOF/REITs/分级基金)
复权算法 公式推导、版本迭代、验证方法
变更日志 版本历史
贡献指南 参与开发 + 可贡献方向
安装说明 环境配置 + FAQ

要求

  • Rust 1.83+ | Python 3.11+ | maturin 1.5+
  • pandas (可选, DataFrame 输出)

免责声明

  • 本项目仅供学习和研究用途,不构成任何投资建议
  • 本项目不保证数据的准确性、完整性和时效性
  • 通达信行情数据的版权归相关数据提供商所有
  • 用户使用本项目获取的数据用于商业用途时,需自行解决数据授权合规问题
  • 本项目按 MIT License 发布,作者不对因使用本项目产生的任何损失承担责任

许可证

MIT License — 详见 LICENSE


Star History

Star History Chart

Metadata

Release files for tdxrs 0.6.10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tdxrs 0.6.10
File Size Uploaded Provenance Actions
tdxrs-0.6.10.tar.gz 163.8 kB Without provenance Details for tdxrs-0.6.10.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for tdxrs 0.6.10
File Actions
tdxrs-0.6.10-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for tdxrs-0.6.10-cp311-cp311-win_amd64.whl
tdxrs-0.6.10-cp311-cp311-manylinux_2_34_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.34+ x86-64 Details for tdxrs-0.6.10-cp311-cp311-manylinux_2_34_x86_64.whl
tdxrs-0.6.10-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for tdxrs-0.6.10-cp311-cp311-macosx_11_0_arm64.whl
tdxrs-0.6.10-cp311-cp311-macosx_10_12_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.12+ x86-64 Details for tdxrs-0.6.10-cp311-cp311-macosx_10_12_x86_64.whl

Total release size: 4.4 MB

Release files / tdxrs-0.6.10.tar.gz

Download URL tdxrs-0.6.10.tar.gz
Size 163.8 kB
Tags Source
SHA-256 checksum
How to use checksums
61f1e55ba5cc69e2cbb06c701eb0f88208c75d5afa164ff9ae58a725800f89e5
BLAKE2b-256 checksum
How to use checksums
c488473cfd3e5a1695db4b1ba3b67ec02062a6d47b19352391eb57cdafdc8f70
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.18

Release files / tdxrs-0.6.10-cp311-cp311-win_amd64.whl

Download URL tdxrs-0.6.10-cp311-cp311-win_amd64.whl
Size 1.0 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
5a0acae90823e5c94a6b563ef736a05a14d98d9f76cb50ac7604b22a64568eba
BLAKE2b-256 checksum
How to use checksums
f4ed58b270e88b6c90a9ff62089b2bef06ad741b930fadd4c9dbeabc2564648a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.9

Release files / tdxrs-0.6.10-cp311-cp311-manylinux_2_34_x86_64.whl

Download URL tdxrs-0.6.10-cp311-cp311-manylinux_2_34_x86_64.whl
Size 1.1 MB
Tags CPython 3.11 Linux glibc 2.34+ x86-64
SHA-256 checksum
How to use checksums
193d399ffac950fb0ddc627ff84408b04fbaa80ee1f0b49931f92168e75f5fc2
BLAKE2b-256 checksum
How to use checksums
8d397e7a6592914ff2dbd10cc38f9aebf06caf2d0aea58a285cc359c03d686ef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.18

Release files / tdxrs-0.6.10-cp311-cp311-macosx_11_0_arm64.whl

Download URL tdxrs-0.6.10-cp311-cp311-macosx_11_0_arm64.whl
Size 1.0 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
e081c0e25cec87c3f702bc7625a92c99a71347d0cda39a5fbe22d83519e060aa
BLAKE2b-256 checksum
How to use checksums
6e1467fa0224cff2d35765d5ce054839f24b1269deede0057463dc59155001c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.9

Release files / tdxrs-0.6.10-cp311-cp311-macosx_10_12_x86_64.whl

Download URL tdxrs-0.6.10-cp311-cp311-macosx_10_12_x86_64.whl
Size 1.1 MB
Tags CPython 3.11 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
9c016d0273b2da690f6e4f538e7f4d9d7bf739d335d5e84ab268ad07b04e16ea
BLAKE2b-256 checksum
How to use checksums
4ef3e3e8dd48e1ea670d821f81b146bf8814a0c7e9823e994ae48840d8ff9706
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.9

Security for tdxrs 0.6.10

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page