3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
您好!调用 smart_algo_passorder 函数一直返回 -1,通常是因为参数传递错误导致的。根据您提供的代码,主要问题不是出在按可用资金比例下单(1123 是完全支持的),而是函数参数的格式和顺序不符合官方 API 规范。
混淆了 algo_passorder 和 smart_algo_passorder 的参数格式:
您在代码中定义了一个字典 algoParam 并将其作为参数传入。在 QMT 中,只有普通算法交易函数 algo_passorder 才接受字典类型(userOrderParam)来设置参数。而智能算法交易函数 smart_algo_passorder 必须通过明确的顺序位置参数(如 limitOverRate, minAmountPerOrder 等)来传递,不支持传入字典。
参数顺序和数量缺失:
根据 QMT 官方文档,smart_algo_passorder 的完整参数顺序如下:
smart_algo_passorder(opType, orderType, accountid, orderCode, prType, modelprice, volume, strageName, quickTrade, userid, smartAlgoType, limitOverRate, minAmountPerOrder, targetPriceLevel, startTime, endTime, ContextInfo)
您的代码中跳过了 limitOverRate、minAmountPerOrder 等参数,直接传入了时间字符串和字典,导致底层 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 了。