mootdx 实战:3 行代码拉取通达信 K 线与财务数据
【免费下载链接】mootdx通达信数据读取的一个简便使用封装项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx
用 Python 拿 A 股数据,要么自己啃通达信私有协议,要么在几个单点工具里拼凑。mootdx 是一个通达信数据读取的 Python 封装:在线行情、离线 K 线、财务报表三类数据一次打包,返回的都是 pandas DataFrame,拉完就能直接进分析管线。
为什么值得选 mootdx
通达信是国内券商软件的通行数据源,数据权威且实时,但原生接口对 Python 开发者并不友好:连接握手、二进制解析、服务器分片,哪一环都会踩坑。mootdx 基于 tdxpy 把这些底层细节全部收走,你只需要传股票代码和参数。相比直接调 pytdx 的裸 API,它最省心的地方是体验一致性:工厂方法统一入口、内置服务器探测列表、空结果自动重试,不用每次重新踩同样的坑。
| 对比维度 | pytdx 裸 API | mootdx |
|---|---|---|
| 服务器选择 | 自己找 IP 和端口 | bestip=True并发测速自动选最快 |
| 离线数据 | 手动拼 vipdoc 文件路径 | 按代码自动定位 sh/sz 目录 |
| 财务报表 | 无现成接口 | 列表、下载、解析一条龙 |
| 返回格式 | 原始元组列表 | pandas DataFrame |
| 断线处理 | 手动重连 | 内置重试 + 心跳保活 |
架构速览:一类数据源一个入口
代码按数据源划分:mootdx/quotes.py 负责在线行情(K 线、指数、分钟线),mootdx/reader.py 读取本机通达信安装目录下的离线文件,mootdx/affair.py 管财务数据的下载与解析;服务器探测和测速逻辑集中在 mootdx/server.py,底层还有一批 utils 提供缓存、频率换算等公共能力。整体分层很薄,读源码没有负担。
- 工厂方法统一入口:
Quotes.factory(market='std')一行拿到客户端,std(股票)/ext(扩展市场)自动切换底层实现。 - 最快服务器自动探测:
bestip=True会并发 ping 内置服务器列表,结果写入本地配置,免去手动试 IP。 - 空结果自动重试:基于 tenacity 检测返回的 DataFrame 是否为空,自动重连再试,省去手写重试循环。
- pandas 原生输出:所有接口的返回都是 DataFrame,无需手动拆包。
核心能力拆解:线上、离线、财务三件套
拉在线 K 线:给个代码就能跑
最常用的入口是bars,frequency控制周期(9 是日 K,8 是 1 分钟,0 是 5 分钟),offset控制条数。客户端参数里multithread开启多线程批量请求,heartbeat保持长连接不被掐断:
from mootdx.quotes import Quotes # 多线程请求 + 心跳保活 client = Quotes.factory(market='std', multithread=True, heartbeat=True) # 拉取 600036 最近 100 根日 K 线 df = client.bars(symbol='600036', frequency=9, offset=100) print(df[['open', 'high', 'low', 'close', 'vol']].tail())读本地历史:vipdoc 目录就是数据仓库
如果你已经装了通达信客户端,历史数据其实早就躺在安装目录的vipdoc文件夹里,Reader 会按代码和市场自动拼出文件路径,不用关心sz000001.day这类命名规则:
from mootdx.reader import Reader # tdxdir 指向你的通达信安装目录 reader = Reader.factory(market='std', tdxdir='C:/new_tdx') daily = reader.daily(symbol='600036') # 日 K 线 minute = reader.minute(symbol='600036') # 分钟线 fzline = reader.fzline(symbol='600036') # 5 分钟线拿财务报表:列目录、下载、解析三步
财务数据以 zip 压缩包形式挂在远程服务器上,files()先看目录,fetch()下载,parse()直接解析成表:
from mootdx.affair import Affair files = Affair.files() # 查看可下载的报表文件列表 Affair.fetch(downdir='tmp', filename='gpcw20231231.zip') # 下载单个报表 df = Affair.parse(downdir='tmp', filename='gpcw20231231.zip') # 解析为 DataFrame print(len(df), '条记录')一个场景跑通:给日线策略备数据
如果你要搭一条"拉数据 → 算指标 → 落盘"的小流程来验证回测管线,线上 K 线加移动平均就够了。下面这段代码完整走完这个链路:
from mootdx.quotes import Quotes client = Quotes.factory(market='std', multithread=True, heartbeat=True) code = '600036' # 拉最近 800 根日 K(单次请求上限约 800 条,历史更长可用 start 分页) df = client.bars(symbol=code, frequency=9, offset=800).reset_index() # 常用技术指标 df['MA5'] = df['close'].rolling(5).mean() df['MA20'] = df['close'].rolling(20).mean() df['ret'] = df['close'].pct_change() # 落盘成 CSV,编码用 utf-8-sig 方便 Excel 打开 df.to_csv(f'{code}_daily.csv', index=False, encoding='utf-8-sig') print(df[['datetime', 'close', 'MA5', 'MA20', 'ret']].tail())预期输出:当前目录下生成一份{code}_daily.csv,包含日期、开高低收、成交量额和新增的 MA5 / MA20 / ret 三列;控制台打印最后 5 个交易日的收盘价与指标值,ret列首行为空(pct_change 的正常行为)。整段代码不依赖本地安装的通达信,有网就能跑。
调优、生态与延伸
稳定性三条经验
💡 第一次跑先加bestip=True测速,把最快服务器固化进本地配置;长驻进程务必开heartbeat=True,断线后库检测到空结果会自动重连;拉长历史时用start/offset分批,源码里get_k_data就是按 800 条一批切的。
与 pandas 和缓存的配合
所有接口返回 DataFrame,可以直接to_csv/to_excel,CLI 的-o参数也支持 CSV、HDF5、Excel 输出。反复拉同一批代码时,用 mootdx/utils/pandas_cache.py 里的pd_cache装饰器把结果存成本地 pkl 并设置过期时间,能省掉大量重复请求;手里有通达信导出的 txt 文件,mootdx/tools/tdx2csv.py 可以批量转成标准 CSV。
进一步学习
- docs/quick.md:快速上手,三大接口加 CLI 用法十分钟能过完;
- tests/:真实调用示例与断言,适合对照验证接口行为;
- docs/api/:行情、离线、财务接口的完整参数文档。
如果你做量化策略或金融数据分析,数据源正好落在通达信上,mootdx 能帮你把协议层的麻烦一次性省掉。建议先跑通上面bars的示例拿到第一份 DataFrame,再用bestip测一次服务器速度,然后决定要不要把它接进你的数据管线。
【免费下载链接】mootdx通达信数据读取的一个简便使用封装项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考