问题描述
解决方法:需要注意市场简称/尾缀是否正确,另外期货还需要额外关注代码的字母部分大小写是否正确。
备注:
大小写的判断方法:在行情界面输入代码,看客户端界面如何显示的
各市场简称如下:
行情数据复权处理异常?
解决方法:需先补充除权数据,补充数据界面的数据选项选“除权数据”,补充完之后需再次确认补充成功,确认方法可有两种:1.行情界面确认:行情界面输入证券代码,周期选日线,底部滚动条拖动至除权除息日,在除权除息日当天的K线底部时间轴上会有红色“S”标识2.策略里用 ContextInfo.get_divid factors()函数可获取到指定证券代码的除权除息日和复权因子信息
解决方案
在使用 QMT (迅投/国信) 量化平台编写和运行策略时,开发者经常会遇到两个基础但致命的问题:策略无法识别证券代码以及行情数据复权处理异常。本文将为您详细解答这两个问题的原因及解决方法。
一、 策略里不识别证券代码是什么原因?
如果在运行策略时,日志报错提示找不到或不识别证券代码,通常是由代码格式或大小写不规范引起的。
解决方法与排查步骤:
- 检查市场简称/尾缀是否正确:
QMT 平台要求证券代码必须带有正确的市场后缀(格式为代码.市场)。例如,平安银行应写为000001.SZ,浦发银行应写为600000.SH。常见的市场简称包括:SH:上交所SZ:深交所IF:中金所SF:上期所DF:大商所ZF:郑商所
- 检查期货代码的大小写:
对于期货品种,除了尾缀外,还需要额外关注代码的字母部分大小写是否正确。例如,沪深300主力合约通常为IF.IF或IF00.IF。- 大小写的判断方法:在 QMT 客户端的行情界面直接输入代码,观察客户端界面是如何显示的,策略中的代码必须与客户端显示保持完全一致。
二、 行情数据复权处理异常怎么解决?
在进行历史回测或计算技术指标时,如果发现 K 线出现巨大的跳空缺口,或者计算出的收益率严重失真,通常是因为除权除息数据缺失导致的复权处理异常。
解决方法与排查步骤:
必须先在客户端补充除权数据。具体操作为:进入【数据管理】 -> 【补充数据】,在数据选项中勾选**“除权数据”**进行下载。
补充完成后,可以通过以下两种方式确认数据是否补充成功:
方法 1:通过行情界面视觉确认
在行情界面输入对应的证券代码,将周期切换为日线。拖动底部滚动条至该股票历史的除权除息日,观察当天的 K 线底部时间轴上是否出现了一个红色的“S”标识。如果有,说明除权数据已就位。
方法 2:通过 QMT Python API 代码确认
在策略中,可以使用 ContextInfo.get_divid_factors() 函数来获取指定证券代码的除权除息日和复权因子信息。如果能成功打印出字典数据,说明数据正常。
代码示例:
#encoding:gbk
def init(ContextInfo):
# 初始化时可设置股票池
ContextInfo.set_universe(['600000.SH'])
def handlebar(ContextInfo):
# 获取浦发银行的除权除息日和复权因子映射字典
divid_factors = ContextInfo.get_divid_factors('600000.SH')
# 打印输出复权因子信息,检查是否为空
print("600000.SH 复权因子信息:", divid_factors)
总结:在 QMT 平台开发策略前,养成良好的数据准备习惯(下载历史 K 线、除权数据、财务数据等)并严格遵守 代码.市场 的命名规范,可以帮您避开 90% 的基础报错。