
通达信没有官方API,但有个好用的“后门”
很多人以为通达信像同花顺那样开放了官方数据接口。其实通达信本身是个行情软件,它不对外提供标准HTTP API。但它的行情服务器通信协议早就被逆向出来了。市面上有个Python库叫pytdx,专门干这件事。装上它,你就能像调用函数一样拿到股票、期货、期权的实时行情。
第一步:安装pytdx
打开命令行,输入:
pip install pytdx
就这么简单。没有依赖地狱,纯Python实现。
第二步:找到可用的行情服务器
通达信在全国有很多行情服务器。你需要一个能连上的IP和端口。先获取服务器列表:

from pytdx.hq import TdxHq_API
api = TdxHq_API()
servers = api.get_server_list()
for s in servers:
print(s)
输出里会有一堆IP和端口。选一个延迟低的,比如119.147.212.81:7709。
第三步:连接并获取实时行情
连接用with语句,自动处理断开。调用get_security_quotes函数,传入市场代码和股票代码。市场代码:0是深市,1是沪市。期货的话,中金所是2,上期所是3,大商所是4,郑商所是5。
from pytdx.hq import TdxHq_API
api = TdxHq_API()
with api.connect('119.147.212.81', 7709):
# 获取股票行情:浦发银行(沪市,代码600000)
data = api.get_security_quotes([(1, '600000')])
print(data)
返回的data是一个列表,里面是字典。字段包括:code(代码)、price(最新价)、last_close(昨收)、open(今开)、high(最高)、low(最低)、vol(成交量)、amount(成交额)、bid1到bid5(买五档)、ask1到ask5(卖五档)。
期货也类似。比如螺纹钢主力合约(上期所,代码rb2310):
data = api.get_security_quotes([(3, 'rb2310')])
注意期货代码要带交易所前缀,但pytdx里直接用合约代码就行。
一次性拿多个品种
get_security_quotes接受列表,可以混合股票和期货。比如同时看茅台(沪市600519)和沪深300股指期货(中金所IF2312):
stocks = [(1, '600519'), (2, 'IF2312')]
data = api.get_security_quotes(stocks)
for d in data:
print(f"{d['code']} 最新价 {d['price']}")
为什么不用websocket或HTTP轮询
通达信协议基于TCP长连接,效率高。pytdx底层是socket通信,一次请求拿一批数据,延迟在毫秒级。比你自己写HTTP轮询快得多。而且完全免费,没有次数限制。
注意事项
服务器可能偶尔连不上。多准备几个IP,写个重试逻辑。行情数据是快照,不是逐笔推送。要逐笔成交,得用get_transaction_data函数。实时性上,比券商官方API慢几十毫秒,但对大多数策略够用了。
期货夜盘时段,部分服务器可能不提供数据。切换到支持夜盘的服务器就行。用get_server_list多试几个。
进阶:结合pandas做实时监控
拉回来的数据直接转成DataFrame,方便计算指标。
import pandas as pd
df = api.to_df(data)
print(df[['code', 'price', 'vol']])
to_df是pytdx自带的转换方法。想算均线、MACD,直接在上面操作。
这套方法同样适用于获取历史K线。get_security_bars函数可以拿分钟线、日线。期货和股票参数一样。有了实时行情,加上历史数据,你就能在本地跑简单的量化策略了。
