
通达信股票数据API到底是个啥
很多做股票、期货的朋友都听说过通达信,看盘软件用得多,但一提到API就头大。其实API就是个传话的,你告诉通达信你想要哪只股票、哪个时间段的数据,它把数据打包好递给你。你不需要手动去软件里翻,写几行代码就能自动拿到。
通达信本身不直接卖数据接口,市面上说的通达信数据API通常是两种路子。一种是通达信官方给机构用的付费接口,门槛高、费用贵。另一种是第三方开发者通过逆向或抓包搞出来的本地数据读取方案,比如读取通达信安装目录下的日线文件、分钟线文件,或者通过DLL插件跟通达信客户端通信。散户用得最多的就是第二种。
为什么你需要这个API
手动复盘、选股、盯盘,效率太低。你想验证一个策略,比如5日均线上穿20日均线买入,手动翻几百只股票要累死。有了API,写个循环几秒钟跑完。期货也一样,螺纹钢、豆粕的历史数据拉下来,算算波动率、做做回测,比拍脑袋靠谱。
还有一个现实原因,很多免费数据源延迟高、缺字段,通达信的本地数据质量在散户圈里算好的。日线、分钟线、财务数据、除权信息都有。你把API调通,等于给自己装了个数据引擎。

常见的数据获取方式
读取本地文件
通达信安装后,会在安装目录下生成vipdoc文件夹。里面按市场分上海、深圳,再按品种分日线、分钟线。日线文件后缀是.day,分钟线是.lc1或.lc5。这些文件是二进制格式,不能直接打开看,需要自己写代码解析。
结构大致是这样,每32个字节一条记录,包含日期、开高低收、成交量、成交额。你读出来之后转成整数、浮点数,就能用了。Python里用struct模块或者numpy都能干。
import struct
def read_day_file(filepath):
data = []
with open(filepath, 'rb') as f:
buf = f.read()
for i in range(0, len(buf), 32):
record = buf[i:i+32]
date, open_, high, low, close, amount, vol, _ = struct.unpack('<IIIIIfII', record)
data.append({
'date': date,
'open': open_ / 100.0,
'high': high / 100.0,
'low': low / 100.0,
'close': close / 100.0,
'amount': amount,
'volume': vol
})
return data
这个代码就是读日线文件的例子。价格要除以100,因为通达信存的是分。成交额单位是元,成交量单位是股。
通过DLL跟客户端通信
通达信有个插件机制,可以加载外部DLL。有人写了DLL来暴露数据接口,你在Python里用ctypes调用。这种方式能拿到实时行情,但需要通达信客户端开着,而且不同版本兼容性不一样。
第三方库
GitHub上有一些开源项目,比如pytdx,封装了通达信的通信协议。你pip install pytdx就能用,直接连行情服务器,拉实时数据、历史数据。这个对散户最友好,不用管本地文件格式。
from pytdx.hq import TdxHq_API
api = TdxHq_API()
with api.connect('119.147.212.81', 7709):
# 获取贵州茅台日线数据,最多800条
data = api.get_security_bars(9, 0, '600519', 0, 100)
for item in data:
print(item)
这个代码就是连服务器拿数据,9代表日线,0代表深圳市场,600519是股票代码。期货代码也类似,需要指定市场。
期货数据怎么拿
期货跟股票不太一样,合约有到期日,主力合约会换。通达信里期货数据也放在vipdoc下面,按交易所分。上海期货交易所、大连、郑州、中金所。文件格式跟股票日线差不多,但要注意合约代码。
用pytdx也能拿期货数据,市场代码不同。比如上海期货交易所是30,大连是29,郑州是28。你调用get_security_bars的时候传对应的市场代码就行。
期货还有一个坑,主力合约不连续。你回测的时候不能直接用主力合约代码拉长周期数据,因为换月会跳空。要么用指数合约,要么自己拼接。通达信里有期货指数,代码比如TA000、RB000,这些是连续合约,适合做策略。
数据清洗和复权
拿到的原始数据不能直接用。股票有除权除息,价格会跳空。你必须做复权,否则均线、指标全乱。通达信本地数据里,日线文件默认是不复权的。你要用复权数据,得自己算,或者用pytdx里带的复权接口。
前复权、后复权选哪个。做回测用前复权,因为最新价格是真实的。做历史分析用后复权,保持价格连续性。期货没有复权问题,但有换月拼接口。
实际应用场景
你有了API,能干的事很多。批量下载所有股票日线,存到数据库,每天收盘后更新。写个选股脚本,跑均线多头排列、MACD金叉。做期货的,拉Tick数据算高频因子。甚至监控持仓,价格突破均线发微信提醒。
举一个选股的小例子。你拉全市场股票的收盘价,算20日均线,选出收盘价大于20日均线且成交量放大的。代码不复杂,关键是数据要全、要准。
几个容易踩的坑
第一,通达信服务器地址经常变。pytdx里内置了一批,但可能失效。你得去网上找最新的可用服务器,或者自己抓包。
第二,数据量限制。pytdx单次请求最多800条K线,你要拉长周期得分页。用get_security_bars的start参数偏移。
第三,编码问题。股票名称可能是GBK编码,读出来乱码。记得decode('gbk')。
第四,频率限制。别死循环猛请求,会被封IP。加个sleep,或者用本地文件读取。
第五,本地文件路径。不同版本通达信安装目录不一样,别写死路径。
给散户的建议
如果你只是偶尔看看数据,不用折腾API,直接用通达信软件导出CSV就行。如果你想做量化、回测、自动选股,API是绕不过去的。先跑通pytdx拉一只股票的数据,再扩展到全市场。数据存好,别每次都重新拉。
期货数据比股票麻烦,合约换月、主力拼接要处理好。回测的时候小心未来函数,别用当天收盘价算当天信号。
通达信股票数据API不是什么黑科技,就是个体力活加细心活。你把数据搞定了,策略才有意义。数据不对,再牛的模型也白搭。