上一篇文章写了 通达信板块成分股获取例子 , 有同学说pytdx 支持读取板块。
我之前看github上 pytdx没再维护,就忽略了,基本以用mootdx为主。 这篇文章写一写pytdx。
Pytdx 是一款纯Python语言开发的类似TradeX的行情数据接口的实现。
.dll/.so文件python2.7+/3.5+, 以及全平台Windows/MacOS/Linux线程安全接口调用心跳包机制,可以在长时间没有交互的情况下保持不断线安装步骤:
pip install pytdx
这里分为2个部分来写
1、获取线上行情
获取线上行情第一步是最优服务器, 我们可以先找到最佳IP,然后获取对应的行情数据。
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封装得不错, 之前自己不了解有这个功能,原生去实现了解析本地文件的功能。
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/
如果我的分享对你投资有所帮助,不吝啬给个点赞关注呗。