量化QMT之如何开通QMT以及 教你用通达信本地文件一键解析板块成分股
发布时间:8小时前阅读:51
各位做量化交易的朋友,相信不少人在使用 QMT 系统时都遇到过一个头疼的问题:内置的板块成分股数据不全,尤其是一些热门的细分行业、概念板块,经常缺胳膊少腿。这不仅会导致策略回测结果失真,更可能在实盘交易中错过机会甚至造成亏损。
今天,作为国金证券的量化交易服务经理,我就给大家分享一个亲测有效的解决方案 —— 直接从通达信本地数据文件中提取完整的板块成分股,数据准确、更新及时,还能无缝对接国金 QMT 极速交易系统,彻底解决板块数据获取难题。
一、通达信板块数据文件在哪里?
通达信会把所有板块信息和成分股数据保存在本地的一个二进制文件中,文件名是infoharbor_block.dat。这个文件会随着你每次打开通达信自动更新,保证数据的时效性。
- 默认安装路径:
D:\new_tdx\T0002\hq_cache\infoharbor_block.dat - 查找方法:如果你的通达信安装在其他位置,可以右键点击桌面通达信图标→属性→打开文件所在位置,然后依次进入
T0002→hq_cache文件夹就能找到。
二、完整 Python 解析代码
下面是我整理好的完整可运行代码,只需要修改文件路径为你自己的通达信路径,就能一键解析出所有板块及其成分股。代码添加了详细注释,新手也能轻松上手。
import struct
import os
def parse_tdx_block(file_path):
"""
解析通达信infoharbor_block.dat文件,获取所有板块及其成分股
:param file_path: infoharbor_block.dat文件的完整路径
:return: 字典,key为板块名称,value为成分股代码列表
"""
block_data = {}
if not os.path.exists(file_path):
print(f"文件不存在:{file_path}")
return block_data
with open(file_path, 'rb') as f:
# 读取文件头,获取板块总数
header = f.read(4)
block_count = struct.unpack('I', header)[0]
print(f"共找到 {block_count} 个板块")
# 跳过文件头剩余部分
f.seek(260)
for _ in range(block_count):
# 读取板块基本信息
block_info = f.read(284)
# 板块代码
block_code = struct.unpack('6s', block_info[0:6])[0].decode('gbk', errors='ignore').strip('\x00')
# 板块名称
block_name = struct.unpack('40s', block_info[6:46])[0].decode('gbk', errors='ignore').strip('\x00')
# 成分股数量
stock_count = struct.unpack('I', block_info[280:284])[0]
# 读取成分股代码
stocks = []
for __ in range(stock_count):
stock_code = struct.unpack('6s', f.read(6))[0].decode('gbk', errors='ignore').strip('\x00')
# 沪市股票代码加SH,深市加SZ
if stock_code.startswith('6'):
stocks.append(f"{stock_code}.SH")
elif stock_code.startswith(('0', '3')):
stocks.append(f"{stock_code}.SZ")
block_data[block_name] = stocks
# 跳过每个板块末尾的填充字节
f.seek(2, os.SEEK_CUR)
return block_data
if __name__ == "__main__":
# 请修改为你自己的通达信infoharbor_block.dat文件路径
tdx_block_file = r"D:\new_tdx\T0002\hq_cache\infoharbor_block.dat"
all_blocks = parse_tdx_block(tdx_block_file)
# 打印示例:查看"人工智能"板块的成分股
if "人工智能" in all_blocks:
print("\n人工智能板块成分股:")
print(all_blocks["人工智能"])
# 保存所有板块数据到文件
with open("通达信所有板块成分股.txt", "w", encoding="utf-8") as f:
for block_name, stocks in all_blocks.items():
f.write(f"{block_name}:{','.join(stocks)}\n")
print("\n所有板块成分股已保存到 通达信所有板块成分股.txt")
三、如何对接国金 QMT 系统
解析得到板块成分股列表后,我们可以直接在 QMT 的 Python 环境中调用这些数据,实现自动选股、调仓等功能。以下是一个简单的对接示例:
# 在QMT的Python环境中运行
from xtquant import xtdata
from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback
# 调用上面的解析函数获取板块成分股
tdx_block_file = r"D:\new_tdx\T0002\hq_cache\infoharbor_block.dat"
all_blocks = parse_tdx_block(tdx_block_file)
# 获取"半导体"板块成分股
semiconductor_stocks = all_blocks.get("半导体", [])
# 订阅行情
for stock in semiconductor_stocks:
xtdata.subscribe_quote(stock, period='1d')
# 实现你的交易策略
class MyCallback(XtQuantTraderCallback):
def on_disconnected(self):
print("连接断开")
def on_account_status(self, status):
print(f"账户状态:{status}")
# 启动交易
if __name__ == "__main__":
xt_trader = XtQuantTrader(r"D:\国金证券QMT\userdata_mini", session_id=123456)
xt_trader.register_callback(MyCallback())
xt_trader.start()
connect_result = xt_trader.connect()
if connect_result == 0:
print("连接成功")
# 在这里执行你的交易逻辑
else:
print("连接失败")
四、国金证券 QMT 专属服务
如果你还没有开通国金证券 QMT 极速交易系统,现在联系我即可享受量化交易者专属福利:
✅ 超低交易佣金:量化交易专属费率,量大更优惠
✅ 极速交易通道:免费开通极速柜台,订单延迟低至微秒级
✅ 一对一技术支持:专属量化经理全程服务,解决代码编写、策略调试等问题
✅ 海量学习资源:提供完整的 QMT 教程、策略模板和量化交流群
国金证券 QMT 系统支持 Python、C++ 等多种编程语言,内置丰富的行情和交易接口,支持全市场品种交易,是专业量化交易者的首选工具。
风险提示:量化交易存在较高风险,过往业绩不代表未来表现。本文提供的代码仅供学习交流使用,不构成任何投资建议。投资者应根据自身风险承受能力谨慎决策,自行承担投资风险。
免责声明:本文内容仅代表个人观点,与国金证券无关。国金证券不对因使用本文内容所导致的任何损失承担责任。
温馨提示:投资有风险,选择需谨慎。
通达信多账号一键下单怎么按?有了解的吗
-
国常会力挺“六张网”,利好哪些板块?普通人如何稳健布局?
2026-05-18 15:52
-
REITs打新: 风电项目 ⌈中核新能⌋ 今日发售!点击领取认购操作指南~
2026-05-18 15:52
-
华泰AI涨乐APP超实用提示词分享,直接复制使用~
2026-05-18 15:52


问一问

+微信
分享该文章
