简介:通达信交易接口示例压缩包,面向量化交易与程序化开发人员,用于解决借助 Python 调用通达信完成自动下单、账户查询、实时行情获取等需求。资源以压缩包形式提供,共包含四个文件:一个动态链接库负责封装与交易服务器通信的底层逻辑,两个脚本分别演示接口调用流程并定义登录、委托、撤单等函数,一份说明文档提供使用指南与注意事项,整体体积约一百五十三KB,结构精简便于快速上手。已有12593人学习下载。通过分析脚本与接口定义,可系统掌握从初始化、登录、账户查询到委托下单、撤单、行情订阅的完整调用链路,并了解安全与风险管理要点。对有 Python 基础的读者,这是一份可直接参考的自动化交易入门模板;对有经验的开发者,也能基于示例补充交易策略、风控逻辑和界面工具,缩短二次开发与调试周期。 很多人第一次接触通达信交易接口,都会下意识地以为它是通达信官方提供的一套标准API,翻遍官网和帮助文档却找不到入口。实际上,市面上说的"TDX接口"从来就不是一个单一的东西,而是一整套围绕着通达信客户端的数据读取、指令交互和策略落地的组合方案。这篇文章我打算把这块内容掰开揉碎,从数据流转的底层逻辑讲到实盘踩坑的经验,尽量让想入门的人少走弯路。
我最早折腾通达信接口,是因为手动盯盘做T太累了。后来发现,所谓接口开发,真正核心要解决的只有三件事:行情数据怎么拿到、策略信号怎么算、下单指令怎么送达。这三个问题各有一条独立的路线,很多人把它们混在一起,最后就乱套了。下面我按顺序拆开讲。
1. 先搞清楚:通达信接口到底是怎么一回事
1.1 接口不是官方给的,而是一套组合方案
通达信官方并没有向普通用户开放一套完整的交易API,大家口中的"接口"其实是几个不同层面的东西的总称:
- 本地数据文件接口:通达信客户端每天会往本地写大量数据,包括日线、分钟线、财务数据、股本变迁记录等。通过解析这些文件,可以把行情和基本面数据读取出来,这是最稳定、最基础的方式。
- DLL插件扩展接口:通达信允许用户编写DLL插件来扩展指标公式的功能,这种方式可以读取部分行情数据,也能做一些复杂的计算,但无法直接实现自动下单。
- 网络协议接口:通过模拟通达信客户端的通讯协议,连接到行情服务器或交易服务器进行数据请求和交易指令下发。这条路最接近"真正意义上的接口",开发门槛也最高。
- 第三方封装库:市面上有人把上述方案封装成了Python等语言的库,把底层的协议细节隐藏起来,方便做量化的人直接用。
关键点在于:不同方案适合不同的人群,不存在"放之四海而皆准"的接口。如果你只是想在通达信里跑一个更智能的选股指标,DLL插件就够了;如果你想在外部程序里做自动化交易,那必须走网络协议或本地文件解析。
1.2 不同需求对应不同接口层级
我见过很多人在群里问"通达信交易接口怎么调",其实他自己根本没想清楚要做什么。这里我建议先对着自己的需求做一次分类:
- 只想在通达信软件内用更复杂的指标:走DLL插件,或者纯公式语言实现。
- 想在外部程序里读取日线、分钟线数据做分析:优先解析本地数据文件,最简单可靠。
- 想实时获取分笔、五档快照甚至逐笔成交:必须走网络协议,同时要注意L2行情权限。
- 想自动下单、自动撤单、管理持仓:必须走交易接口,登录、风控、回报处理一个都不能少。
大部分人的最终目标其实是"用策略自动交易",那意味着你要同时打通行情和交易两条链路。这也是后续所有技术细节的核心背景。
2. 接口背后的数据流转:从行情服务器到你的策略
2.1 网络协议层的最简请求模型
通达信的行情协议,本质上是一个典型的TCP长连接请求-响应模型。客户端启动后,会维持一条到行情服务器的长连接,定期发送心跳包保持在线,同时可以随时发出请求获取行情快照、K线、分时数据等。
请求数据包通常包含以下几个部分:
- 市场代码:区分沪市、深市、北交所等。
- 证券代码:标的代码,如600000或000001。
- 数据类型:请求的是日线、五分钟线、分笔还是实时快照。
- 起始位置与数量:比如"从2024年1月1日往前取500根日线"。
这个协议最麻烦的地方在于心跳机制。如果心跳包发送的间隔不对,或者长时间没有请求,服务器会判定客户端离线并断开连接。第一次写代码的人常常在这里卡住,程序跑一会儿就掉线,然后怎么重连都连不上,其实就是心跳逻辑没处理好。
2.2 DLL插件:指标与本地计算的桥梁
DLL插件是通达信给公式系统开的一扇窗。它的本质是让用户用C/C++写一个动态链接库,由通达信在计算指标时调用。DLL能访问到的数据源包括当前标的的行情序列(开高低收、成交量、成交额等)以及若干技术指标的计算结果。
写过DLL插件的人都知道,它的核心接口就那么几个,比如"计算指标值""计算指标线数量""设置指标名称"之类的函数。难点不在于接口本身,而在于你需要用C/C++维护一套自己的缓冲区逻辑,把每次K线更新时的计算结果存下来。
这种方式适合做那些公式语言表达起来很费劲的复杂算法,比如小波变换、机器学习推理、自定义的形态匹配等。但要注意:DLL插件运行在通达信进程内部,如果你在里面做阻塞式网络请求,会导致整个客户端卡死。我在早期踩过这个坑,后来把DLL里的网络耗时压到只有一次简单的HTTP请求,依然会在极端行情下卡顿。现在我的建议是:DLL里只做计算,所有外部数据交互放到独立进程里完成。
2.3 本地数据文件:绕不开的日线、财务与股本变迁
通达信本地数据文件是最"笨"但最稳定的数据源。无论网络协议怎么写,行情软件都会把历史数据落盘,这些文件的结构虽然不公开,但经过多年的逆向分析,已经有很多公开资料可以查。
我实际使用中发现,本地文件方案最大的好处是:不会因为网络波动、服务器连接数限制而丢数据。每天收盘后跑一遍数据同步,把日线和财务数据解析成自己的数据库,后续所有研究和回测都可以在离线状态下完成。
当然,这个方案的缺点也很明显:实时性差。即使你盘中刷新,本地文件也不一定会立刻更新,某些数据甚至要等到收盘后才会完整写入。所以本地文件适合做历史数据研究,不适合做高频实盘。
3. 环境准备:把第一行代码跑通
3.1 基础环境与依赖
不管选哪种接口方案,你至少需要一个能正常登录的通达信客户端。很多人在这一步就开始偷懒,想着"我不开软件,直接连服务器不行吗"。从技术上说,有的方案确实不需要客户端常驻,但我强烈建议第一次调试时开着客户端,原因有两个:
- 可以手动对比行情数据是否正确。
- 可以从客户端的日志文件里确认服务器地址和端口配置。
开发语言方面,Python是大多数人会选的,因为数据分析和策略验证都方便。需要准备的依赖包括:
- socket库:做网络协议层开发时使用。
- struct库:处理二进制数据包的封包与解包。
- pandas:处理K线数据和财务数据。
如果你走DLL通道,那还需要C/C++编译环境。Windows下用Visual Studio,MinGW也行,但一定要注意编译位数要和通达信客户端一致,32位客户端配32位DLL,64位客户端配64位DLL,不匹配的话加载会直接失败。
3.2 连接前的身份与配置细节
连接行情服务器前,需要弄清楚几件事:
- 通讯密码:通达信的行情协议通常只需要账号和通讯密码,不需要交易密码。通讯密码是专门给行情登录用的,独立于下单密码。
- 服务器地址:每个券商提供的行情服务器地址不一样,一般可以在通达信安装目录的配置文件里找到,或者直接从客户端连接日志里提取。
- 端口号:默认大多是7709,但有些服务器会调整,一定要以实际配置为准。
连接交易服务器则严格得多,一般需要营业部代码、资金账号、交易密码等。交易接口还涉及SSL加密和消息序列号机制,每一步都不能错。我的建议是:第一版程序千万不要直接上实盘交易,先用模拟账号或者只做行情订阅,等技术链路稳定了再开通交易权限。
4. 行情数据实战:快照、K线与财务字段
4.1 网络接口读K线
通过网线接口读K线,核心是把请求包按协议格式组装好,再解析返回的二进制流。数据包返回的K线结构通常包括:日期时间、开盘价、最高价、最低价、收盘价、成交量、成交额等字段。
这里价格精度是大家最容易忽略的问题。通达信协议的很多价格字段是用整数存储的,通常需要除以100或1000才是实际价格。如果你忘了做这个换算,K线图会直接变成几百倍的离谱数字。
写代码时我是这样处理的:先不做任何业务逻辑,只把收到的原始数据打印出来,和通达信软件界面上的数字逐一比对。确认每个字段的偏移量和缩放系数都对上了,再往下写,否则越到后面越难排查。
4.2 本地文件读财务数据的思路
财务数据的读取,走本地文件会比走网络协议方便很多。通达信会把财务摘要、股本结构等信息写入特定的数据文件,每个字段占用的字节长度是固定的。解析思路其实很简单:按字节偏移把整块读出来,再按预先定义好的字段表逐项拆解。
但要注意,不同版本的通达信客户端,本地文件格式可能会有差异。同一个字段,在这个版本里是从偏移位置开始读,在另一个版本里可能就变了。所以强烈建议先写一个文件头解析工具,识别版本信息,再做对应的字段映射。
4.3 字段与复权处理:最容易踩的坑
做量化的人应该对复权不陌生,但通达信接口里的复权处理有几个细节很多人不知道:
- 前复权与后复权的计算结果依赖除权除息数据,而除权除息数据在本地文件里是按日期记录的,需要和K线数据对齐。
- 通过网络协议取K线时,服务器端只返回不复权数据,复权必须在本地自己算。如果策略里用复权价格做信号计算,而图表上显示的是不复权价,两者对不上就会产生误判。
- 股本变迁文件(gbbq)是复权计算的基石。这个文件里记录了每只股票历史上每一次分红送转的时间和比例,你所有的复权运算都要基于它。
我在实际项目中遇到过最麻烦的情况是:某只股票因为历史原因有多次配股和送转,简单的前复权算法算出来的价格和通达信软件显示的不一致。后来我对比了几个第三方库的复权逻辑,发现它们的算法在处理"配股"时口径不统一,最终只好自己按通达信官方显示的复权因子做校准。这个问题的教训是:不要盲目信任任何复权库,一定要拿真实标的的界面数据做验证。
5. 交易闭环:从委托到成交再到风控
5.1 委托下单的核心参数
自动委托下单是整个接口开发中最敏感也最容易出错的一环。一次完整的下单请求至少包含这些参数:
- 业务类型:普通买入、普通卖出、融资买入、融券卖出等。
- 证券代码与市场:必须和你查询行情的标的严格对应。
- 委托价格与价格类型:限价、市价、五档即成剩撤、最优五档等。
- 委托数量:注意不同市场的最小申报单位不同,A股一般按100股整数倍,科创板、北交所的规则又有差异。
如果这些参数不匹配,服务器会直接拒绝。最常见的报错是"数量错误"或"价格超出涨跌停范围"。特别是涨跌停价格,通达信服务器在限价单里会做严格校验,你填的价格哪怕超出1分钱都会被打回来。
5.2 回报处理与状态机
一次委托发进去之后,它会经历一个完整的生命周期:已报、部成、全成、已撤、废单等。如果你只负责把单子丢进去,不处理回报,那这个交易系统根本没有可用性。
回报处理要用状态机的思路来写。每一笔委托单都维护一个内部状态,根据服务器推送的回报消息切换状态:
- 未报:本地已生成委托单,但还没确认到服务器。
- 已报:服务器确认收到,等待撮合。
- 部分成交:有成交回报,但还有剩余数量挂在市场上。
- 全部成交:所有数量都已成交。
- 已撤单:主动撤销或超时未成交被撤。
状态机的关键是消息去重。服务器在极端情况下可能会重复推送同一条回报,如果你的处理逻辑不幂等,就可能把"成交两次"的错误状态记到数据库里。我一般会在每个消息里提取一个唯一的成交编号或委托编号,做一次缓存判断,重复消息直接丢弃。
5.3 风控要在下单之前做
说到自动交易,我必须强调一件事:风控绝对不能放在成交之后。很多人觉得自己策略好,只管下单,结果遇到一次极端行情,资金曲线回撤20%才知道什么叫疼。
我的做法是在下单模块前面加三层风控:
- 价格风控:委托价格不能偏离最新价的某个百分比,比如5%。防止程序在数据异常时往涨停价上追单。
- 数量风控:单笔下单数量不能超过预设阈值,同时当日累计委托次数和累计成交量都有上限。
- 持仓风控:下单前必须先从持仓回报里确认当前可用持仓足够卖出,不能只依赖本地记录的持仓快照。
这套风控逻辑放在独立进程里,和策略进程完全隔离。就算策略卡死或者数据源异常,风控进程依然在监控,一旦触发条件,直接发撤单指令并禁止新单申报。
6. 实盘运行中的稳定性问题与我的处理经验
6.1 登录互踢与服务重启
自动交易程序通常需要长时间稳定运行,但通达信客户端有一个习惯:同一账号在另一台设备登录时,会把之前的连接踢掉。这个问题在实盘中非常致命,尤其是当你同时开着通达信软件和自动交易程序时,可能交易程序刚下完一单,客户端那边一刷新,连接就断了。
我的处理方式是把交易程序当作"第二客户端"来对待,尽量避免和主客户端使用同一个账号同时在线。如果条件允许,单独申请一个专用账号给程序用。还有一个办法是给程序加自动重连机制,检测到连接断开后,等待几秒重新登录,并且这期间把策略暂停,避免在断线状态下误下单。
6.2 报单频率与接口限流
很多人觉得自动交易就是个"快",恨不得每秒钟下一百单。真实情况是,无论是行情服务器还是交易服务器,都有隐形的限流机制。短时间内的密集请求会触发服务器的风控,轻则延迟响应,重则直接断开你的连接。
我的经验是:交易下单频率控制在每秒不超过一次,行情请求频率控制在每3秒不超过一次。这个频率足够跑绝大多数中低频策略,又能避免触碰限流红线。如果你确实有高频需求,那就不应该用个人版通达信接口了,那是另一个量级的系统设计问题。
6.3 盘中数据异常的自检机制
程序跑得越久,你就越要假设数据是不可信的。网络闪断、服务器返回异常消息、本地文件写入不完整,这些都可能让策略做出错误判断。
我在程序里加了一个自检机制:每个交易日下午开盘前,先拉一次全量持仓和最新行情,和本地数据库对账。如果发现持仓不一致,程序会进入"只读模式",拒绝所有新的下单请求,只允许手动干预。盘中每成交一笔,也会用成交回报里的价格和数量再校验一遍本地持仓。
这个机制救过我一次。有一次因为本地数据库写入延迟,程序里记录的可用持仓比实际多了200股,差点在下单时形成卖空。自检机制发现异常后直接停掉了新单,后来查证是仓位回报推送顺序错乱导致的,如果当时没停,后果不堪设想。
说了这么多,最后分享一点个人体会。做通达信接口开发,99%的坑其实都集中在细节上,而不是宏观架构上。一个数据包字段的偏移量算错、一个复权因子没有对齐、一个回报消息没去重,都可能让你调试一下午。遇到问题的时候,不要急着改代码,先回到原始数据,拿通达信界面上看得见摸得着的数字做对照,问题定位往往就快得多。想清楚自己到底要什么,再选对应的接口方案,比一上来就想搞全自动交易靠谱太多了。
本文还有配套的精品资源,点击获取