pytdxdata¶
通达信(TongDaXin)行情数据客户端:动态连接池 + 双层 TTL 缓存 + 3 连接并发分页。
纯 asyncio 实现,零运行时依赖(只用 stdlib);A股(沪/深/北) + 港股 + 美股 + 期货 + 期权,一套接口全市场。
import asyncio
from pytdxdata import TdxData
from pytdxdata.models import KlinePeriod
async def main():
async with TdxData() as td: # 自动探测服务器 + 建池 + 建缓存
bars = await td.get_bars("sh600000", KlinePeriod.DAY, count=2400)
print(bars[-1].datetime, bars[-1].close)
asyncio.run(main())
特性¶
| 特性 | 说明 |
|---|---|
| 🧩 动态连接池 | 启动时对服务器真实 K 线探测选优(剔除握手正常但返回空数据的坏节点);健康分(失败 ×0.5 / 成功 +0.2 / 冷却 120s)+ EWMA 延迟选路;按等待队列与空闲时长动态扩缩容;跨服务器故障转移 |
| 🗄️ 双层 TTL 缓存 | 内存 LRU + 磁盘 SQLite(WAL);TTL 分级:报价 5s / 分钟K线 60s / 日线当天 / 复权K线 1天 / 历史逐笔永久;single-flight 同键并发去重;缓存「已解析记录」,重复请求 0 网络 0 解析 |
| ⚡ 并发分页 | 把大请求拆成显式 start 偏移的页,多连接并行拉取、按序拼接、失败换连接重试 |
| 🔀 双通道整合 | 标准通道(经典行情)+ MAC 通道(逐笔 / 复权 / 1分钟K线),按命令自动选路 |
| 📄 服务器文件解析 | 板块 block_*.dat / 行业 tdxhy.cfg / 历史财报 gpcw* 下载即解析成 dataclass(纯 stdlib),无需自己拆二进制;文件名与索引不一致时自动纠正 |
| 🚀 批量下载 | get_bars / get_minutes 传标的列表即多股票并发,连接池自动分配到不同服务器 |
| 📦 零重型依赖 | 返回 list[dataclass],pandas / polars 由调用方按需转换 |
从这里开始¶
设计取舍¶
参照 easy-tdx 重新实现,解决其三大短板(无连接池、串行分页、单连接单锁)。 协议层独立实现——不依赖 easy-tdx 包,仅参照其字节级格式。
| 维度 | easy-tdx | pytdxdata |
|---|---|---|
| 并发分页 | ❌ 串行 while 循环 | ✅ 3 连接并行 |
| 连接池 | ❌ 单连接单锁 | ✅ 动态池 + 故障转移 |
| 缓存 | 仅证券列表(1天) | ✅ 双层 TTL + single-flight |
| 数据正确性 | 基准 | ✅ K线 6 字段 / 报价 7 字段逐字段一致(实测) |
| 2400 根日K耗时 | 0.31s | 0.16s(1.97x) |
| 缓存命中重取 | — | 0.016s(0 网络) |
| 依赖 | pandas 等 | 零运行时依赖 |
实测环境:Windows 11 / Python 3.13 / 同一批通达信服务器(2026-08)。
数据来源与限制¶
- 行情来自通达信公开行情服务器(无需账号),15 分钟延时;需实时数据请使用券商行情
- 服务器清单由
python -m pytdxdata.server_probe探测生成;运行时当日首次启动会自动在后台测速并缓存 (对调用方无感,当天不再重测),可用性随时间变化 - 港股 / 美股 / 期货 / 期权走通达信 EX 通道(端口 7727),部分市场(美股期权、港股期权)协议内无数据
完整清单见 常见问题。
免责声明
本包仅用于技术研究与教育目的。行情数据来自通达信公开接口,不保证实时性与准确性; 作者不对任何投资决策负责。使用前请遵守通达信服务条款及相关法律法规。