首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >通达信开源库pytdx使用例子

通达信开源库pytdx使用例子

作者头像
子晓聊技术
发布2026-04-23 16:28:27
发布2026-04-23 16:28:27
2680
举报
文章被收录于专栏:子晓AI量化子晓AI量化

上一篇文章写了 通达信板块成分股获取例子 , 有同学说pytdx 支持读取板块。

我之前看github上 pytdx没再维护,就忽略了,基本以用mootdx为主。 这篇文章写一写pytdx。

Pytdx 是一款纯Python语言开发的类似TradeX的行情数据接口的实现。

特点

  • 纯python实现,无须引入动态连接库.dll/.so文件
  • 支持python2.7+/3.5+, 以及全平台Windows/MacOS/Linux
  • 可以通过设置参数提供线程安全接口调用
  • 实现心跳包机制,可以在长时间没有交互的情况下保持不断线

安装步骤:

pip install pytdx

这里分为2个部分来写

1、获取线上行情

获取线上行情第一步是最优服务器, 我们可以先找到最佳IP,然后获取对应的行情数据。

代码语言:javascript
复制
from pytdx.hq import TdxHq_API
from pytdx.util.best_ip import select_best_ip
import pandas as pd
def auto_get_best_ip_and_data():
    """
    自动选择最优服务器并获取股票数据的完整示例
    """
    # 1. 自动选择最佳行情服务器
    print("正在自动测试最优服务器...")
    try:
        best_ip_info = select_best_ip()
        best_ip = best_ip_info['ip']
        best_port = best_ip_info['port']
        print(f"✅ 找到最优服务器: {best_ip}:{best_port}")
    except Exception as e:
        print(f"❌ 自动选择最优服务器时发生错误: {e}")
        return None
    # 2. 创建API对象
    api = TdxHq_API()
    # 3. 连接服务器并获取数据
    try:
        with api.connect(best_ip, best_port):  # 使用with语句确保连接被正确关闭
            print("✅ 服务器连接成功!")
            # 示例1: 获取多只股票的实时行情
            stock_codes = [(1, '600519'), (0, '000001')]  # 沪市贵州茅台和深市平安银行
            quotes = api.get_security_quotes(stock_codes)
            df_quotes = api.to_df(quotes)
            # 简单处理一下数据,只保留一些重要字段
            important_columns = ['code', 'name', 'price', 'last_close', 'open', 'high', 'low', 'vol', 'amount']
            # 确保这些字段在DataFrame中存在
            existing_columns = [col for col in important_columns if col in df_quotes.columns]
            df_quotes_display = df_quotes[existing_columns]
            # 计算涨跌幅
            if 'price' in df_quotes.columns and 'last_close' in df_quotes.columns:
                df_quotes_display['change_percent'] = (df_quotes['price'] / df_quotes['last_close'] - 1) * 100
                df_quotes_display['change_percent'] = df_quotes_display['change_percent'].round(2)
            print("\n📊 实时行情数据:")
            print(df_quotes_display)
            # 示例2: 获取贵州茅台的日K线数据
            k_lines = api.get_security_bars(9, 1, '600519', 0, 10)  # 9表示日K线,1表示沪市,获取10条数据
            df_k_lines = api.to_df(k_lines)
            if not df_k_lines.empty:
                # 选择需要显示的列
                k_line_columns = ['datetime', 'open', 'close', 'high', 'low', 'vol']
                existing_k_line_columns = [col for col in k_line_columns if col in df_k_lines.columns]
                df_k_lines_display = df_k_lines[existing_k_line_columns]
                print("\n📈 贵州茅台日K线数据:")
                print(df_k_lines_display)
            return df_quotes_display, df_k_lines_display
    except Exception as e:
        print(f"❌ 在连接服务器或获取数据时发生错误: {e}")
        return None, None
if __name__ == "__main__":
    auto_get_best_ip_and_data()

2、读取通达信本地文件, 比如读取日线、分钟线。 把路径换成自己的文件路径即可。 pytdx封装得不错, 之前自己不了解有这个功能,原生去实现了解析本地文件的功能。

代码语言:javascript
复制
from pytdx.reader import TdxDailyBarReader, TdxFileNotFoundException
reader = TdxDailyBarReader()
df = reader.get_df("D:/lwj/new_tdx/vipdoc/sz/lday/sz000001.day")

print(df)


from pytdx.reader import TdxLCMinBarReader, TdxFileNotFoundException

reader = TdxLCMinBarReader()
df = reader.get_df("D:/lwj/new_tdx/vipdoc/sz/minline/sz000001.lc1")
print(df)

更多文档细节可以直接看官方文档: https://pytdx-docs.readthedocs.io/zh-cn/latest/

如果我的分享对你投资有所帮助,不吝啬给个点赞关注呗。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 子晓聊技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 特点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档