🚀 AI 一键生成 qmt 策略代码
立即体验
👉 AI 生成代码 👈

QMT 平台组合交易报错分析与解决方案(附正确下单代码)

qmt | 发布时间: 2026/5/29
以下内容由 EasyQuant 生成。

问题描述

咨询组合交易问题

使用组合交易

# 按篮子权重下单
table=[
{'stock':'600000.SH','weight':0.4,'quantity':0,'optType':23}, # 40%
{'stock':'600028.SH','weight':0.6,'quantity':0,'optType':24}, # 60%
]
basket={'name':'basket2','stocks':table}
set_basket(basket)
# 按组合权重 总额10000元
money = 10000
passorder(35,2102,account,'basket2',5,1,money,'',2,'strReMark',C)

报错

解决方案

您好!针对您在 QMT 平台使用组合交易时遇到的报错问题,主要原因在于 opType 参数设置错误 以及 篮子(Basket)的创建方式不符合 QMT 原生 API 规范

以下是详细的错误分析与解决方案:

1. 错误原因分析

错误一:opType 参数值不合法

在您的代码中,passorder 的第一个参数 opType 设置为了 35。根据 QMT API 文档,35 并不是一个合法的组合交易操作类型。

QMT 支持的组合交易 opType 如下:

  • 25:组合买入(或沪港通、深港通的组合买入)
  • 26:组合卖出(或沪港通、深港通的组合卖出)
  • 40:期货组合开多
  • 43:期货组合开空
  • 46:期货组合平多,优先平今
  • 47:期货组合平多,优先平昨
  • 48:期货组合平空,优先平今
  • 49:期货组合平空,优先平昨

如果您是进行股票的组合买入,应该使用 25

错误二:set_basket 函数不存在

QMT 的原生 Python API 中并没有提供 set_basket 这个函数。如果您直接运行这段代码,Python 会抛出 NameError: name 'set_basket' is not defined 的错误。

在 QMT 中,组合(篮子)通常需要在 QMT 客户端界面的“组合交易”或“篮子管理”模块中提前手动创建并配置好权重。在代码中,您只需要通过篮子名称(如 'basket2')直接调用即可。

2. 正确的实现步骤

第一步:在客户端创建篮子

请先在 QMT 客户端的组合交易界面,创建一个名为 basket2 的篮子,并设置好成分股及其权重(例如:浦发银行 40%,中国石化 60%)。

第二步:使用正确的 passorder 参数下单

在策略代码中,直接引用该篮子名称进行下单。

正确的代码示例:

#coding:gbk

def init(ContextInfo):
    # 设置交易账号
    ContextInfo.set_account('您的资金账号')

def handlebar(ContextInfo):
    # 确保只在最新一根 K 线触发,避免历史 K 线重复下单
    if not ContextInfo.is_last_bar():
        return
        
    account = '您的资金账号'
    basket_name = 'basket2' # 必须是客户端中已经存在的篮子名称
    money = 10000           # 按组合权重,总额10000元
    
    # 参数解析:
    # 25: 组合买入
    # 2102: 组合、单账号、普通、按组合股票权重方式下单 (volume 单位为元)
    # account: 资金账号
    # basket_name: 篮子名称
    # 5: 最新价
    # -1: modelprice (组合下单时无效,填-1即可)
    # money: 下单金额
    # 'MyStrategy': 策略名称
    # 2: quickTrade (2表示不判断bar状态立即触发,建议实盘用1或0)
    # 'strReMark': 投资备注
    
    passorder(25, 2102, account, basket_name, 5, -1, money, 'MyStrategy', 2, 'strReMark', ContextInfo)
    
    print(f"已发送组合买入指令,篮子:{basket_name},金额:{money}元")

3. 总结与建议

  1. 检查 API 文档:组合交易的 opType 必须是 25 或 26,不能是 35。
  2. 篮子管理:请依赖 QMT 客户端的 UI 界面来管理篮子成分,不要试图在策略代码中动态创建篮子(除非您使用了某些未公开的扩展库,但标准 API 不支持)。
  3. quickTrade 参数:您使用了 2,这意味着只要代码执行到这里就会立即下单,包括在历史回测的 Bar 上。如果在实盘中,建议结合 ContextInfo.is_last_bar() 使用,或者将 quickTrade 设为 1