3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
您好!针对您在 QMT 平台使用组合交易时遇到的报错问题,主要原因在于 opType 参数设置错误 以及 篮子(Basket)的创建方式不符合 QMT 原生 API 规范。
以下是详细的错误分析与解决方案:
opType 参数值不合法在您的代码中,passorder 的第一个参数 opType 设置为了 35。根据 QMT API 文档,35 并不是一个合法的组合交易操作类型。
QMT 支持的组合交易 opType 如下:
如果您是进行股票的组合买入,应该使用 25。
set_basket 函数不存在QMT 的原生 Python API 中并没有提供 set_basket 这个函数。如果您直接运行这段代码,Python 会抛出 NameError: name 'set_basket' is not defined 的错误。
在 QMT 中,组合(篮子)通常需要在 QMT 客户端界面的“组合交易”或“篮子管理”模块中提前手动创建并配置好权重。在代码中,您只需要通过篮子名称(如 'basket2')直接调用即可。
请先在 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}元")
opType 必须是 25 或 26,不能是 35。quickTrade 参数:您使用了 2,这意味着只要代码执行到这里就会立即下单,包括在历史回测的 Bar 上。如果在实盘中,建议结合 ContextInfo.is_last_bar() 使用,或者将 quickTrade 设为 1。