通达信历史数据API怎么获取股票期货数据?
摘要:
通达信历史数据API能免费获取股票期货历史行情,通过本地数据文件或pytdx库调用。掌握数据格式和接口方法,可批量导出日线分钟线数据,用于回测与量化策略开发。

为什么你需要通达信历史数据API
做股票复盘、期货回测,或者写个量化策略,第一步永远是搞到靠谱的历史数据。通达信是国内散户用得最多的行情软件,它本地缓存了大量历史数据,而且提供了接口让你能直接读取。很多人不知道,这些数据不用花钱买,就在你电脑里躺着。
通达信数据到底存在哪里
安装通达信后,打开安装目录,找到 vipdoc 文件夹。里面按市场分了子文件夹:sh 是上海,sz 是深圳,ds 是期货和期权。每个股票或合约的日线数据存在 lday 文件夹下,分钟线在 minline 文件夹。文件后缀是 .day 和 .lc1、.lc5。
这些文件是二进制格式,不能直接用记事本打开。但结构很规整,每条记录32个字节,对应一天或一分钟的行情。你只要按固定偏移量读,就能把开盘、最高、最低、收盘、成交量、成交额全部抠出来。
用Python直接读本地文件
不依赖任何第三方库,纯Python就能解析。日线文件每条记录结构如下:前4字节是日期(YYYYMMDD的整数),接着4字节开盘价(分),4字节最高价,4字节最低价,4字节收盘价,然后4字节成交额(元),4字节成交量(股),最后4字节保留。价格都是整数,单位是分,读出来除以100就行。

代码示例:
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]
if len(record) < 32:
break
date, open_p, high, low, close, amount, vol, _ = struct.unpack('<IIIIIIII', record)
data.append({
'date': date,
'open': open_p / 100.0,
'high': high / 100.0,
'low': low / 100.0,
'close': close / 100.0,
'amount': amount,
'volume': vol
})
return data
期货数据在 ds 文件夹下,结构略有不同,但同样是32字节一条。注意期货价格单位可能是元,需要根据合约乘数换算。
更省事的办法 pytdx库
自己解析文件虽然自由,但遇到除权、复权、分钟线合并就很麻烦。pytdx是一个开源库,直接连接通达信的行情服务器,拉取历史数据。它支持股票、期货、指数,还能取实时行情。
安装:pip install pytdx
拉取股票日线:
from pytdx.hq import TdxHq_API
api = TdxHq_API()
with api.connect('119.147.212.81', 7709):
data = api.get_security_bars(9, 0, '000001', 0, 100)
for item in data:
print(item['datetime'], item['open'], item['close'])
参数说明:第一个9代表日线,0是市场代码(0深圳,1上海),'000001'是股票代码,0是起始位置,100是数量。期货市场代码用2(上海期货)或3(大连期货)等。
pytdx的好处是自动处理了数据格式,返回的是字典列表,直接能用。坏处是服务器连接不稳定,批量拉取要加延时,不然会被封IP。
期货历史数据的特殊处理
期货和股票不一样,有主力合约换月、夜盘、不同交易所规则。通达信本地文件里,每个合约单独存一个文件,比如 rb2310.day。你要做连续主力合约,得自己拼接。
拼接逻辑:每天选持仓量最大的合约作为主力,把它的行情接上。换月那天,价格会出现跳空,需要用前复权或后复权处理。很多量化平台直接提供主力连续合约,但如果你自己从通达信抠数据,这一步绕不开。
夜盘数据在分钟线里,日线文件会把夜盘算到第二个交易日。比如周五晚上21点的夜盘,日线日期显示下周一。回测时要注意这个细节,不然信号会错位。
数据清洗与存储建议
原始数据拿下来不能直接用。停牌日没有记录,需要补空值或者跳过。涨跌停板的价格有时候是无效的,要过滤。成交量单位是股,期货是手,别搞混。
存成CSV最省事,但数据量大了读取慢。用SQLite或者Parquet格式,查询快,压缩率高。按品种和周期分表,比如 stock_day、future_min5。每次增量更新,只拉最新几天,不用全量重下。
常见坑与避坑指南
通达信服务器有多个,不同服务器数据完整性不一样。多试几个IP,找到稳定的。分钟线数据本地文件通常只保留最近几个月,想要更早的分钟线,只能通过pytdx从服务器拉,但服务器也只给最近有限条数。
除权数据在通达信里是单独的 T0002 文件夹下的 hq_cache 里,自己解析除权信息很麻烦。建议用pytdx的 get_xdxr_info 接口,直接拿除权除息记录,然后自己算复权价。
最后提醒一句:通达信的数据仅供个人研究,别拿去做商业分发。量化交易用历史数据回测,一定要考虑滑点和手续费,不然曲线好看,实盘亏钱。
声明
转载声明:欢迎分享本文,转载请注明出处!
点击复制: