
简介面向量化交易与程序化下单开发者的一份通达信交易接口资源包专注于解决通达信客户端难以直接支持自动化批量委托、账户信息查询等开发需求。压缩包共收录4个文件包含核心动态链接库、两个脚本示例以及一份说明文档整体仅一百五十三千字节非常轻量。核心动态链接库负责封装与交易服务器通信的底层逻辑。两个示例脚本分别演示接口初始化调用和函数级封装方式说明文档则详细梳理了从登录验证、账户持仓查询、委托下单、实时行情订阅、未成交撤单到最终登出释放资源的完整流程并给出防止敏感信息泄露、限制最大下单量、设置止损止盈等安全与风险管理建议。资源包结构清晰可帮助开发者快速定位动态库、脚本示例与说明文档降低二次开发的上手门槛已有12593人学习下载适合有Python或C基础、希望快速搭建自动化交易原型的开发者参考后可依据自身策略扩展相应的风控模块和交易界面。 tdx通达信交易接口这个东西最近问的人是真的多。不管是做量化策略回测的、搞自动盯盘选股的还是想把自己那套指标公式跑得更顺手的最后都会绕到同一个问题上怎么把通达信里面的数据和交易能力用程序化的方式拿出来用。先把这个接口的全貌说清楚。市面上所谓的“tdx接口”并不是通达信官方开放的、标准统一的API它其实是好几个不同层次解决方案的统称。有人要的只是行情数据有人要的是把买卖指令直接怼进交易系统还有人想要的其实是通达信公式系统以外的扩展DLL插件能力。这三个需求方向用的技术路线完全不同坑也完全不同。这篇文章我就把这几年在通达信接口上踩过的坑、验证过的方案、以及一些实操细节全部拆开讲尽量让不同基础的人都能找到自己能用的部分。1. 接口的全貌与选型思路1.1 先搞清楚你想要的到底是哪种接口在动手之前必须先把需求分层。我见过太多人上来就问“有没有通达信交易接口的源码”结果聊两句发现他要的只是把日K线数据导出来做分析。这两种需求隔了十万八千里技术方案也完全不沾边。第一种是纯行情数据接口。要的是行情报价、K线历史数据、分时数据、盘口快照这些。这类需求用pytdx这类基于通达信通讯协议逆向出来的Python库就可以解决免费、轻量、不依赖Windows客户端部署在Linux服务器上也行。pytdx直连的是通达信的行情服务器只要你有一台能上网的机器几行代码就能批量拉取历史数据速度比在软件里手工翻页不知道快到哪里去了。第二种是交易下单接口。也就是把策略算出来的买卖信号自动变成真实账户里的委托单。这里必须泼一盆冷水通达信官方从来没有正式对外开放过交易接口。市面上所谓能用的交易接口要么是模拟鼠标键盘去操作Windows客户端要么是走了某些第三方配资或量化平台的中间通道要么是某些年代久远、依赖特殊协议的非官方实现。这条路的稳定性、合规性、账号安全性都需要你仔细掂量下面我会单独用一章讲清楚。第三种是扩展DLL接口。这个最容易被混淆因为它也带“接口”两个字。通达信的公式系统允许用户自己写DLL扩展用来在公式里调用外部编译好的函数实现内置函数做不了的计算比如复杂的机器学习模型推理、特殊的数值算法等。前一阵子网上很多“通达信dll编写源码大全”之类的热词指的就是这个东西它解决的是指标计算能力扩展的问题和交易通道半毛钱关系都没有。1.2 从协议逆向到官方兼容技术路线的历史演进通达信接口这个圈子技术路线不是一天变成现在这样的。早些年大家用的一直是协议逆向这条路。一般来说通达信客户端启动后会连接一批行情服务器通讯协议是私有二进制格式有心人通过抓包、反汇编、分析内存一点一点把协议格式还原出来然后封装成方便调用的接口库。pytdx就是这类的典型代表它支持标准的行情协议也能连接部分服务器获取Level-1行情。后来随着量化交易逐渐普及证券公司开始推广自己的量化交易终端比如Ptrade、QMT这些它们本质上走的是券商官方柜台接口。这些终端大多兼容通达信的公式语言同时提供真正的Python或C交易API下单走的是官方合规通道。对大多数个人投资者来说如果你确实需要程序化交易直接去开户券商那里申请QMT或Ptrade权限是远比研究非官方交易接口更稳妥、更省心的路径。我在第四节会专门对比这两条路的成本。顺带提一句最近热词里有“申请通达信L2数据接口SDK”这种说法。这其实指的是从券商或第三方数据商那里申请Level-2行情的授权和SDK不是通达信官方给散户发SDK。L2数据包含了十档行情、逐笔成交等更细颗粒度的数据对高频策略和盘口分析有帮助但开通门槛通常是资金量和交易量要求不同券商政策不一样建议直接问自己的客户经理。2. 行情数据接入的核心实操2.1 pytdx接入的完整流程与参数选型如果你确定自己需要的是行情数据pytdx可以说是我目前用过的最顺手的方案。它的安装很简单直接pip install pytdx就能完成底层不依赖Windows环境这点对我这种习惯在Linux服务器上跑数据抓取任务的人来说非常友好。服务端连接方式常用的是标准协议和扩展协议两种。标准协议就是通达信客户端默认使用的行情协议连接的是普通的行情服务器扩展协议则是某些服务器支持的增强型数据。实际使用中我一般直接用扩展协议的服务器列表因为它的数据完整度和响应速度更好一些。下面这段代码是我日常拉取日K线最常用的模板可以顺手保存下来from pytdx.hq import TdxHq_API api TdxHq_API() # 连接服务器IP和端口换成你本地区延迟最低的 # 端口一般是7709有些服务器是7708 with api.connect(119.147.212.81, 7709): # 获取日K线市场代码1表示上海0表示深圳 # 证券代码需要补足6位比如平安银行是000001 data api.get_security_bars(9, 0, 000001, 0, 100) # 返回的数据是list可以转成DataFrame方便后续处理 df api.to_df(data) print(df.head())get_security_bars这个函数的第一个参数是K线周期代码这里有个很容易记混的点0是5分钟K线1是15分钟K线2是30分钟K线3是1小时K线4是日K线5是周K线6是月K线7是1分钟K线8是1分钟K线另一个版本9是日K线。实际上你常用到的就四个7代表1分钟0代表5分钟4代表日K9也是日K。如果拿不准就记住4和9都能用差异不大。第二个参数是市场代码1是上海0是深圳北交所的代码在最新版本里可能需要特殊处理遇到再单独查文档。还有一个重要的点是这个接口获取的数据是不复权的原始价格。你做技术分析的时候遇到除权除息的日子K线会出现跳空如果不做复权处理很多依赖连续价格的指标计算出来就是错的。所以我的习惯是拿到原始数据之后用本地维护的复权因子表做后复权或前复权处理。网上关于“通达信股本变迁文件(gbbq)解密方法”的讨论本质就是为了拿到准确的复权因子。其实也有更省事的办法那就是直接调用pytdx里的get_xdxr_info接口它可以从服务器取到除权除息信息然后在本地计算复权因子比解析gbbq文件要简单得多。2.2 从行情到指标公式移植与DLL扩展的边界数据拿到之后很多人的下一步就是把通达信软件里跑得好好的指标公式移植到自己的程序里。这里我建议你先分清两种情况。如果你的公式只用了通达信内置的函数比如MA、MACD、KDJ这些那完全可以照着公式逻辑用Python重新写一遍。通达信的公式语言本质上是一种类C的脚本语言它的数组运算特性用Python的pandas来实现非常顺手。比如一个简单的双均线策略通达信公式可能是MA5:MA(CLOSE,5); MA20:MA(CLOSE,20);转成Python就是df[MA5] df[close].rolling(5).mean() df[MA20] df[close].rolling(20).mean()这种移植没有技术难度唯一的坑在于通达信公式里的某些函数和Python不一定一一对应比如BARSLAST这种统计条件成立至今周期数的函数你需要用循环或向量化方式自己实现。好在网上有大量现成的转换对照表遇到不会的搜一下就好。如果你的公式里用了外部DLL情况就复杂一些。通达信的DLL扩展接口有一套固定的导出函数规范你需要用C/C或Delphi写一个符合这个规范的DLL然后在公式里通过“扩展函数”的方式调用。这里我想特别提醒一个坑通达信客户端默认是32位程序即使你在64位Windows上运行所以你的DLL必须编译成32位版本用64位编译器编出来的DLL放进去会直接加载失败。网上那些“通达信dll编写源码大全”里其实一半是在讲这个导出规范和32位编译环境的配置。如果你习惯用Visual Studio记得把平台工具集切换到v143或者v142然后活动解决方案平台选x86否则你写的代码再对也跑不起来。还有一种情况是你想在公式里加密算法逻辑不想让用你指标的人看到源码这种需求是通过公式加密来实现的。但这里要泼个冷水网上流传的各种“通达信指标完全加密的解决方法及解”大多数是灰色操作碰了不仅违反软件用户协议还可能踩到别人的知识产权雷区。我的建议是如果你真要给别人分发指标用DLL封装核心逻辑是相对正规的做法至少别人没法直接看到你的算法同时你也绕开了对公式加密机制的逆向安全得多。3. 交易下单的可行路径与风险3.1 模拟点击方案的原理与致命短板行情数据搞定了接下来就是很多人最关心的交易接口。先说结论如果你现在用的是普通通达信客户端没有券商提供的量化终端权限那么市面上所谓“通达信交易接口”的实现方式绝大多数是UI自动化。原理说白了就是程序模拟人操作客户端——定位买入按钮的坐标模拟鼠标点击在弹出的对话框里填写价格和数量再点确认。听起来不太优雅但确实有一批人在用。Python里做这件事的经典搭配是pyautogui加图像识别。pyautogui负责控制鼠标键盘图像识别负责在屏幕上找到要点击的按钮位置。大致的流程是这样import pyautogui import time # 找到买入按钮在屏幕上的位置 # 先用截图工具把按钮截图保存为buy_btn.png btn_pos pyautogui.locateCenterOnScreen(buy_btn.png, confidence0.8) if btn_pos: pyautogui.click(btn_pos) time.sleep(0.5) # 输入价格和数量 pyautogui.write(10.50, interval0.05) pyautogui.press(tab) pyautogui.write(100, interval0.05) pyautogui.press(enter)这条路最大的问题是脆弱。屏幕分辨率一变、客户端窗口位置一变、主题皮肤一换识别坐标就全乱了。你还需要保证下单的那台电脑不能被占用因为程序控制鼠标键盘期间你做不了任何其他操作。还有一个更隐蔽的问题下单界面上弹出的错误提示、风险揭示弹窗都有可能让点击序列脱轨而程序往往无法感知这些异常。所以我一直认为UI自动化只适合在模拟环境里验证流程真要拿真金白银这么干大概率会在某次弹窗变化的时候翻车。3.2 合规通道的对比与选型建议在交易接口这件事上我个人的建议一直很明确如果是实盘一定要走券商官方合规通道。现在绝大多数券商都提供Ptrade或QMT这类量化交易终端它们支持Python策略编写交易指令直接对接券商柜台有完整的风控和监管报备。QMT是很多个人量化玩家的首选因为它门槛相对亲民支持miniQMT模式可以用Python直接调用交易函数下单。你的通达信公式逻辑完全可以迁移过去毕竟QMT的公式语法和通达信高度兼容。Ptrade则偏向策略托管适合做稳健的算法交易和组合管理。两个都支持获取实时行情、查询持仓、提交委托区别在于QMT更像一个本地终端适合自己折腾Ptrade更像一个平台适合跑长期策略。我把这两条路放在一起做个对比维度非官方接口 / UI自动化券商量化终端QMT/Ptrade开通成本无资金门槛通常有资金要求不同券商差异大稳定性受客户端界面、网络环境影响大官方维护稳定性有保障下单速度依赖界面操作秒级延迟直连接口毫秒级延迟合规风险可能违反软件用户协议券商认可受监管保护维护成本通达信升级就要重新适配官方迭代无需操心我用“通达信分时当日做t”这个场景举个例子。很多人想用程序辅助做T因为分时买卖点反应快手动操作来不及。如果你用非官方接口去实现每天开盘前要确认客户端登录状态、交易通道正常、程序识别正确开盘后还要担心闪崩或者其他异常这本身就是一种精神负担。而如果用QMT的Python接口写好自动盯盘和条件单逻辑后程序可以稳定地以毫秒级速度执行同时支持撤单重挂做T的成功率会有本质提升。3.3 先模拟再实盘的实战建议不管是走哪条路我的建议都是先在模拟环境里完整跑通再考虑实盘。这个步骤很多人会跳过去特别是那些自认为策略很稳的人但恰恰是这种自信最容易在实盘里吃亏。模拟测试阶段至少要把下面这些情况测一遍连续涨跌停时委托是否排队成功价格触及涨跌停价时程序是否会自动拒单半路断网重连后持仓和委托状态能否正确恢复策略跑飞时能否手工一键撤单并停止程序。我自己的习惯是先在simnow这类模拟交易环境里跑满两周期间不做任何人工干预让程序自己对抗震荡、趋势、消息面等各种行情用它暴露出来的问题来检验策略和代码的健壮性。只有在模拟账户连续两周无故障、且收益曲线和预期一致的前提下我才会把小资金转到实盘。4. 常见问题排查与避坑清单4.1 高频踩坑点速查表这几个月在群里帮人看代码发现大家遇到的问题其实高度集中。我把最常见的几个整理成了表格方便你遇到问题时快速定位。问题现象可能原因解决方案连接行情服务器超时服务器IP失效或网络不通更换服务器列表用api.get_servers()拉取可用列表逐个测速pytdx返回数据为空证券代码前没补0或市场代码错误确认代码是6位比如“1”要写成“000001”K线数据在除权日跳空未做复权处理调用get_xdxr_info获取除权信息本地计算复权因子DLL在通达信里加载失败DLL编译了64位版本用32位编译环境重新生成DLL平台工具集选x86公式调用DLL时结果全部为0导出函数名或参数类型不匹配核对DLL导出函数是否符合通达信接口规范用Dependency Walker检查导出符号UI自动化点击错位屏幕分辨率或窗口位置变化使用相对坐标定位操作前锁定客户端窗口位置程序下单后客户端无响应交易通道未连接或需要重新登录在下单循环里加登录状态检查异常时拉响警报盘中策略忽然停止代码抛异常但没有日志给核心循环加try-except和日志记录异常时保存现场并报警4.2 日志、重试与风控程序化交易的生命线排查问题时最怕什么怕程序不吭声就死了你回头查的时候连个出错记录都找不到。所以我在这里强烈建议只要涉及自动交易不管你用哪条技术路线日志系统一定要从一开始就搭好。每一笔策略信号、每一次委托提交、每一次成交回报都要带上时间戳写到本地日志文件里。这不仅是出问题时的破案线索也是事后优化策略的原始素材。我的习惯是日志按天滚动保存格式统一用CSV或者JSON方便后续用pandas做统计分析。另外委托-成交的回报要做严格的状态机管理提交、部分成交、全部成交、已撤单、废单每个状态切换都要有明确的逻辑尤其是“撤单重挂”的场景必须确保程序知道前一笔已经撤干净了再发下一笔否则就会造成重复委托的严重事故。风控这块多说一句程序化交易最大的风险不是策略亏损而是程序在极端行情下的异常行为。所以不管你的策略多自信一定要在代码层面加上单日最大亏损熔断、单笔最大下单量限制、策略级手动开关这几个保护措施。我见过太多策略回测漂亮、上线却因为一次代码bug导致连续下单的事故风控不是等出事了再后悔而是事前就要把这些铁律写进代码里。4.3 数据权限与授权问题网上讨论“通达信l2函数有哪些”和“申请通达信L2数据接口SDK”的人很多但很多人没有意识到L2数据是有权限控制的。你通过pytdx这种协议逆向方案拿到的通常是Level-1的5档行情和基础快照而且这些数据是“读”出来的不是你“买”来的能不能用于商业分发本身就存在争议。Level-2的十档行情、逐笔委托数据通达信的服务器会做权限校验没有授权的情况下你是拿不到的。如果你确实需要L2数据做盘口分析正确路径是找开户券商申请Level-2行情权限。现在很多券商的手机APP里就能直接申请试用资金门槛不高有些甚至免费。拿到授权后券商会给你开通相应的行情服务跟通达信客户端配合就能看到十档行情。如果是量化程序要用那就直接走QMT这类终端的数据接口它在你获得L2权限后可以直接订阅L2数据流比任何逆向方案都干净、可靠。5. 从接口到策略的进阶心得5.1 自建数据仓库批量抓取与增量更新策略很多人在数据接口上跑通了基础拉取之后就会面临第二个问题策略研究需要一个长期积累的历史数据库而每次实时抓取历史数据又慢又不稳定。我的做法是自建一个本地数据仓库每天收盘后自动增量更新。增量更新的逻辑其实不复杂。以日K线为例每天收盘后下载当天最新数据跟本地已有的数据做对比只拉取缺失的最新那根K线然后追加到数据库里。周线、月线这类周期则不用单独存直接由日线数据在本地重采样生成这样能省不少存储空间。分钟线数据因为量大我只保留最近一年的更早的放到冷存储里需要时再临时拉取。存储引擎我用的是ClickHouse查询速度比SQLite快得多而且原生支持时间序列的函数。如果你的数据量没到几千万条级别SQLite或者PostgreSQL也完全够用。关键是要给数据表设计好主键和索引按市场代码加证券代码加时间联合查询这样不管做回测还是做实时计算性能都足够。5.2 策略回测与实盘之间的鸿沟很多人拿到行情接口之后的第一反应是“我终于可以写策略回测了”但回测和实盘之间的差距往往比想象中大得多。回测里用的历史K线是确定的数据但实际下单时要面对的是滑点、延迟、部分成交这些回测里完全模拟不出来的现实因素。我自己的经验是回测结果至少要打七折才是实盘的合理预期。如果你回测的年化收益是30%那实盘能做到20%以上就算不错。这个折扣主要来自三块一是滑点特别是小市值股票和分钟级策略冲击成本非常明显二是手续费和印花税虽然看起来是固定成本但高频策略下会吃利润三是信号延迟从策略产生信号到指令真正到达交易所中间的延迟可能导致成交价和预期价差出一个不小的距离。所以我建议在做任何策略评估时回测引擎里要强制加入滑点模型和手续费模型模拟更贴近真实的成交结果。虽然这会让曲线变得难看但真实账户会感谢你。5.3 关于“稳定”这件事的终极建议最后聊点实在的。不管你是想用通达信接口做行情分析、做指标扩展还是做程序化交易都要有一个心理准备在个人量化这条路上“稳定”是非常稀缺的。官方接口版本会变第三方库的维护者可能突然停更证券公司的政策会调整你的电脑环境也会出各种幺蛾子。这不是劝退而是提醒你要把运维的优先级提到策略开发之上。我自己目前的架构是这样行情数据用pytdx做冗余备份主数据流走券商量化终端的官方接口策略开发和回测在本地完成实盘则单独用一台低功耗迷你主机跑确保和日常办公、娱乐环境隔离所有程序都注册成开机自启的服务配合看门狗脚本程序崩了能自动拉起再配合企业微信机器人把关键事件推送到手机。这套体系迭代了快两年从最初的手工启动脚本到现在基本无人值守中间踩过的每一个坑最后都变成了代码里的一个防御性判断。如果你刚开始接触这个领域我的建议很简单先把行情数据这条线彻底搞明白用数据把你想研究的策略逻辑验证扎实再一步步考虑交易执行。工具是拿来解决问题的别让工具本身变成最大的问题。本文还有配套的精品资源点击获取