🚀 AI 一键生成 qmt 策略代码

QMT调用smart_algo_passorder函数一直返回-1怎么办?

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

问题描述

smart_algo_passorder函数问题

algoParam={
'm_dLimitOverRate': 25, # 量比 25%
'm_dMinAmountPerOrder':0, # 委托最小金额
'm_nStopTradeForOwnHiLow': 1, # 涨跌停控制
'm_strCmdRemark': '投资备注1' # 投资备注
}
smart_algo_passorder(
23,
1123,
C.Account,
code,
12,#11限价;12市价;
0,
0.3, # 委托数量:整数型,单位:%
strategy_name, # 策略名称
1, #新K走完立即下单
msg, #投资备注 ,不可缺省
'VWAP', # 11: 智能VWAP算法
#25, # 量比:25%
#5000, #智能算法最小委托金额,数据范围0-100000
#1,
"09:30:00", #智能算法开始时间
"14:30:00", #智能算法结束时间
#1, # 1:涨停不卖跌停不卖
algoParam,
C
)

在执行上面的算法交易函数的时候,总是反复提示订单为-1,请老师们帮我看看问题出在哪里?是不是不能按照可用资金比例下单?

解决方案

您好!调用 smart_algo_passorder 函数一直返回 -1,通常是因为参数传递错误导致的。根据您提供的代码,主要问题不是出在按可用资金比例下单(1123 是完全支持的),而是函数参数的格式和顺序不符合官方 API 规范

错误原因分析

  1. 混淆了 algo_passordersmart_algo_passorder 的参数格式
    您在代码中定义了一个字典 algoParam 并将其作为参数传入。在 QMT 中,只有普通算法交易函数 algo_passorder 才接受字典类型(userOrderParam)来设置参数。而智能算法交易函数 smart_algo_passorder 必须通过明确的顺序位置参数(如 limitOverRate, minAmountPerOrder 等)来传递,不支持传入字典

  2. 参数顺序和数量缺失
    根据 QMT 官方文档,smart_algo_passorder 的完整参数顺序如下:
    smart_algo_passorder(opType, orderType, accountid, orderCode, prType, modelprice, volume, strageName, quickTrade, userid, smartAlgoType, limitOverRate, minAmountPerOrder, targetPriceLevel, startTime, endTime, ContextInfo)
    您的代码中跳过了 limitOverRateminAmountPerOrder 等参数,直接传入了时间字符串和字典,导致底层 C++ 解析参数失败,从而直接返回 -1

正确的代码写法

如果您希望使用 VWAP 算法,量比为 25%,最小委托金额为 0,并且按可用资金的 30%1123 模式)下单,正确的代码应该如下:

# 假设在 handlebar(ContextInfo) 中调用

# 提取需要的变量
account = ContextInfo.accID # 或者您自定义的 C.Account
code = '000001.SZ' # 您的标的代码
strategy_name = 'MyStrategy'
msg = '投资备注1'

# 正确调用 smart_algo_passorder
smart_algo_passorder(
    23,               # opType: 23 表示股票买入
    1123,             # orderType: 1123 表示单股、单账号、可用资金、比例下单
    account,          # accountid: 资金账号
    code,             # orderCode: 股票代码
    12,               # prType: 12 表示涨跌停价(注意:智能算法通常建议用 11 模型价或 5 最新价,具体视算法而定)
    0,                # modelprice: 下单价格(prType为12时此参数无效,填0即可)
    0.3,              # volume: 比例 0.3 即 30%
    strategy_name,    # strageName: 策略名
    1,                # quickTrade: 1 表示立即触发下单
    msg,              # userid: 投资备注
    'VWAP',           # smartAlgoType: 智能算法类型
    25,               # limitOverRate: 量比 25%
    0,                # minAmountPerOrder: 最小委托金额 0
    0,                # targetPriceLevel: 目标价格(冰山算法有效,VWAP填0即可)
    '09:30:00',       # startTime: 算法开始时间
    '14:30:00',       # endTime: 算法结束时间
    ContextInfo       # ContextInfo 全局对象
)

关于 1123 比例下单的补充说明

1123(单股、单账号、可用、比例方式下单)是完全支持的。当 orderType 的最后一位是 3 时,volume 参数代表比例,取值范围是 [0 ~ 1]。您传入的 0.3 是合法的。只要您的账户中有足够的可用资金,且参数顺序严格按照上述格式传递,就不会再返回 -1 了。