尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

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

mootdx 使用手记:把通达信数据变成几行 Python 代码 mootdx 使用手记把通达信数据变成几行 Python 代码【免费下载链接】mootdx通达信数据读取的一个简便使用封装项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx如果你做过 A 股量化或数据分析大概率绕不开一个尴尬的处境行情软件里的数据很好用但想用 Python 拿数据要么依赖第三方接口限频、要钱、不稳定要么自己逆向通达信的二进制协议工作量堪比考古。mootdx 正是冲着这个痛点来的——它把通达信的线上行情接口和本地vipdoc数据文件都封装成了简洁的 Python API让你用几行代码就能拿到 K 线、分时、财务和除权信息。这篇文章面向刚开始接触它的人讲清楚它最值得掌握的几条用法以及我在实践中踩过的坑。先建立心智模型mootdx 有两条数据通道很多人第一次用 mootdx 会困惑Quotes和Reader到底有什么区别其实它们的分工非常清晰Quotes走的是网络通道实时向通达信行情服务器发起请求适合拿当下的行情比如最新价、当日分时、最近 N 根 K 线。代价是依赖服务器稳定性和网络。Reader走的是本地通道直接解析你电脑上通达信客户端下载好的vipdoc目录适合拿历史的全量数据速度快、不占网络。代价是本地文件需要自己维护更新。把这两条通道想成水龙头和水库Quotes 是拧开就能出水的龙头Reader 是存好水的水库。搞清楚这个前提后面所有示例都能对号入座。十分钟跑通第一个脚本先装包。如果搞不清依赖关系直接装全量版本即可pip install -U mootdx[all]安装完成后用一行代码验证环境from mootdx.quotes import Quotes client Quotes.factory(marketstd) print(client.bars(symbol600036, frequency9, offset5))能打印出一张带datetime、open、close、high、low、vol等列的 DataFrame就说明通道已经打通。从此刻起你的 Python 环境和通达信行情之间只隔着一个对象。用 Quotes 拿线上行情K 线、指数、分时与分笔Quotes.factory(marketstd)返回的是股票市场客户端marketext则对应期货、期权等扩展市场。日常最常用的几个方法from mootdx.quotes import Quotes client Quotes.factory(marketstd, multithreadTrue, heartbeatTrue) # 日 K 线frequency9 表示日线一次最多拉 800 根 daily client.bars(symbol600036, frequency9, offset800) # 指数行情 index_df client.index(symbol000001, frequency9) # 当日分时数据 minute_df client.minute(symbol000001) # 历史某一天的分时 hist_minute client.minutes(symbol000001, date20240115) # 分笔成交 tick_df client.transaction(symbol000001, offset100)几个值得记住的细节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(marketstd) pool {} for code in [000001, 600000, 000858]: pool[code] client.quotes(symbolcode)用 Reader 啃本地数据日线、分钟线与板块如果你的研究需要几年的完整日线逐根从网络拉既慢又容易被服务器限流。更聪明的做法是让通达信客户端先下载数据然后用Reader直接解析本地文件。本地数据的默认目录结构是vipdoc/sz/lday/sz000001.day这类Reader会自动帮你把股票代码映射到正确的市场路径from mootdx.reader import Reader reader Reader.factory(marketstd, tdxdirC:/new_tdx) # 日线 df_daily reader.daily(symbol600036) # 1 分钟线suffix15 分钟线传 5 df_min1 reader.minute(symbol600036, suffix1) # 分时走势线fzline df_fz reader.fzline(symbol600036)需要注意两点。第一tdxdir必须指向真实的通达信安装目录否则构造会直接抛异常——它是校验入口不是可选参数。第二代码里的市场前缀sh/sz可带可不带Reader会智能补全但如果股票代码以88开头板块指数它会被特殊路由到sh目录这是通达信自己的目录约定。想批量读取一批股票做本地回测把上面的调用包一层循环即可配合find_path还能先探测文件是否存在避免读到不存在的代码时抛错。财务数据与除权除息做基本面研究的两块拼图财报数据的拉取mootdx.affair.Affair负责财务数据的下载与解析。整个流程分两步先看远端有哪些历史财报文件再按需下载解析from mootdx.affair import Affair # 查看可用的财报文件列表含文件名、哈希、大小 files Affair.files() # 下载并解析指定文件 df Affair.parse(downdirtmp, filenamegpcw20231231.zip) # 只想下载不想解析用 fetch Affair.fetch(downdirtmp, filenamegpcw20231231.zip)files()返回的哈希值很有用它可以作为本地文件是否过期的判断依据。自己维护增量同步时比对哈希比比对文件名可靠得多。除权除息与复权历史行情最隐蔽的坑是没复权。遇到分红送转股价会跳空直接用原始数据算收益率会得到离谱结果。mootdx 提供了两条解决路径用Quotes的xdxr(symbol...)拉取除权除息明细拿到送转、分红记录用mootdx.utils.adjust里的复权工具把原始行情按前复权/后复权换算。社区里常见的做法是原始数据 除权明细 → 计算复权因子 → 生成复权后的 K 线。具体接口的入参格式可以查阅 docs/api/quote2.md 和 docs/api/reader.md里面给了字段级说明。让程序更稳更快服务器、心跳与缓存自动挑一台好服务器通达信有大量行情服务器速度天差地别。mootdx 内置了测速逻辑启动时传入bestipTrue会自动挑选延迟最低的节点from mootdx.quotes import Quotes client Quotes.factory(marketstd, bestipTrue, timeout10)也可以在命令行单独跑测速把结果存进配置之后所有客户端共享这份最优服务器清单python -m mootdx bestip -vv心跳与自动重连长连接挂在后台跑定时任务时服务器可能静默断开。开启heartbeatTrue让客户端定期发送心跳包维持连接万一断线reconnect()方法会按保存的服务器地址重连。代码里把这些组合起来就是一套简单的容错机制。给高频读取加缓存本地Reader解析文件本身很快但如果你在循环里反复读同一只股票仍然建议加一层缓存。mootdx 的工具模块里有一个pd_cache装饰器专门缓存 DataFrame 结果还支持过期时间from mootdx.utils.pandas_cache import pd_cache pd_cache(cache_dir./cache, expired600) def load_daily(code): reader Reader.factory(marketstd, tdxdirC:/new_tdx) return reader.daily(symbolcode)十分钟内的重复读取会直接命中磁盘缓存不再触碰文件。对回测里反复加载全市场数据这种场景收益非常明显。命令行不写代码也能导出数据mootdx 不只是库还带了命令行工具。不想打开编辑器时直接导出数据# 导出个股日线到 CSV python -m mootdx quotes 600036 --actionbars --outputout.csv # 读取本地文件导出 python -m mootdx reader 600036 --actiondaily --tdxdirC:/new_tdx --outputout.csv具体子命令的完整参数可以用python -m mootdx --help查看。另外mootdx/tools/tdx2csv.py提供了批量把通达信数据转成 CSV 的函数适合一次性迁移整个本地数据目录。这些细节都记录在 docs/cli/quotes.md 中。容易被绊倒的四个地方结合社区反馈和我的实际使用有四个问题出现频率最高扩展市场接口当前不可用。marketext的行情接口在代码里已明确标注已经失效做期货、外盘数据时不要指望它优先考虑本地Reader的扩展市场解析marketext的Reader仍可读取ds目录。tdxdir路径必须真实存在。Reader构造时会校验目录报错信息是tdxdir 目录不存在。先把通达信客户端装好、数据下载到本地再传路径。Mac M1 上的 PyMiniRacer 兼容问题。如果你在 Apple Silicon 上安装失败通常是py_mini_racer这个依赖的问题可参考 docs/faq/py_mini_racer.md 的说明处理。一次拉不全的历史数据。bars单次上限 800 根拉多年日线或高频数据时要记得分页累加不要想当然地传一个超大offset。下一步从能跑到能算到此为止你已经掌握了一条完整的数据流水线线上行情用Quotes本地历史用Reader基本面用Affair稳定性靠心跳、重试与缓存。接下来可以按这个顺序继续深入把 docs/quick.md 里的示例逐个跑一遍熟悉每个接口的返回字段用Reader攒一份全市场日线数据配合除权明细做复权回测研究mootdx/utils/holiday.py的交易日历工具给你的策略加上交易日判断项目仓库里有完整的测试用例tests/目录读测试是最快的用法学习方式。数据的获取只是量化的第一步把数据变成可复现的策略逻辑才是真正的挑战。mootdx 把前面那段最枯燥的路替你铺平了剩下的交给你。【免费下载链接】mootdx通达信数据读取的一个简便使用封装项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表