如何使用pytdx库获取通达信数据

企业微信

安装与连接

pytdx是一个纯Python实现的通达信协议库,能够直接连接通达信行情服务器获取股票、期货等金融数据。安装方式简单,使用pip命令即可完成。


pip install pytdx

连接通达信服务器需要指定IP地址和端口。pytdx内置了多个可用服务器列表,也可以自行测试选择延迟较低的服务器。

如何使用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的稳定性和速度适合个人量化交易者,但需要注意服务器限制和网络延迟。高频策略建议使用更专业的行情源。

转载请注明出处:https://www.lianghuajiaoyi.top/wenzhang/pytdx-tongdaxin-shuju-596.html