公司动态

不用装通达信软件:Python 通达信数据读取库 mootdx 零基础实战指南

📅 2026/8/18 11:41:07
不用装通达信软件:Python 通达信数据读取库 mootdx 零基础实战指南
不用装通达信软件Python 通达信数据读取库 mootdx 零基础实战指南【免费下载链接】mootdx通达信数据读取的一个简便使用封装项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx凌晨两点你盯着屏幕上那个爬虫脚本第五次报 403数据接口又换域名了。免费数据源的免费往往只是免费的代价延迟、限流、半夜维护、格式三天两头变。而付费接口一年几万块对只想写个回测的学生党来说实在下不去手。你是不是也在想——A股行情数据到底有没有一条稳定、免费、拿起来就能用的路答案可能藏在一个叫mootdx的开源项目里它是专门给 Python 开发者用的通达信数据读取封装库无论你是量化新手、数据分析师还是想给股票写监控小工具的人都能用它快速拿到沪深 A 股的真实数据。接下来我带你完整走一遍从安装到回测数据就绪的全过程。第一幕·初见一段关于数据从哪来的对话想象一下这个场景你刚入职一家小私募做量化实习leader 丢过来一句话把平安银行的日线数据整理一份今天要。你懵了。打开东财网页版手动导出一天的数据也就罢了两百个交易日的数据点到手抽筋。写爬虫抓网页大概率被反爬拦住。你试探着问同事你数据一般从哪儿拿同事通达信客户端啊数据都在本地。你可我电脑里没装通达信也不想装太重了。同事那就用 mootdx它专门干这个——不用装软件直接读数据还能连线上行情服务器。就这样mootdx 走进了你的世界。它是通达信数据读取接口的简便封装把底层复杂的 TCP 协议、二进制文件解析全部藏起来对外只暴露几个 Python 方法。它适合谁所有想要 A 股数据但不想跟数据源本身缠斗的人写回测的、画 K 线图的、做价格提醒的、甚至只是好奇某只股票历史走势的。它给你两把钥匙线上行情通过 mootdx/quotes.py 连行情服务器实时报价、K 线、分时、指数一应俱全离线读取通过 mootdx/reader.py 解析你已有的通达信数据目录历史数据秒级读入。第二幕·最小闭环先看结果再讲代码我讨厌那种先铺垫十页概念再动手的教程。所以我们倒着来先把最终效果贴出来再解释它是怎么跑起来的。在终端里敲下这段代码from mootdx.quotes import Quotes client Quotes.factory(marketstd) df client.quotes(symbol[000001, 600300]) df[涨跌幅] (df[price] - df[last_close]) / df[last_close] * 100 print(df[[code, price, 涨跌幅, volume]])运行后你会看到类似这样的输出code price 涨跌幅 volume 0 000001 11.23 1.35 452100 1 600300 6.98 -0.43 189200两条真实股票数据前后不到两秒钟。如果你之前用爬虫抓过行情应该能感受到这种不用处理反爬、不用清洗脏数据的爽快。现在回头解释三个关键点Quotes.factory(marketstd)是统一入口。std表示标准市场股票换成ext就是扩展市场期货、黄金等。工厂方法会自动挑选可用服务器并建立连接你不用关心服务器 IP 和端口。client.quotes(symbol[...])支持一次查多只。传列表就返回多只股票的 DataFrame字段包括price现价、last_close昨收、open、high、low、volume等。注意涨跌幅库不直接给一行 pandas 就自己算出来了。返回值是 pandas DataFrame。这意味着拿到手就能直接接进你的分析流程不用再做任何格式转换。第三幕·由简入繁一个需求的三次进化很多教程喜欢并列讲五六个场景看的时候很热闹关掉页面全忘了。我更愿意用同一条需求不断升级的方式带你感受真实项目里数据获取这件事是怎么长出来的。升级 1从一条K线到一段历史场景回到实习生小王。他刚拿到平安银行000001的实时价格觉得不够leader 要的是历史日 K 线。from mootdx.quotes import Quotes client Quotes.factory(marketstd) bars client.bars(symbol000001, frequency9, offset250) print(bars[[open, high, low, close, volume]].head())这里frequency9表示日 K 线0-5 分钟线、1-15 分钟、2-30 分钟、3-小时、4/9-日线、5-周线、6-月线、7/8-1 分钟、10-季线、11-年线具体见 docs/api/quote1.mdoffset250是往回取 250 条约等于一年的交易日。你还会发现一个贴心细节返回的 DataFrame 里如果有datetime列mootdx 会自动把它设为索引vol会被转成更常用的volume列——这些都在 mootdx/utils/init.py 的to_data里处理好了。升级 2从一只股票到一个自选股池单个接口会调了小王立刻想到我有 30 只自选股难道要循环 30 次不用批量接口就是干这个的。from mootdx.quotes import Quotes watch_list [000001, 000002, 600036, 600519] client Quotes.factory(marketstd) # 实时行情批量查 snapshot client.quotes(symbolwatch_list) # 再给每只股票拉日K顺便做前复权 for code in watch_list: bars client.bars(symbolcode, frequency9, offset120, adjustqfq) print(f{code}: {len(bars)} 条, 最新收盘 {bars[close].iloc[-1]})注意adjustqfq这个参数股票分红送转后价格会跳空直接拿原始数据算指标会失真。前复权qfq把历史价格调整到当前口径后复权hfq则反过来。bars接口原生支持一行搞定。这也是很多人从别家数据源切到 mootdx 的原因之一——复权不用自己算了。升级 3从裸调用到带异常处理和缓存批量跑起来之后小王在深夜的回测里遭遇了第一个真实打击连接超时、某只股票数据为空。裸调用在真实项目里活不过三天。于是代码长出了铠甲import time import logging from mootdx.quotes import Quotes logging.basicConfig(levellogging.INFO) def fetch_bars_with_retry(code, max_retries3): client Quotes.factory(marketstd, heartbeatTrue, timeout15) for attempt in range(max_retries): try: df client.bars(symbolcode, frequency9, offset120, adjustqfq) if df is None or df.empty: raise ValueError(f{code} 返回空数据) return df except Exception as e: logging.warning(f{code} 第 {attempt 1} 次尝试失败: {e}) if attempt max_retries - 1: time.sleep(2 ** attempt) # 指数退避1秒、2秒、4秒 logging.error(f{code} 重试 {max_retries} 次仍失败跳过) return None几个容易忽略但很关键的细节heartbeatTrue保持长连接。行情服务器会断开空闲连接心跳包让连接长期存活重连次数能少一个数量级timeout15避免无限挂起。网络抖动时宁可快速失败重试也不要傻等空数据要当异常处理。很多坑不是报错而是静默返回空所以代码里显式判了df.empty。隐藏分支数据源切换代码一行不改需求继续进化。小王发现有些历史数据比如五年前某天的分笔成交线上接口取不全但自己在通达信客户端里明明看到过。leader 告诉他那数据在本地用离线接口读。from mootdx.reader import Reader # tdxdir 指向通达信数据目录比如你装有通达信的电脑上的 vipdoc 所在目录 reader Reader.factory(marketstd, tdxdirC:/new_tdx) daily reader.daily(symbol600036) # 本地日线 minute reader.minute(symbol600036) # 本地分钟线 fzline reader.fzline(symbol600036) # 本地时间线看明白了吗线上和离线的调用结构完全对称一个用Quotes.factory一个用Reader.factory后面都是daily、minute这类方法。你可以先写一套分析代码数据源随时切换——线上拿实时离线做回测互不干扰。这层设计在 mootdx/reader.py 和 docs/api/reader.md 里有完整说明。如果连没有本地数据文件都满足不了你还有第三条路直接下载财务数据。from mootdx.affair import Affair # 列出远程财务数据文件 files Affair.files() print([f[filename] for f in files][:5]) # 下载单个季度财报 Affair.fetch(downdirtmp, filenamegpcw19960630.zip)第四幕·答疑新手最容易踩的五个坑对话式解答附报错信息 原因 修复比泛泛而谈实用得多。坑 1ImportError: cannot import name Quotes原因环境里装的是旧版本或者根本没装成。修复升级并安装完整依赖pip install -U mootdx[all]不清楚依赖关系时[all]是最省心的选择它同时覆盖命令行工具和核心库。坑 2连上服务器但返回空 DataFrame原因最常见的是股票代码没带市场前缀或传了非法代码。比如quotes(symbol000001)本身没问题但你把一个不存在的代码混进列表整批可能返回空。修复传合法代码且尽量用列表批量查询对返回结果做判空df client.quotes(symbol[000001, 600300]) if df is None or df.empty: print(数据为空检查代码是否正确)坑 3frequency9到底是什么总是记不住原因数字编码确实反直觉9 是日线、4 也是日线一个是新格式一个是旧格式。修复别背直接查 docs/api/quote1.md 里的对照表。常用就三个9日线、5周线、6月线分钟线用0/1/2/7/8。坑 4历史数据算出来的指标有断崖像是脏数据原因没复权。分红除权那天价格会凭空下跌指标全被带偏。修复取数时加adjustqfq前复权或adjusthfq后复权一行解决。坑 5程序跑一会儿就断连报 connection error原因行情服务器空闲超时会踢人长任务跑着跑着就断了。修复初始化时打开心跳和重连client Quotes.factory(marketstd, multithreadTrue, heartbeatTrue, bestipTrue, timeout15)bestipTrue会在启动时自动测速选最快的服务器multithreadTrue适合多线程并发取数。尾声现在就去拿你的第一份数据到这里你已经拥有了一个数据随手可取的 Python 工具实时行情、历史 K 线、复权处理、异常重试、线上离线双通道全部在一个库内闭环。别再对着限流报错发呆了——打开终端装上mootdx把上面最小闭环那段代码跑起来你的第一份真实 A 股数据已经在路上。本项目仅作学习交流使用请遵守相关法律法规合理使用市场数据。【免费下载链接】mootdx通达信数据读取的一个简便使用封装项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考