问题描述
为什么call_formula('单股模型示范',600004,'1d',start_time="",end_time="",count=-1,dividend_type="none",extend_param={})
报错 RuntimeError: func:subscribeFormulaSync, error:{ "error" : { "params" : { "ErrorID" : 300000, "ErrorMsg" : "[xtquant]formula not exists: 单股模型示范" }, "status" : 1 } }
解决方案
这个报错信息 [xtquant]formula not exists: 单股模型示范 非常明确,意思是 xtquant/QMT 后端找不到名为“单股模型示范”的公式(模型)。
在 QMT 或 xtquant 中使用 call_formula 函数时,调用的模型必须是已经在 QMT 客户端本地存在并编译通过的策略模型。出现该报错通常由以下几个原因导致,请按照以下步骤进行排查和解决:
1. 模型未在 QMT 客户端中创建或未编译
call_formula 无法直接调用一个不存在的纯文本名字,它需要 QMT 客户端的策略库中有这个模型。
- 解决办法:打开您的 QMT 客户端,进入【策略开发】或【模型管理】界面,检查左侧的模型列表中是否存在名为
单股模型示范的模型。如果没有,请新建一个 Python 模型,命名为单股模型示范,编写好代码后,务必点击“编译”按钮进行保存和编译。
2. 模型名称拼写错误或包含不可见字符
代码中传入的字符串必须与 QMT 客户端中显示的模型名称完全一致。
- 解决办法:
- 检查是否有错别字(例如“示范”写成了“示范”)。
- 检查字符串前后是否多加了空格,例如
'单股模型示范 '。 - 检查中英文标点符号是否混用。
3. 股票代码格式不规范
虽然报错主要指向 formula,但注意您传入的股票代码是 600004(整数)。在 QMT API 中,标准的股票代码格式通常是带市场后缀的字符串,例如 '600004.SH'。
- 解决办法:建议将参数修改为标准字符串格式:
call_formula('单股模型示范', '600004.SH', '1d', start_time="", end_time="", count=-1, dividend_type="none", extend_param={})
4. QMT 客户端未启动或 xtquant 连接的路径不正确
xtquant 是通过与本地运行的 QMT 客户端(或独立交易端)进行通信来获取模型和数据的。如果 QMT 客户端未启动,或者 xtquant.xtdata 初始化时指定的 QMT 路径不正确,它将无法读取到您的自定义模型。
- 解决办法:
- 确保 QMT 客户端已经登录并处于运行状态。
- 确保在调用
call_formula之前,已经正确调用了数据初始化接口(如xtdata.connect()),并且连接的端口/路径与您实际打开的 QMT 客户端一致。
总结排查清单
- 打开 QMT 客户端 -> 策略编辑器 -> 确认
单股模型示范存在。 - 打开该模型 -> 点击 编译 -> 确认下方日志输出“编译成功”。
- 检查 Python 脚本中的模型名称字符串是否完全匹配。
- 将股票代码
600004改为'600004.SH'。 - 确保 QMT 客户端正在运行,且 xtquant 已成功连接。