问题描述
板块错误:
解决方案
在QMT(迅投极速量化交易平台)及配套的 xtquant (xtdata) 库中,遇到 xtdata.download_sector_data() 或 xtdata.get_sector_info() 报错(如“板块错误”或获取不到数据),通常是因为本地客户端的板块数据未同步或板块名称/代码拼写不规范。
以下是解决该问题及在QMT中正确获取板块数据的完整指南:
一、 排查与解决 xtdata 板块错误
- 手动补充本地数据:
xtdata的数据高度依赖于QMT终端的本地数据。如果API调用报错,请先在QMT客户端中手动补充数据:- 打开QMT客户端,进入 【数据管理】 -> 【补充数据】。
- 勾选所需的市场、品种以及板块数据,点击下载补充。
- 检查板块名称格式:
确保传入的板块名称与QMT客户端左侧板块树中的名称完全一致(包括大小写和特殊字符)。
二、 使用 QMT 原生 API 获取板块数据(推荐)
如果您是在QMT内置的Python策略编辑器中编写策略,推荐直接使用 ContextInfo 对象提供的原生API,这些接口更加稳定且直接读取终端内存数据:
1. 获取指数成份股:ContextInfo.get_sector()
支持获取如沪深300(000300.SH)、中证500(000905.SH)等指数的成份股。
def handlebar(ContextInfo):
# 获取当前K线时间
index = ContextInfo.barpos
realtime = ContextInfo.get_bar_timetag(index)
# 获取沪深300最新成分股
hs300_stocks = ContextInfo.get_sector('000300.SH', realtime)
print("沪深300成分股:", hs300_stocks)
2. 获取客户端板块成份股:ContextInfo.get_stock_list_in_sector()
支持获取客户端左侧板块列表中任意的板块,包括自定义板块。
def handlebar(ContextInfo):
index = ContextInfo.barpos
realtime = ContextInfo.get_bar_timetag(index)
# 获取自定义板块或概念板块成分股
my_sector_stocks = ContextInfo.get_stock_list_in_sector('我的自选', realtime)
print("自选板块成分股:", my_sector_stocks)
3. 获取证监会行业成份股:ContextInfo.get_industry()
支持获取证监会(CSRC)行业分类下的成份股。
def handlebar(ContextInfo):
# 获取采矿业成分股
mining_stocks = ContextInfo.get_industry('CSRC采矿业')
print("采矿业成分股:", mining_stocks)
三、 总结
如果 xtdata 的板块接口持续报错,建议:
- 保持QMT客户端处于最新版本,并定期在【数据管理】中执行数据补充。
- 在盘中策略运行中,优先使用
ContextInfo.get_stock_list_in_sector()等内置方法,以确保策略的稳定性和执行效率。