当前位置: 首页 > news >正文

mootdx 使用手记:把通达信数据变成几行 Python 代码

mootdx 使用手记:把通达信数据变成几行 Python 代码

【免费下载链接】mootdx通达信数据读取的一个简便使用封装项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx

如果你做过 A 股量化或数据分析,大概率绕不开一个尴尬的处境:行情软件里的数据很好用,但想用 Python 拿数据,要么依赖第三方接口(限频、要钱、不稳定),要么自己逆向通达信的二进制协议(工作量堪比考古)。mootdx 正是冲着这个痛点来的——它把通达信的线上行情接口和本地vipdoc数据文件都封装成了简洁的 Python API,让你用几行代码就能拿到 K 线、分时、财务和除权信息。这篇文章面向刚开始接触它的人,讲清楚它最值得掌握的几条用法,以及我在实践中踩过的坑。

先建立心智模型:mootdx 有两条数据通道

很多人第一次用 mootdx 会困惑:QuotesReader到底有什么区别?其实它们的分工非常清晰:

  • Quotes走的是网络通道,实时向通达信行情服务器发起请求,适合拿"当下的"行情,比如最新价、当日分时、最近 N 根 K 线。代价是依赖服务器稳定性和网络。
  • Reader走的是本地通道,直接解析你电脑上通达信客户端下载好的vipdoc目录,适合拿"历史的"全量数据,速度快、不占网络。代价是本地文件需要自己维护更新。

把这两条通道想成"水龙头"和"水库":Quotes 是拧开就能出水的龙头,Reader 是存好水的水库。搞清楚这个前提,后面所有示例都能对号入座。

十分钟跑通第一个脚本

先装包。如果搞不清依赖关系,直接装全量版本即可:

pip install -U 'mootdx[all]'

安装完成后,用一行代码验证环境:

from mootdx.quotes import Quotes client = Quotes.factory(market='std') print(client.bars(symbol='600036', frequency=9, offset=5))

能打印出一张带datetime、open、close、high、low、vol等列的 DataFrame,就说明通道已经打通。从此刻起,你的 Python 环境和通达信行情之间只隔着一个对象。

用 Quotes 拿线上行情:K 线、指数、分时与分笔

Quotes.factory(market='std')返回的是股票市场客户端,market='ext'则对应期货、期权等扩展市场。日常最常用的几个方法:

from mootdx.quotes import Quotes client = Quotes.factory(market='std', multithread=True, heartbeat=True) # 日 K 线,frequency=9 表示日线,一次最多拉 800 根 daily = client.bars(symbol='600036', frequency=9, offset=800) # 指数行情 index_df = client.index(symbol='000001', frequency=9) # 当日分时数据 minute_df = client.minute(symbol='000001') # 历史某一天的分时 hist_minute = client.minutes(symbol='000001', date='20240115') # 分笔成交 tick_df = client.transaction(symbol='000001', offset=100)

几个值得记住的细节:

  • frequency用数字表示周期:0是 5 分钟、4是日线、9也是日线、7/8是 1 分钟。记不住没关系,get_frequency也接受'day''1min'这类可读写法。
  • bars单次最多 800 根,想要更长历史,用start参数分页往前翻。
  • 返回结果统一是 pandas DataFrame,拿到手就能直接做计算,不需要自己处理字节流。

要批量轮询多只股票时,可以自己写一个简单循环,把结果收进字典:

from mootdx.quotes import Quotes client = Quotes.factory(market='std') pool = {} for code in ['000001', '600000', '000858']: pool[code] = client.quotes(symbol=code)

用 Reader 啃本地数据:日线、分钟线与板块

如果你的研究需要几年的完整日线,逐根从网络拉既慢又容易被服务器限流。更聪明的做法是让通达信客户端先下载数据,然后用Reader直接解析本地文件。

本地数据的默认目录结构是vipdoc/sz/lday/sz000001.day这类,Reader会自动帮你把股票代码映射到正确的市场路径:

from mootdx.reader import Reader reader = Reader.factory(market='std', tdxdir='C:/new_tdx') # 日线 df_daily = reader.daily(symbol='600036') # 1 分钟线(suffix=1),5 分钟线传 5 df_min1 = reader.minute(symbol='600036', suffix=1) # 分时走势线(fzline) df_fz = reader.fzline(symbol='600036')

