企业微信

通达信api接口到底是什么

不少做股票和期货的朋友都听过通达信api接口,但一问具体怎么用就卡壳了。说白了这个接口就是通达信软件留给外部程序的一扇门,你写个小脚本或者小软件,通过这扇门就能把行情数据拿出来,不用盯着屏幕一页页翻。

通达信本身是国内老牌行情软件,券商版、期货公司版很多都是基于它的内核改的。它的api接口主要分两种,一种是dll动态链接库方式,一种是本地数据文件读取方式。两种路子各有各的用法,下面掰开讲。

dll接口方式 适合实时行情

通达信官方并没有公开一份完整的api文档,市面上流通的接口说明大多数是逆向或者社区整理出来的。dll方式的核心是一个叫tdxapi.dll或者类似名字的动态库,外部程序加载这个库之后,可以调用里面的函数来订阅行情、获取实时报价。

通达信api接口怎么用?散户也能学会的股票数据获取方法

这种方式的优点是实时性不错,能拿到逐笔或者秒级的行情推送。缺点是稳定性看版本,通达信每次升级主程序,dll的导出函数可能就变了,你的程序就得跟着改。做量化交易的朋友如果选这条路,得做好版本适配的心理准备。

调用逻辑大概是这样的:先加载dll,然后初始化连接,接着发送订阅请求,最后在回调函数里处理数据。整个过程用C++或者Python的ctypes都能实现。Python这边用ctypes.windll.LoadLibrary加载,把函数参数类型声明清楚,就能调起来。

本地数据文件读取 适合盘后分析

通达信会把日线、分钟线数据存在本地目录里,常见的是vipdoc文件夹下面的.day和.lc1文件。股票日线在vipdoc/sh/lday和vipdoc/sz/lday下面,期货数据在对应期货公司的目录里。

这些文件是二进制格式,结构相对固定。日线文件每条记录32个字节,包含日期、开盘、最高、最低、收盘、成交额、成交量等字段。分钟线文件每条记录也是32字节,字段顺序略有不同。用Python的struct模块或者numpy.fromfile就能解析。

这种方式的好处是稳定,不受软件版本影响,数据就在硬盘上,想怎么读就怎么读。缺点是没有实时性,只能做盘后分析或者历史回测。做股票选股策略、期货趋势跟踪策略的回测,用本地文件足够了。

期货数据获取的特别之处

期货和股票在通达信里的数据组织方式有区别。期货有主力合约切换的问题,通达信里一般用ZL或者888这样的代码来表示主力连续合约。通过api接口拿数据的时候,得注意合约代码的映射关系。

期货行情还有一个特点是夜盘。白天收盘后晚上还有交易,本地文件更新时间和股票不一样。如果你写程序自动读取,得把夜盘时间段考虑进去,不然读到的是半天数据。

做期货量化交易的朋友,用通达信api接口拿数据通常只是第一步。拿到数据之后还得做合约拼接、换月处理、复权计算。主力合约切换那天,价格会有跳空,不处理的话策略回测结果会失真。

代码示例 读取日线数据


import struct

import os

def read_tdx_day(file_path):

    data = []

    with open(file_path, 'rb') as f:

        buf = f.read()

    for i in range(0, len(buf), 32):

        record = buf[i:i+32]

        if len(record) < 32:

            break

        fields = struct.unpack('IIIIIfII', record)

        date = fields[0]

        open_price = fields[1] / 100.0

        high = fields[2] / 100.0

        low = fields[3] / 100.0

        close = fields[4] / 100.0

        amount = fields[5]

        volume = fields[6]

        data.append({

            'date': date,

            'open': open_price,

            'high': high,

            'low': low,

            'close': close,

            'amount': amount,

            'volume': volume

        })

    return data

# 读取上证指数日线

file_path = r'C:\\new_tdx\\vipdoc\\sh\\lday\\sh000001.day'

day_data = read_tdx_day(file_path)

print(day_data[-5:])

这段代码直接读二进制文件,把最近5天的上证指数日线打出来。字段顺序是日期、开盘、最高、最低、收盘、成交额、成交量,价格字段需要除以100还原。

用接口数据做期货主力监控

拿到数据之后能干什么,举个实际场景。期货交易者关心主力合约的持仓量和成交量变化,这两个指标能反映资金流向。用通达信api接口把每天的主力合约数据拉下来,存到数据库里,跑个简单脚本监控持仓量异动。

持仓量连续几天大幅增加,价格却没怎么动,说明多空双方在加仓对峙,后面可能有大波动。持仓量减少价格下跌,说明多头在离场,趋势可能延续。这些判断不需要多复杂的模型,把数据拿全了,肉眼都能看出门道。

股票这边也一样,日线数据拿下来算个均线、算个成交量比率,比手工翻股票池效率高太多。通达信api接口的价值就在这儿,把重复劳动交给程序,人专注在决策上。

几个容易踩的坑

第一个坑是路径问题。不同券商版通达信的安装目录不一样,vipdoc文件夹位置得自己找。有的版本在C:\\new_tdx,有的在D:\\tdx,写程序的时候别把路径写死。

第二个坑是数据完整性。本地文件如果长时间没打开通达信下载数据,日线文件可能缺 recent 几天。跑策略之前先检查文件修改时间,太旧了就手动补一下数据。

第三个坑是期货合约代码。通达信的期货代码和交易所代码不是一一对应的,上海期货交易所的螺纹钢在通达信里是RB加月份,主力连续是RBL8或者RBL9,具体看版本。拿数据之前先在软件里确认代码。

通达信api接口不是什么高深的东西,本质就是数据搬运工。搞明白数据从哪来、长什么样、怎么解析,剩下的事情就是写逻辑了。股票和期货交易里,数据是地基,地基打牢了,上面的策略才有意义。