3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在使用 QMT (迅投/国信) 量化平台编写和运行策略时,开发者经常会遇到两个基础但致命的问题:策略无法识别证券代码以及行情数据复权处理异常。本文将为您详细解答这两个问题的原因及解决方法。
如果在运行策略时,日志报错提示找不到或不识别证券代码,通常是由代码格式或大小写不规范引起的。
代码.市场)。例如,平安银行应写为 000001.SZ,浦发银行应写为 600000.SH。常见的市场简称包括:
SH:上交所SZ:深交所IF:中金所SF:上期所DF:大商所ZF:郑商所IF.IF 或 IF00.IF。
在进行历史回测或计算技术指标时,如果发现 K 线出现巨大的跳空缺口,或者计算出的收益率严重失真,通常是因为除权除息数据缺失导致的复权处理异常。
必须先在客户端补充除权数据。具体操作为:进入【数据管理】 -> 【补充数据】,在数据选项中勾选**“除权数据”**进行下载。
补充完成后,可以通过以下两种方式确认数据是否补充成功:
在行情界面输入对应的证券代码,将周期切换为日线。拖动底部滚动条至该股票历史的除权除息日,观察当天的 K 线底部时间轴上是否出现了一个红色的“S”标识。如果有,说明除权数据已就位。
在策略中,可以使用 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% 的基础报错。