没有实时数据搞量化?试试这个飞快又免费的Python库!
你是不是也曾遇到这种尴尬局面:
🔍 想写个量化策略,数据接口东拼西凑?
💰 收费的接口贵得肉疼,免费的速度慢到令人发指?
💻 本来准备撸代码搞策略,结果大半天都浪费在爬数据上?
别慌!今天我们就来介绍一个“量化搬砖人”必备的神器——pytdx!
它不仅速度快、覆盖数据广,而且最关键的是:完全免费!
一、pytdx 到底是啥?
简单来说,pytdx
是一个使用 Python 语言开发的接口库,可以连接通达信的行情服务器获取股票数据,功能媲美收费接口,关键是开源且高效!
一句话总结:轻便、快速、不花钱!
二、安装 pytdx 有多简单?
直接一行命令搞定:
pip install pytdx
如果你发现下载缓慢,那就换个国内源试试,比如清华镜像:
pip install pytdx -i https://pypi.tuna.tsinghua.edu.cn/simple
三、连接行情服务器:你的数据之门
我们第一步要做的,就是和通达信的行情服务器“握个手”:
from pytdx.hq import TdxHq_API
api = TdxHq_API()
if api.connect('119.147.212.81', 7709):
print("连接成功!")
api.disconnect()
else:
print("连接失败!")
不过推荐更优雅的写法,用 with
自动管理连接:
from pytdx.hq import TdxHq_API
with TdxHq_API() as api:
if api.connect('119.147.212.81', 7709):
print("连接成功!")
但现实往往比理想骨感,很多朋友会卡在连接这一步,原因就是这个 IP 很可能已经失效了。
四、破解瓶颈:如何找到可用的行情服务器 IP
很多教程到这就断了,但我们不一样!
接下来教你两种方法,精准找到可用的服务器 IP,再也不担心连接失败!
✅ 方法一:用 pytdx 自带的 IP 优选工具
from pytdx.util.best_ip import select_best_ip
best_ip = select_best_ip()
print(f"最优服务器:IP={best_ip['ip']}, 端口={best_ip['port']}")
这段代码会自动测试并选出当前响应最快的服务器。
✅ 方法二:深度玩法——读取本地通达信软件的行情 IP
这个方法稍微高级一点,但也更精准。前提是你已经安装了通达信客户端。
import psutil
import subprocess
def get_tdx_pid():
for proc in psutil.process_iter(['pid', 'name', 'exe']):
try:
if proc.info['name'] and 'tdxw.exe' == proc.info['name'].lower():
return proc.pid
exe_path = proc.info['exe'] or ''
if 'new_tdx' in exe_path and 'tdxw.exe' in exe_path:
return proc.pid
except (psutil.NoSuchProcess, psutil.AccessDenied):
continue
return None
def find_ip_by_pid(pid, port):
cmd = f'netstat -ano | findstr "{pid}" | findstr "{port}"'
try:
result = subprocess.check_output(cmd, shell=True, text=True)
lines = [line.split() for line in result.strip().split('\n')]
return [{
'proto': parts[0],
'local': parts[1],
'remote': parts[2],
'state': parts[3],
'pid': parts[4]
} for parts in lines]
except subprocess.CalledProcessError:
return []
if __name__ == "__main__":
pid = get_tdx_pid()
ip_port = find_ip_by_pid(pid, 7709)
if len(ip_port):
for part in ip_port:
print("通达信行情服务器为:", part['remote'])
else:
print("未找到通达信行情服务器")
五、获取实时行情,只需三步!
连接好服务器之后,就可以来点硬核操作了,比如获取**贵州茅台(600519)**的实时数据:
stock_data = api.get_security_quotes(1, '600519')
print(stock_data)
注意市场代码:
返回数据是 OrderedDict
类型,可以直接取字段:
stock_data[0]['open'] # 当天开盘价
六、K 线数据也能轻松搞定
K 线是量化策略的基础,pytdx
同样支持:
k_data = api.get_security_bars(9, 1, '600519', 0, 10)
print(k_data)
其中 9
表示日K线,0,10
代表从第0条开始取10条。
不同周期的K线参数如下:
还可以转换成 DataFrame:
df = api.to_df(k_data)
print(df)
七、分笔成交数据:盯盘利器
想获取更细的盘口数据?分笔成交数据了解一下:
transaction_data = api.get_transaction_data(1
, '600519', 0, 10)
print(api.to_df(transaction_data))
输出数据示例:
八、别忘记断开连接!
用了API之后,最后记得手动断开连接,防止频繁访问被服务器拉黑:
api.disconnect()
九、写在最后:pytdx 值得拥有!
总结一下今天讲的内容:
✅ 如何安装 pytdx ✅ 如何自动选择最快行情服务器 ✅ 实时行情获取方法 ✅ 多周期K线获取技巧 ✅ 分笔成交数据查询 ✅ 完美断开连接防封锁
无论你是刚入门的小白,还是正在打磨策略的实战派,pytdx 都能大大提升你的效率,让数据获取不再成为量化路上的绊脚石!
如果你觉得有用,不妨:
👉 点个【赞】 👉 收藏这篇文章 👉 分享给身边的量化朋友!
你的支持,是我持续更新的动力!