通达信API到底能不能拿到板块信息?散户做量化前必须搞懂的事

企业微信

通达信API到底能拿到什么数据

很多刚接触量化交易的散户,第一个想到的工具就是通达信。看盘习惯了,公式编辑器也玩得转,自然就想用通达信API直接抓数据跑策略。问题来了,通达信官方并没有一个公开的、文档齐全的API接口。市面上说的“通达信API”,通常指两种东西。一种是通达信软件自身提供的DLL动态链接库,通过公式语言调用外部函数,另一种是第三方开发者逆向工程后封装的Python库,像pytdx这类。

这两种方式能拿到的数据截然不同。官方DLL主要面向公式指标计算,能拿到当前股票的历史K线、实时行情、财务数据。板块信息不在标准输出里。第三方库pytdx能连接通达信服务器,获取行情列表、K线、分时成交,板块数据需要额外解析服务器返回的特定字段。

板块信息对股票期货交易到底有多重要

做股票的人都知道板块轮动。今天新能源涨,明天半导体涨,后天消费复苏。如果策略只看个股价格,忽略板块效应,很容易买在板块退潮的节点。期货市场同样有板块概念,黑色系、化工系、农产品系,这些板块内部品种相关性极高。螺纹钢涨,热卷大概率跟涨,铁矿石也会被带动。

量化策略里有一个经典因子叫“板块动量”。计算方式不复杂,把同一板块所有股票或期货品种的收益率加权平均,得到一个板块指数。当板块指数突破均线,策略就做多该板块内最强的个股或期货合约。这个因子的有效性在A股市场被反复验证过。没有板块信息,这个因子根本跑不起来。

通达信API到底能不能拿到板块信息?散户做量化前必须搞懂的事

通达信板块数据的实际获取路径

本地文件解析法

通达信安装目录下有一个T0002文件夹,里面藏着板块数据。blocknew文件夹存放自定义板块,block.dat文件记录行业板块和概念板块的映射关系。这些文件是二进制格式,需要写解析程序。好处是数据完整,不需要联网。坏处是每次通达信更新板块,文件结构可能微调,解析代码要跟着维护。

用Python读取block.dat的大致逻辑是这样。文件头部有板块数量,每个板块记录包含板块名称、板块类型、成分股代码列表。解析时按固定字节偏移量读取,遇到中文编码用GBK解码。代码不复杂,但需要耐心调试。


import struct

def parse_block_dat(filepath):

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

        data = f.read()

    # 头部偏移量根据通达信版本可能不同

    block_count = struct.unpack('<H', data[0:2])[0]

    offset = 2

    blocks = []

    for _ in range(block_count):

        name_len = struct.unpack('<B', data[offset:offset+1])[0]

        offset += 1

        name = data[offset:offset+name_len].decode('gbk')

        offset += name_len

        stock_count = struct.unpack('<H', data[offset:offset+2])[0]

        offset += 2

        stocks = []

        for _ in range(stock_count):

            code = data[offset:offset+6].decode('ascii')

            offset += 6

            stocks.append(code)

        blocks.append({'name': name, 'stocks': stocks})

    return blocks

这段代码只是示意,实际文件里还有板块类型、市场标识等字段。不同版本的通达信,偏移量有差异。

pytdx连接服务器法

pytdx是一个开源项目,通过模拟通达信客户端与官方行情服务器通信,获取数据。它提供get_security_list方法拉取股票列表,但没有直接的get_block方法。板块信息藏在get_security_quotes返回的扩展字段里,需要抓包分析协议。

更实用的做法是用pytdx获取全市场股票列表,然后自己维护板块映射表。映射表来源可以是通达信本地文件,也可以是第三方数据供应商。这种混合方案稳定性最高。

行情软件导出法

通达信软件里有一个“数据导出”功能。进入板块指数页面,右键选择“导出数据”,可以生成Excel或CSV文件。手动操作适合回测历史数据,实盘策略不能依赖手动导出。写一个自动化脚本,用pywinauto模拟鼠标点击,也能实现定时导出。这种方案最笨,但最不容易被封IP。

期货板块数据的特殊性

期货板块和股票板块逻辑不同。股票板块由交易所或数据商定义,期货板块更多是约定俗成。黑色系包括螺纹钢、热卷、铁矿石、焦炭、焦煤。化工系包括PTA、甲醇、塑料、PP。这些分类没有官方文件,不同期货公司划分标准略有差异。

通达信API对期货板块的支持更弱。期货行情服务器返回的数据里,板块字段基本为空。做期货量化的人通常自己维护品种到板块的映射字典。


futures_blocks = {

    '黑色系': ['RB', 'HC', 'I', 'J', 'JM'],

    '化工系': ['TA', 'MA', 'L', 'PP', 'V'],

    '农产品': ['M', 'Y', 'P', 'C', 'CS'],

    '有色系': ['CU', 'AL', 'ZN', 'PB', 'NI']

}

这个字典需要人工更新。新品种上市,比如碳酸锂、工业硅,要手动加进去。

量化策略里板块信息的用法

股票板块轮动策略

每天收盘后计算所有板块的5日收益率。选出收益率最高的三个板块。第二天开盘买入这三个板块内市值最小的两只股票。持有五天,然后重新计算板块排名。这个策略在震荡市和结构性行情里表现不错。

关键点在于板块数据的时效性。通达信本地文件更新有延迟,通常收盘后半小时才写入。pytdx获取的实时行情没有板块分类。折中方案是每天收盘后解析本地文件,生成板块映射表,第二天盘中用实时行情计算板块指数。

期货跨品种套利

同一板块内品种价差有均值回归特性。螺纹钢和热卷的价差,长期在-200到200之间波动。当价差突破300,做空螺纹钢做多热卷。这个策略的触发条件依赖板块内品种配对。没有板块信息,手动配对效率极低。

用通达信API获取期货主力合约价格,结合自维护的板块字典,可以自动扫描所有板块内品种的价差。价差超过2倍标准差就开仓。

绕不开的合规与稳定性问题

通达信官方对API调用没有明确授权。第三方库pytdx连接服务器,本质上是模拟客户端。高频请求可能触发服务器限流,IP被封。实盘策略不能把数据源完全押在通达信上。

稳妥的做法是双数据源。通达信本地文件用于回测和板块映射,实时行情用CTP接口或者第三方付费数据。股票可以用AkShare、Tushare作为备份。期货用CTP直连交易所,稳定性最高。

板块信息本身也有生存偏差。通达信的概念板块经常调整,今天把某只股票放进“人工智能”板块,明天可能就移除了。回测时要用历史板块成分,不能用当前成分。通达信本地文件不保存历史板块快照,需要自己每天备份。

给散户的实操建议

不要一上来就追求全自动。先用通达信手动导出板块数据,跑一个简单的板块动量回测。验证策略逻辑有效,再考虑自动化。

数据获取环节,优先用本地文件解析。写一个每天收盘后运行的脚本,解析block.dat,把板块映射存进SQLite数据库。日积月累,就有了历史板块数据。

期货板块字典自己维护。用Excel管理,品种代码、板块名称、上市日期、退市日期。策略读取Excel生成映射。

实盘交易用券商或期货公司的官方接口。通达信API只做数据辅助,不做交易执行。这样即使通达信接口出问题,也不会影响持仓。

转载请注明出处:https://www.lianghuajiaoyi.top/wenzhang/tongdaxin-API-bankuai-xinxi-1025.html