需要注意两点。第一,tdxdir必须指向真实的通达信安装目录,否则构造会直接抛异常——它是校验入口,不是可选参数。第二,代码里的市场前缀(sh/sz)可带可不带,Reader会智能补全;但如果股票代码以88开头(板块指数),它会被特殊路由到sh目录,这是通达信自己的目录约定。

想批量读取一批股票做本地回测,把上面的调用包一层循环即可,配合find_path还能先探测文件是否存在,避免读到不存在的代码时抛错。

财务数据与除权除息:做基本面研究的两块拼图

财报数据的拉取

mootdx.affair.Affair负责财务数据的下载与解析。整个流程分两步:先看远端有哪些历史财报文件,再按需下载解析:

from mootdx.affair import Affair # 查看可用的财报文件列表(含文件名、哈希、大小) files = Affair.files() # 下载并解析指定文件 df = Affair.parse(downdir='tmp', filename='gpcw20231231.zip') # 只想下载不想解析,用 fetch Affair.fetch(downdir='tmp', filename='gpcw20231231.zip')

files()返回的哈希值很有用:它可以作为本地文件是否过期的判断依据。自己维护增量同步时,比对哈希比比对文件名可靠得多。

除权除息与复权

历史行情最隐蔽的坑是"没复权"。遇到分红送转,股价会跳空,直接用原始数据算收益率会得到离谱结果。mootdx 提供了两条解决路径:

  • Quotesxdxr(symbol=...)拉取除权除息明细,拿到送转、分红记录;
  • mootdx.utils.adjust里的复权工具,把原始行情按前复权/后复权换算。

社区里常见的做法是:原始数据 + 除权明细 → 计算复权因子 → 生成复权后的 K 线。具体接口的入参格式可以查阅 docs/api/quote2.md 和 docs/api/reader.md,里面给了字段级说明。

让程序更稳更快:服务器、心跳与缓存

自动挑一台好服务器

通达信有大量行情服务器,速度天差地别。mootdx 内置了测速逻辑,启动时传入bestip=True会自动挑选延迟最低的节点:

from mootdx.quotes import Quotes client = Quotes.factory(market='std', bestip=True, timeout=10)

也可以在命令行单独跑测速,把结果存进配置,之后所有客户端共享这份"最优服务器"清单:

python -m mootdx bestip -vv

心跳与自动重连

长连接挂在后台跑定时任务时,服务器可能静默断开。开启heartbeat=True让客户端定期发送心跳包维持连接;万一断线,reconnect()方法会按保存的服务器地址重连。代码里把这些组合起来,就是一套简单的容错机制。

给高频读取加缓存

本地Reader解析文件本身很快,但如果你在循环里反复读同一只股票,仍然建议加一层缓存。mootdx 的工具模块里有一个pd_cache装饰器,专门缓存 DataFrame 结果,还支持过期时间:

from mootdx.utils.pandas_cache import pd_cache @pd_cache(cache_dir='./cache', expired=600) def load_daily(code): reader = Reader.factory(market='std', tdxdir='C:/new_tdx') return reader.daily(symbol=code)

十分钟内的重复读取会直接命中磁盘缓存,不再触碰文件。对回测里反复加载全市场数据这种场景,收益非常明显。

命令行:不写代码也能导出数据

mootdx 不只是库,还带了命令行工具。不想打开编辑器时,直接导出数据:

# 导出个股日线到 CSV python -m mootdx quotes 600036 --action=bars --output=out.csv # 读取本地文件导出 python -m mootdx reader 600036 --action=daily --tdxdir=C:/new_tdx --output=out.csv

具体子命令的完整参数可以用python -m mootdx --help查看。另外mootdx/tools/tdx2csv.py提供了批量把通达信数据转成 CSV 的函数,适合一次性迁移整个本地数据目录。这些细节都记录在 docs/cli/quotes.md 中。

容易被绊倒的四个地方

