通达信终端数据接口API到底怎么用才能把股票期货数据接进自己的程序

企业微信

通达信终端数据接口API到底是个什么东西

很多做股票和期货量化交易的朋友,刚开始都卡在数据上。行情软件看得见,但想把数据弄进自己的Python脚本或者C++程序里,就不知道从哪下手了。通达信终端数据接口API说的就是这件事,它不是一个官方文档里写得明明白白的公开接口,而是通达信客户端留给本地程序读取行情数据的一系列通道。

你电脑上装好的通达信,无论是券商版还是普通版,它在运行的时候会把接收到的股票、期货、期权行情写到本地文件里,或者通过内存共享、DDE动态数据交换的方式暴露出来。你的程序只要按照约定去读这些地方,就能拿到实时价格、成交量、持仓量这些关键字段。

通达信数据落地的三种常见路径

第一种是读本地数据文件。通达信安装目录下有个vipdoc文件夹,里面按上海、深圳、期货交易所分门别类存放了日线、分钟线数据。这些文件是二进制格式,后缀通常是.day或者.lc1、.lc5。股票日线数据在vipdoc\sh\lday和vipdoc\sz\lday下面,期货数据在vipdoc\ds\lday这类目录。用Python的struct模块按照固定字节长度去解析,就能还原出开高低收、成交量、成交额。这条路走起来稳定,不依赖通达信是否在前台运行,但数据更新有延迟,收盘后跑批处理最合适。


import struct

# 通达信日线数据格式:日期(4字节整数) 开(4字节浮点) 高 低 收 成交额(4字节浮点) 成交量(4字节整数) 保留(4字节)

with open('vipdoc/sh/lday/sh600000.day', 'rb') as f:

    data = f.read()

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

        record = data[i:i+32]

        date, open_, high, low, close, amount, vol, _ = struct.unpack('<IIIIIfII', record)

        print(date, open_/100, high/100, low/100, close/100, vol)

第二种是DDE方式。通达信支持把实时行情通过DDE输出到Excel或者其他支持DDE的客户端。你在通达信里设置好输出品种和字段,Excel里用=DDE公式就能拉到不停跳动的价格。这种方式适合做盘中监控看板,但吞吐量有限,品种多了容易卡。

通达信终端数据接口API到底怎么用才能把股票期货数据接进自己的程序

第三种是第三方封装的Python库。有人把通达信的数据读取逻辑打包成了pytdx这样的库,你直接调用函数就能拿到行情。pytdx连的是通达信的行情服务器,不是读本地文件,它能取到实时tick和分钟线,股票期货都支持。


from pytdx.hq import TdxHq_API

api = TdxHq_API()

with api.connect('119.147.212.81', 7709):

    # 取招商银行日线,市场代码0是深圳,1是上海

    data = api.get_security_bars(9, 1, '600036', 0, 10)

    for bar in data:

        print(bar['datetime'], bar['open'], bar['close'])

股票和期货接口的差别在哪

股票数据接口和期货数据接口在通达信体系里走的是同一套底层逻辑,但字段含义有区别。股票关心的是成交量、成交额、换手率,期货更关心持仓量、结算价、保证金。你在读本地数据文件的时候,期货的日线文件里多出来的那个字段往往就是持仓量。

期货还有夜盘,数据文件的时间戳会跨自然日。股票下午三点收盘,数据文件当天就写完了。期货夜盘要到凌晨两点半,你要是半夜跑脚本去读,可能会读到不完整的当日数据。做期货量化回测的时候,这一点不留意,回测结果和实盘会对不上。

实时行情接口的坑

通达信的实时行情推送不是标准WebSocket,它用的是私有TCP协议。你如果自己写socket去连行情服务器,要处理心跳包、解压数据、维护股票代码表,工作量不小。用pytdx这类库能省掉这部分麻烦,但要注意服务器地址会变,库作者不更新的话就得自己找可用节点。

盘中高频读取本地文件也有问题。通达信写文件不是原子操作,你读的时候可能读到写了一半的数据。稳妥做法是先把文件复制到临时目录再解析,或者判断文件修改时间,等它稳定了再读。

怎么把数据接进量化策略

做股票多因子策略,你每天收盘后从本地文件批量读全市场日线,算出因子值,第二天开盘前生成交易信号。这条路对实时性要求不高,通达信终端数据接口API读本地文件的方式完全够用。

做期货日内策略,你需要盘中实时价格来触发交易。DDE或者pytdx的实时行情接口更合适。拿到tick数据后,在内存里合成一分钟或者五分钟K线,再喂给策略逻辑。


# 期货主力合约分钟线合成示例

from collections import deque

bars = deque(maxlen=100)

current_minute = None

def on_tick(tick):

    global current_minute

    minute = tick['datetime'][:16]  # 截取到分钟

    if current_minute != minute:

        if current_minute is not None:

            bars.append(bar)

        current_minute = minute

        bar = {'open': tick['last_price'], 'high': tick['last_price'],

               'low': tick['last_price'], 'close': tick['last_price'],

               'volume': tick['volume']}

    else:

        bar['high'] = max(bar['high'], tick['last_price'])

        bar['low'] = min(bar['low'], tick['last_price'])

        bar['close'] = tick['last_price']

        bar['volume'] += tick['volume']

几个容易踩的雷

通达信的数据文件编码是GBK,股票名称字段用Python读出来要decode('gbk'),不然全是乱码。

期货合约代码在本地文件里不带交易所前缀,你读出来是rb2310这样的形式,要自己补上交易所标识才能和实盘交易接口对上。

不同券商版本的通达信目录结构可能不一样,有的把数据放在安装目录下,有的放在用户文档目录下。写代码之前先确认路径,别硬编码。

通达信终端数据接口API不是万能钥匙,它适合个人投资者和小型量化团队低成本获取行情数据。资金量大了,对数据质量和延迟有更高要求,还是得考虑付费数据源。但作为入门和验证策略的工具,它足够好用。

转载请注明出处:https://www.lianghuajiaoyi.top/wenzhang/tongdaxin-shuju-jiekou-API-770.html