摘要: pytdx是免费开源库,可获取通达信行情与财务数据。安装后连接服务器提取股票期货历史K线和实时报价,用于量化策略回测。注意数据延迟和服务器稳定性。

为什么你需要关心数据获取这件事

做股票或者期货交易,不管你是手动盯盘还是写程序自动跑策略,第一步永远绕不开数据。没有数据,你连过去发生了什么都不知道,更别提判断接下来可能发生什么。通达信是国内很多人看盘的老朋友,界面熟悉,数据也全。可它的数据默认锁在软件里,你想批量导出、想接入自己的Python脚本,直接操作并不方便。pytdx这个库就是来解决这个问题的。它像一个翻译官,把通达信服务器的数据翻译成Python能看懂的数字,让你能在自己的代码里随意调用。

pytdx到底是什么,能帮你拿到什么

pytdx是一个开源项目,用Python写成。它的核心作用是模拟通达信的客户端协议,直接跟通达信的行情服务器通信。你不需要打开通达信软件,也不需要登录账号,只要网络通畅,就能拉取数据。

它能拿到的数据分几类。历史K线数据,包括日线、周线、分钟线,股票和期货都支持。实时行情数据,也就是当前最新的价格、成交量、买卖盘口。还有财务数据,比如股本、每股收益这些基本面指标。对于做量化回测或者写简单监控脚本的人来说,这些已经够用了。

普通人怎么用pytdx把通达信数据拿到手

安装这一步没什么好怕的

打开你的命令行,输入一行命令就行:


pip install pytdx

如果网络慢,可以加个国内镜像源。装完之后,在Python里导入试试:


from pytdx.hq import TdxHq_API

api = TdxHq_API()

没有报错就说明安装成功了。

连接服务器是第一个关键动作

pytdx需要连接通达信的行情服务器。官方提供了一些公开的服务器地址,但这些地址有时会失效。比较稳妥的做法是维护一个服务器列表,挨个尝试连接。


from pytdx.hq import TdxHq_API

api = TdxHq_API()

# 常用的服务器地址,可以多准备几个

servers = [

    ('119.147.212.81', 7709),

    ('218.108.98.244', 7709),

    ('123.125.108.14', 7709),

]

connected = False

for ip, port in servers:

    if api.connect(ip, port):

        connected = True

        print(f'已连接到 {ip}:{port}')

        break

if not connected:

    print('所有服务器都连不上,检查网络或者换一批地址')

连接成功后,你后续所有操作都通过这个api对象进行。用完记得断开:api.disconnect()。

拉取股票历史K线

假设你想看浦发银行(代码600000)的日线数据。通达信里股票代码需要加上市场标识,上海市场是1,深圳市场是0。


# 获取600000从2024年1月1日到2024年6月30日的日线数据

# category参数:9代表日线,8代表周线,7代表月线

# start和count控制从第几个位置开始拿多少条

data = api.get_security_bars(9, 1, '600000', 0, 100)

for item in data:

    print(item)

返回的每一条数据包含开盘价、最高价、最低价、收盘价、成交量、成交额。你拿到之后可以直接存进CSV或者数据库,方便后面回测用。

期货数据怎么拿

期货的代码格式跟股票不一样。比如螺纹钢主力合约,在通达信里代码是RB000或者RB主连。市场标识也不同,期货在上海期货交易所是8,大连是5,郑州是6,中金所是9。


# 获取螺纹钢主力合约的日线数据

# 市场代码8代表上海期货交易所

# 品种代码需要根据实际调整

data = api.get_security_bars(9, 8, 'RB000', 0, 100)

for item in data:

    print(item)

期货数据要注意合约换月的问题。主力合约会切换,历史数据里不同时间段可能对应不同合约。如果你的策略需要连续价格,得自己做拼接处理。

实时行情怎么抓

历史数据用来回测,实时数据用来监控或者实盘信号。pytdx获取实时行情用get_security_quotes方法。


# 同时获取多只股票的实时行情

# 参数是列表,每个元素是(市场代码, 股票代码)

quotes = api.get_security_quotes([(1, '600000'), (0, '000001')])

for q in quotes:

    print(f"代码: {q['code']}, 最新价: {q['price']}, 成交量: {q['vol']}")

实时行情返回的数据字段很多,包括买卖五档价格和挂单量。做盘口分析或者高频监控会用到这些细节。

用的时候得留几个心眼

数据延迟这个问题绕不开。通达信免费服务器本身就不是为高频交易设计的,行情推送有几秒延迟很正常。你要是做日内高频,这个延迟可能致命。解决办法是找更稳定的数据源,或者用付费的level-2行情。

服务器稳定性也很重要。公开的服务器地址经常变化,今天能用明天可能就断了。最好写个自动检测程序,定期扫描可用服务器列表,把能连上的存下来。

通达信对单次请求的数据条数有限制,通常一次最多拿800条左右。想拿长周期数据需要分页,写个循环反复请求,把数据拼起来。

拿数据只是第一步

有了pytdx,你等于有了一条从通达信到Python的数据管道。股票期货的历史和实时数据都能进到你的程序里。但数据拿到手只是开始,怎么清洗、怎么对齐时间、怎么处理缺失值、怎么构造因子,这些才是真正决定策略好坏的部分。工具永远只是工具,想清楚你要用数据回答什么问题,比纠结用哪个库更重要。