结合社区反馈和我的实际使用,有四个问题出现频率最高:

  1. 扩展市场接口当前不可用market='ext'的行情接口在代码里已明确标注"已经失效",做期货、外盘数据时不要指望它,优先考虑本地Reader的扩展市场解析(market='ext'Reader仍可读取ds目录)。
  2. tdxdir路径必须真实存在Reader构造时会校验目录,报错信息是tdxdir 目录不存在。先把通达信客户端装好、数据下载到本地,再传路径。
  3. Mac M1 上的 PyMiniRacer 兼容问题。如果你在 Apple Silicon 上安装失败,通常是py_mini_racer这个依赖的问题,可参考 docs/faq/py_mini_racer.md 的说明处理。
  4. 一次拉不全的历史数据bars单次上限 800 根,拉多年日线或高频数据时要记得分页累加,不要想当然地传一个超大offset

下一步:从"能跑"到"能算"

到此为止,你已经掌握了一条完整的数据流水线:线上行情用Quotes,本地历史用Reader,基本面用Affair,稳定性靠心跳、重试与缓存。接下来可以按这个顺序继续深入:

  1. 把 docs/quick.md 里的示例逐个跑一遍,熟悉每个接口的返回字段;
  2. Reader攒一份全市场日线数据,配合除权明细做复权回测;
  3. 研究mootdx/utils/holiday.py的交易日历工具,给你的策略加上交易日判断;
  4. 项目仓库里有完整的测试用例(tests/目录),读测试是最快的用法学习方式。

数据的获取只是量化的第一步,把数据变成可复现的策略逻辑才是真正的挑战。mootdx 把前面那段最枯燥的路替你铺平了,剩下的,交给你。

【免费下载链接】mootdx通达信数据读取的一个简便使用封装项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/1391551/

相关文章:

  • 159、Zephyr RTOS安全基础:密钥管理与存储
  • 2026户外移动烧烤房厂家哪家好?深度解析陕西振泰实业实力所在 - 深度智识库
  • dnSpy 从零快速上手:.NET 调试器与程序集编辑器的完整避坑指南
  • Python金融分析必备工具:Pyti库安装与环境配置指南
  • 啵哩打印机连接电脑全攻略:从蓝牙配遇到打印优化
  • SMUDebugTool完整使用指南:免费开源的AMD Ryzen调试工具,五个实战案例让你彻底掌控CPU性能
  • 让AI当你的办公室助理:WPS自动做PPT、Zotero管文献,上手只需三步
  • Python进阶 - re模块的finditer方法 返回迭代器对象节省内存
  • 基于FFmpeg与Python实现视频批量自动截图:从原理到工程实践
  • esprint高级技巧:自定义工作线程数与性能优化实战指南
  • CTF新手实战入门:从零搭建环境到掌握五大题型解题框架
  • IPXWrapper 协议转换终极指南:一招让星际争霸、红警2在Win10/11重获局域网联机
  • 从卡在 99% 到满速下载:我用 trackerslist 公共 Tracker 清单解决 BT 下载找不到源
  • 微服务架构设计模式-第二章
  • 蓝天空协议服务正式推出:Jetstream v2、SDK 等多项更新带来哪些新体验?
  • C++ decltype关键字详解:从类型推导到泛型编程实战
  • 从一首歌到整个歌库:163MusicLyrics 免费批量获取网易云与QQ音乐LRC歌词
  • 苹果的升级名单上没有它:OpenCore Legacy Patcher 让老 Mac 跑起新版 macOS
  • 探索型项目的合理开发顺序
  • 离谱!最弱小模型反向破解GPT、Claude,AI巨头护城河彻底崩塌
  • 番茄小说下载工具完整指南:5分钟批量下载整本小说并转EPUB
  • 163MusicLyrics 免费歌词下载完整指南:批量获取网易云与 QQ 音乐 LRC 歌词
  • 深耕用户体验与信任构建:详解企业级京东网站建设策略与实战指南
  • 从新手到专家:Mockito for Dart测试场景全攻略
  • 2026年8月14日广州市花都区移动500M宽带一篇说透 - 领卡园地
  • 微信聊天记录永久保存终极指南:WeChatMsg开源工具从零到精通
  • 同一个BT种子,为何有人5分钟下完、有人等3天?每天更新的Tracker列表让下载提速翻倍
  • 五分钟搞懂 KMS_VL_ALL_AIO:Windows 与 Office 永久激活的完整攻略
  • PyCharm与Conda环境配置全攻略:从虚拟环境到项目实战
  • 告别网盘下载限速:开源插件 LinkSwift 的直链下载完整指南