问题描述
报错 RuntimeError: func:subscribeFormulaSync, error:{ "error" : { "params" : { "ErrorID" : 300000, "ErrorMsg" : "[xtquant]formula not exists: 单股模型示范" }, "status" : 1 } }
解决方案
在 QMT 或 xtquant 中调用公式/策略订阅函数时,遇到 RuntimeError: func:subscribeFormulaSync, error: ... [xtquant]formula not exists: 单股模型示范 的报错,通常是因为系统无法在 QMT 客户端中找到对应的策略模型。
🔍 原因分析
- 模型未创建:在 QMT 客户端的“策略开发”或“模型管理”中,确实没有名为“单股模型示范”的策略。
- 模型未编译:模型虽然已经新建,但没有点击“编译”进行保存,导致底层系统无法识别。
- 名称拼写错误:代码中调用的模型名称与 QMT 客户端中实际的模型名称不完全一致(例如多了一个空格、繁简体不同等)。
- 连接的客户端不正确:如果你运行的是独立的 xtquant 脚本,可能连接到了一个没有该模型的 QMT 客户端实例。
🛠️ 解决方案
请按照以下步骤进行排查和修复:
第一步:检查 QMT 客户端中的模型列表
- 打开你正在使用的 QMT 客户端。
- 进入 “策略开发” 界面。
- 在左侧的“模型管理”面板中,查找是否存在名为 “单股模型示范” 的 Python 模型。
第二步:新建或重命名模型
- 如果不存在:
- 在模型管理面板右键,选择“新建模型”,选择“Python模型”。
- 在弹出的【策略编辑器】中,将“基本信息”里的名称严格填写为
单股模型示范。 - 编写或粘贴你的策略代码(必须包含
init和handlebar函数)。 - 点击上方的 “编译” 按钮保存模型。
- 如果已存在:
- 检查名称是否有不可见的空格或拼写差异。
- 打开该模型,重新点击一次 “编译” 按钮,确保模型已成功保存到系统中。
第三步:检查代码调用
确保你在 Python 代码中调用 subscribeFormulaSync(或类似函数)时,传入的字符串与客户端中的模型名称完全一致:
# 确保名称完全一致,没有多余的空格
formula_name = '单股模型示范'
第四步:确认 xtquant 连接状态
如果你使用的是 xtquant 独立包,请确保 xtdata.connect() 连接的端口和路径,正是你刚刚创建了该模型的 QMT 客户端。如果连接到了其他未登录或未创建该模型的终端,依然会报找不到公式的错误。
完成以上步骤后,重新运行你的代码,该报错即可解决。