公司动态
MOOTDX通达信数据接口实战指南:从零构建生产级量化数据管道
MOOTDX通达信数据接口实战指南从零构建生产级量化数据管道【免费下载链接】mootdx通达信数据读取的一个简便使用封装项目地址: https://gitcode.com/GitHub_Trending/mo/mootdxMOOTDX 是通达信数据接口的 Python 封装把行情、历史、财务、板块数据的获取统一收敛为几行调用解决了自己写 pytdx 协议、手解析 .day/.lc1 二进制、维护服务器列表的全部重复劳动。本文从最小示例出发用生产级工程思维把实时行情、本地历史、财务挖掘与量化分析串成一条完整数据管道。 从零到能跑一次通过的最小可运行示例第一步环境与依赖python -m venv mootdx_env source mootdx_env/bin/activate pip install -U githttps://gitcode.com/GitHub_Trending/mo/mootdximport pandas as pd from mootdx import __version__ print(fMOOTDX版本{__version__}pandas版本{pd.__version__})第二步Hello Worldfrom mootdx.quotes import Quotes # marketstd 标准沪深市场factory 返回 StdQuotes 实例 client Quotes.factory(marketstd) # frequency9 表示日K线offset 控制返回条数 df client.bars(symbol600036, frequency9, offset10) print(df[[open, high, low, close, vol]])运行即可拿到平安银行近 10 个交易日的日线数据全部以pandas.DataFrame返回可直接进入分析流程。第三步让连接更快一步首次使用可先运行python -m mootdx bestip工具会并发探测所有行情服务器并把最优 IP 写入~/.mootdx/config.json。之后再实例化Quotes.factory(marketstd, bestipTrue)就会直接使用测速结果省去每次启动的握手开销。 核心能力拆解读懂项目的五大关键对象对象模块职责Quotesmootdx/quotes.py在线行情实时快照、K线、分时、分笔、F10、除权除息Readermootdx/reader.py本地数据读取通达信 vipdoc 目录下的日线/分钟线/板块文件Affairmootdx/affair.py财务数据列出、下载、解析 gpcw 财报文件server.bestipmootdx/server.py服务器测速与最优服务器选择utilsmootdx/utils/工具集频率映射、市场识别、to_file导出、缓存装饰器建立心智模型只需一句话Quotes管联网拿最新Reader管本地读存量Affair管财报深挖三者输出的都是 DataFrame天然可拼接成管道。 真实业务场景实战让项目真正干活的 3 个场景场景一毫秒级实时行情服务高频/实时类问题反复实例化Quotes会频繁握手建连毫秒级行情直接被打回原形。方案进程内复用单例连接。from mootdx.quotes import Quotes class HighFrequencyQuotes: 单例连接 批量快照适合行情轮询任务 _client None def __init__(self, timeout10): if HighFrequencyQuotes._client is None: HighFrequencyQuotes._client Quotes.factory( marketstd, bestipTrue, heartbeatTrue, timeouttimeout, ) self.client HighFrequencyQuotes._client def snapshot(self, symbols): 批量实时快照str 或 list 均可 return self.client.quotes(symbolsymbols) def tick(self, symbol, count100): 最近分笔成交用于盘中监控 return self.client.transaction(symbolsymbol, start0, offsetcount) hq HighFrequencyQuotes() snap hq.snapshot([000001, 600000, 000858]) print(snap[[price, last_close, vol, amount]])✅收益连接只建一次批量行情走同一条 TCP 链路配合heartbeatTrue保活可稳定支撑盘中每秒轮询。场景二本地历史数据批量读取批处理/历史类问题日线批量回测要读几千个.day文件逐个手拼路径易错。方案Reader已内置 sh/sz 目录自动定位与二进制解析。from pathlib import Path from mootdx.reader import Reader class LocalHistoryReader: 批量读取通达信本地 vipdoc 数据 def __init__(self, tdxdir): if not Path(tdxdir).is_dir(): raise FileNotFoundError(f通达信数据目录不存在: {tdxdir}) self.reader Reader.factory(marketstd, tdxdirtdxdir) def daily_batch(self, symbols): 批量读日线自动定位 sh/sz 目录 frames {} for code in symbols: df self.reader.daily(symbolcode) if df is not None and not df.empty: frames[code] df return frames def minutes(self, symbol, suffix5): 5 分钟线走 fzline1 分钟线走 minline return self.reader.fzline(symbolsymbol) if suffix 5 else self.reader.minute(symbolsymbol, suffix1) reader LocalHistoryReader(/path/to/tdx) data reader.daily_batch([600000, 000001]) print(data[600000].tail())✅收益本地读取零网络开销回测全量历史数据时比在线拉取快一个数量级是离线策略研究的基石。场景三财务数据自动同步与挖掘数据挖掘/分析类问题财报文件零散、格式各异手工下载解析费时费力。方案Affair提供文件清单 → 增量下载 → 一键解析闭环。from pathlib import Path from mootdx.affair import Affair class FinancialPipeline: 财务数据自动下载 解析 按股票筛选 def __init__(self, downdirfinancial_data): self.downdir downdir Path(downdir).mkdir(exist_okTrue) def available(self): 列出服务器上可下载的财务文件清单 return Affair.files() def sync_latest(self): 增量下载缺失的财务文件已存在则跳过 local {p.name for p in Path(self.downdir).glob(*.zip)} for item in Affair.files(): if item[filename] not in local: Affair.fetch(downdirself.downdir, filenameitem[filename]) def report(self, filename, symbol): 解析财务文件并取出目标股票的数据行 df Affair.parse(downdirself.downdir, filenamefilename) return df.loc[symbol] if symbol in df.index else None pipe FinancialPipeline() pipe.sync_latest() row pipe.report(pipe.available()[-1][filename], 000001) print(row)✅收益财报全量同步 按代码取数一条龙配合中文表头可直接喂给基本面因子模型。⚙️ 把项目用到生产性能、稳定与可观测性缓存策略内存 磁盘两级缓存import pickle from functools import lru_cache from pathlib import Path class DiskCache: 磁盘缓存与 lru_cache 组合实现两级缓存 def __init__(self, cache_dir.cache): self.cache_dir Path(cache_dir) self.cache_dir.mkdir(exist_okTrue) def get(self, key): path self.cache_dir / f{key}.pkl return pickle.loads(path.read_bytes()) if path.exists() else None def set(self, key, value): (self.cache_dir / f{key}.pkl).write_bytes(pickle.dumps(value)) cache DiskCache() lru_cache(maxsize256) def daily_bars(symbol): 已缓存的历史数据直接命中避免重复请求 hit cache.get(symbol) if hit is not None: return hit from mootdx.quotes import Quotes df Quotes.factory(marketstd).bars(symbolsymbol, frequency9, offset250) cache.set(symbol, df) return df 项目内置的pd_cache装饰器位于mootdx/utils/pandas_cache.py可一键为 DataFrame 函数加文件缓存pd_cache(expired600)表示 10 分钟过期。错误处理与重试机制import time from functools import wraps from mootdx.logger import logger def retry(max_retries3, delay1): 指数退避重试网络抖动时自动续命 def decorator(func): wraps(func) def wrapper(*args, **kwargs): for attempt in range(max_retries): try: return func(*args, **kwargs) except Exception as exc: if attempt max_retries - 1: raise logger.warning(f{func.__name__} 第 {attempt 1} 次失败: {exc}) time.sleep(delay * (attempt 1)) return wrapper return decorator retry(max_retries3, delay1) def robust_quotes(symbol): from mootdx.quotes import Quotes return Quotes.factory(marketstd).quotes(symbolsymbol)日志与监控from mootdx.logger import logger logger.info(行情任务启动) logger.warning(返回数据为空触发重连)统一走mootdx/logger.py的输出通道生产环境只需对接日志采集即可完成可观测性闭环。 进阶玩法与生态结合构建量化系统把Quotes的复权输出与 pandas 计算引擎结合一个小型双均线信号系统就成型了import pandas as pd from mootdx.quotes import Quotes from mootdx.utils import to_file client Quotes.factory(marketstd) def build_signals(symbol): 前复权日线 双均线信号输出可直接落盘 df client.bars(symbolsymbol, frequency9, offset250, adjustqfq) df[ma5] df[close].rolling(5).mean() df[ma20] df[close].rolling(20).mean() df[signal] (df[ma5] df[ma20]).astype(int) return df.dropna() signals build_signals(600036) print(signals[[close, ma5, ma20, signal]].tail()) # 一键导出 CSV/Excel/HDF5 to_file(signals, signals.csv)⚠️ 注意adjustqfqmootdx 内置前/后复权因子源码见mootdx/utils/adjust.py回测前务必处理分红送转否则信号失真。需要与 talib 等指标库联动时把df[close].values传入即可无缝衔接。 避坑指南与常见问题定位Q1连接超时或卡死大概率是最优服务器失效。重跑python -m mootdx bestip -l 5刷新~/.mootdx/config.json。Q2接口返回空 DataFrame先确认代码市场判断是否正确用get_stock_market(000001, stringTrue)验证再检查服务器是否仍在工作。Q3Reader 报tdxdir 目录不存在传入的必须是通达信安装目录含vipdoc子目录的那一层如C:/new_tdx。Q4扩展市场ext不可用扩展市场行情接口已标记失效构造时会打印 warning沪深数据请统一走marketstd。Q5一跑就报异常如何快速定位跑下面这段诊断脚本逐步缩小问题范围import socket from mootdx.server import server from mootdx.utils import get_stock_market def diagnose(): try: servers server(indexHQ, limit3, consoleTrue) print([√] 最优服务器:, servers[0]) except Exception as exc: print([×] 服务器选择失败:, exc) return with socket.create_connection(servers[0], timeout2): print([√] TCP 握手正常) print(000001 所属市场:, get_stock_market(000001, stringTrue)) diagnose()命令行也可快速自检python -m mootdx quotes -s 600000在线与python -m mootdx reader -s 600000本地。从一次通过的 Hello World到复用连接的实时行情服务、本地历史的批量读取、财务数据的自动同步再到缓存重试与量化信号系统你已经把 MOOTDX 通达信数据接口的核心能力全部落到了生产级工程实践里。数据的获取只是起点管道铺好之后策略与研究才是真正的舞台——现在就开始你的量化数据管道之旅吧。【免费下载链接】mootdx通达信数据读取的一个简便使用封装项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考