
安装与连接
pytdx是一个纯Python实现的通达信协议库,能够直接连接通达信行情服务器获取股票、期货等金融数据。安装方式简单,使用pip命令即可完成。
pip install pytdx
连接通达信服务器需要指定IP地址和端口。pytdx内置了多个可用服务器列表,也可以自行测试选择延迟较低的服务器。

from pytdx.hq import TdxHq_API
api = TdxHq_API()
# 连接服务器
if api.connect('119.147.212.81', 7709):
print('连接成功')
连接成功后,可以调用各种接口获取数据。注意每次请求后需要适当延时,避免被服务器限制。
获取实时行情
get_security_quotes方法用于获取多只股票的实时行情数据。传入市场代码和股票代码组成的列表,市场代码0表示深圳,1表示上海。
# 获取平安银行和贵州茅台的实时行情
data = api.get_security_quotes([(0, '000001'), (1, '600519')])
for item in data:
print(item['code'], item['price'], item['vol'])
返回数据包含最新价、开盘价、最高价、最低价、成交量、成交额等字段。期货合约同样适用,市场代码根据交易所不同有所区别,中金所为1,上期所为1,大商所为0,郑商所为0。
获取历史K线数据
get_security_bars方法获取指定股票或期货的历史K线。参数包括类别、市场代码、股票代码、起始位置和数量。类别0表示5分钟K线,1表示15分钟,2表示30分钟,3表示1小时,4表示日K线,5表示周K线,6表示月K线,7表示1分钟,8表示1分钟,9表示日K线,10表示季K线,11表示年K线。
# 获取贵州茅台日K线,从第0条开始取100条
bars = api.get_security_bars(4, 1, '600519', 0, 100)
for bar in bars:
print(bar['datetime'], bar['open'], bar['high'], bar['low'], bar['close'], bar['vol'])
期货历史数据获取方式相同,只需要修改市场代码和合约代码。获取大量历史数据时,需要循环调用,每次最多800条。
# 循环获取期货历史K线
all_bars = []
start = 0
while True:
bars = api.get_security_bars(4, 1, 'IF2312', start, 800)
if not bars:
break
all_bars = bars + all_bars
start += 800
获取板块与成分股
get_and_parse_block_info方法可以获取板块信息,包括板块名称和成分股列表。
# 获取板块数据
block_data = api.get_and_parse_block_info('block_zs.dat')
for block in block_data:
print(block['blockname'], block['code'])
获取板块成分股使用get_block_stocks方法或解析返回的股票列表。
stocks = api.get_block_stocks('block_zs.dat', '板块代码')
for stock in stocks:
print(stock['code'], stock['name'])
获取股票列表与市场信息
get_security_list方法获取指定市场的股票列表。市场代码0为深圳,1为上海。
# 获取上海市场股票列表
stocks = api.get_security_list(1, 0)
for stock in stocks[:10]:
print(stock['code'], stock['name'])
get_security_count方法获取市场股票总数。
count = api.get_security_count(1)
print('上海市场股票数量:', count)
获取分时数据
get_minute_time_data方法获取当日分时数据,包含每分钟的价格和成交量。
# 获取平安银行分时数据
time_data = api.get_minute_time_data(0, '000001')
for item in time_data:
print(item['time'], item['price'], item['vol'])
历史分时数据使用get_history_minute_time_data方法,需要指定日期。
history_data = api.get_history_minute_time_data(0, '000001', 20231215)
获取除权除息信息
get_xdxr_info方法获取股票的除权除息信息,用于复权计算。
xdxr = api.get_xdxr_info(1, '600519')
for item in xdxr:
print(item['date'], item['category'], item['fenhong'], item['songzhuangu'])
获取财务数据
get_finance_info方法获取股票的财务数据,包括总股本、流通股本、每股净资产、净利润等。
finance = api.get_finance_info(1, '600519')
print(finance['zongguben'], finance['jingzichan'], finance['jinglirun'])
期货数据获取注意事项
期货合约代码与股票不同,需要包含交易所和合约月份。获取期货行情时,市场代码根据交易所确定。中金所股指期货市场代码为1,商品期货中上期所为1,大商所为0,郑商所为0。
期货合约列表可以通过get_security_list获取,但需要先确定市场代码和起始位置。
# 获取中金所期货合约列表
futures = api.get_security_list(1, 0)
for f in futures:
if 'IF' in f['code'] or 'IC' in f['code']:
print(f['code'], f['name'])
期货历史K线获取与股票类似,但需要注意合约的到期日,避免获取到无效数据。
断开连接与异常处理
使用完毕后需要断开连接释放资源。
api.disconnect()
网络请求可能失败,需要添加异常处理。
try:
data = api.get_security_quotes([(0, '000001')])
except Exception as e:
print('获取数据失败:', e)
api.disconnect()
量化交易中的应用
pytdx获取的数据可以直接用于量化策略。实时行情用于监控和信号触发,历史K线用于回测和参数优化。期货数据支持跨期套利、趋势跟踪等策略。
数据存储建议使用pandas DataFrame,方便后续处理。
import pandas as pd
bars = api.get_security_bars(4, 1, '600519', 0, 100)
df = pd.DataFrame(bars)
df['datetime'] = pd.to_datetime(df['datetime'])
df.set_index('datetime', inplace=True)
print(df[['open', 'high', 'low', 'close', 'vol']].head())
pytdx的稳定性和速度适合个人量化交易者,但需要注意服务器限制和网络延迟。高频策略建议使用更专业的行情源。