社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

超快超稳还免费的A股行情神器!量化必备的Python库全攻略(附代码)

跟橙姐学代码 • 1 周前 • 134 次点击  

没有实时数据搞量化?试试这个飞快又免费的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)

注意市场代码:

  • 1:上海证券交易所(6开头)
  • 0:深证交易所(0/3开头)
  • 2:北京交易所(4/8/9开头)

返回数据是 OrderedDict 类型,可以直接取字段:

stock_data[0]['open']  # 当天开盘价

六、K 线数据也能轻松搞定

K 线是量化策略的基础,pytdx 同样支持:

k_data = api.get_security_bars(91'600519'010)
print(k_data)

其中 9 表示日K线0,10 代表从第0条开始取10条。

不同周期的K线参数如下:

类型
参数值
1分钟
7/8
5分钟
0
15分钟
1
30分钟
2
1小时
3
日线
4/9
周线
5
月线
6
季线
10
年线
11

还可以转换成 DataFrame:

df = api.to_df(k_data)
print(df)

七、分笔成交数据:盯盘利器

想获取更细的盘口数据?分笔成交数据了解一下:

transaction_data = api.get_transaction_data(1


    
'600519'010)
print(api.to_df(transaction_data))

输出数据示例:

time
price
vol
num
buyorsell
14:53
1520.92
9
8
0

八、别忘记断开连接!

用了API之后,最后记得手动断开连接,防止频繁访问被服务器拉黑:

api.disconnect()

九、写在最后:pytdx 值得拥有!

总结一下今天讲的内容:

✅ 如何安装 pytdx ✅ 如何自动选择最快行情服务器 ✅ 实时行情获取方法 ✅ 多周期K线获取技巧 ✅ 分笔成交数据查询 ✅ 完美断开连接防封锁

无论你是刚入门的小白,还是正在打磨策略的实战派,pytdx 都能大大提升你的效率,让数据获取不再成为量化路上的绊脚石!

如果你觉得有用,不妨:

👉 点个【赞】 👉 收藏这篇文章 👉 分享给身边的量化朋友!

你的支持,是我持续更新的动力!



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/182672
 
134 次点击