企业微信

通达信API能帮你做什么

通达信本身不直接提供官方API给普通用户。市面上说的“通达信API”通常指第三方逆向工程库,最出名的是pytdx。它让你用Python读取通达信的行情服务器数据,包括股票、期货、期权、指数。不能直接下单交易,除非你用的是券商定制的通达信版本,并且券商开放了交易接口。

pytdx的安装与连接

pip install pytdx

连接服务器需要选一个可用的IP。pytdx内置了服务器列表,但经常失效。稳妥做法是维护自己的服务器池。

通达信股票软件的api怎么用


from pytdx.hq import TdxHq_API

api = TdxHq_API()

# 服务器列表可在网上找,或者用pytdx.util里的

servers = [('119.147.212.81', 7709), ('123.125.108.14', 7709)]

for ip, port in servers:

    if api.connect(ip, port):

        print('连接成功', ip)

        break

获取股票K线数据

get_security_bars参数:类别,市场代码,股票代码,起始位置,数量。市场代码0是深市,1是沪市。


# 取平安银行日K线,最近10根

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

# 类别9是日K线,其他:0=5分钟,1=15分钟,2=30分钟,3=1小时,4=日线,5=周线,6=月线,7=1分钟,8=1分钟,9=日线,10=季线,11=年线

for bar in data:

    print(bar['datetime'], bar['open'], bar['high'], bar['low'], bar['close'], bar['vol'])

获取实时行情

get_security_quotes可以取多只股票的实时五档行情。


stocks = [(0, '000001'), (1, '600000')]

quotes = api.get_security_quotes(stocks)

for q in quotes:

    print(q['code'], q['price'], q['bid1'], q['ask1'])

获取财务数据与除权信息

get_finance_info返回总股本、流通股本、每股净资产、净利润等。

get_xdxr_info返回除权除息数据,用于复权处理。


info = api.get_finance_info(0, '000001')

print(info['zongguben'], info['liutongguben'], info['meigujingzichan'])

xdxr = api.get_xdxr_info(0, '000001')

for item in xdxr:

    print(item['date'], item['category'], item['fenhong'], item['songzhuangu'])

扩展行情与期货数据

pytdx还提供扩展行情接口,可以取期货、期权、港股、美股。用TdxExHq_API。


from pytdx.exhq import TdxExHq_API

ex_api = TdxExHq_API()

ex_api.connect('112.74.214.43', 7727)

# 取主力合约IF2309的日K线

bars = ex_api.get_security_bars(9, 47, 'IF2309', 0, 10)  # 市场代码47是中金所

交易接口的现实限制

通达信官方没有公开交易API。想程序化交易,常见路径:用券商提供的通达信版本,配合模拟点击或内存读取。更稳妥的是用券商官方API,如华泰MATIC、国泰君安GTA、中泰XTP。这些接口申请门槛高,需要机构或高净值客户。个人散户建议先专注行情数据与策略回测。

数据频率与稳定性的坑

pytdx取历史K线每分钟有限制,一次最多800根。取大量数据需分页。服务器经常断线,需要重连机制。实时行情有延迟,通常几秒。不要用于高频交易。

用pytdx构建简易回测数据源

把日K线存入本地SQLite或CSV,后续用pandas分析。示例:


import pandas as pd

from pytdx.hq import TdxHq_API

api = TdxHq_API()

api.connect('119.147.212.81', 7709)

all_bars = []

for i in range(10):  # 取8000根日线

    bars = api.get_security_bars(9, 0, '000001', i*800, 800)

    all_bars = bars + all_bars

df = pd.DataFrame(all_bars)

df['datetime'] = pd.to_datetime(df['datetime'])

df.set_index('datetime', inplace=True)

df.to_csv('000001_daily.csv')

  • pytdx是免费方案,适合个人取行情。

  • 交易需券商支持,别指望通达信自带。

  • 数据有延迟,不适合高频。

  • 记得维护服务器列表,加异常重试。

  • 期货数据用扩展行情接口,注意市场代码。