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

QMT 平台如何配置 smart_algo_passorder?使用 TWAP 算法实现半小时均匀分批买入

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

问题描述

qmt 智能算法交易:smart_algo_passorder 定时拆单配置指南
QMT 的 smart_algo_passorder 怎么配置?如何使用 TWAP 算法在半小时内均匀分批买入?

解决方案

QMT 智能算法交易:smart_algo_passorder 定时拆单配置指南

在量化交易中,大单直接申报容易对盘口造成冲击,产生较高的滑点成本。QMT 平台提供了强大的智能算法交易接口 smart_algo_passorder,支持 TWAP(时间加权平均价格)VWAP(成交量加权平均价格) 等多种算法,帮助投资者实现大单的自动拆分与平滑执行。


1. smart_algo_passorder 接口定义与参数详解

smart_algo_passorder 的完整调用格式如下:

smart_algo_passorder(opType, orderType, accountid, orderCode, prType, modelprice, volume, strategyName, quickTrade, userOrderId, smartAlgoType, limitOverRate, minAmountPerOrder, targetPriceLevel, startTime, endTime, ContextInfo)

核心参数说明:

  • opType (操作类型)23 代表股票买入,24 代表股票卖出。
  • orderType (下单方式)1101 代表单股、单账号、普通、股/手方式下单。
  • accountid (资金账号):您的实盘或模拟资金账号。
  • orderCode (下单代码):如 '000001.SZ'
  • prType (选价类型)5 代表最新价,11 代表指定价(模型价)。
  • modelprice (下单价格):若 prType5(最新价),此项填 -1 即可。
  • volume (下单数量):总购买股数。
  • strategyName (策略名):自定义策略名称字符串。
  • quickTrade (快速交易)1 代表立即触发下单。
  • userOrderId (投资备注):自定义备注信息。
  • smartAlgoType (智能算法类型):可选 'TWAP''VWAP' 等。
  • limitOverRate (量比):数据范围 0-100,控制算法参与市场成交的比例。
  • minAmountPerOrder (最小委托金额):单笔最小委托金额,默认填 0
  • targetPriceLevel (目标价格):冰山算法使用,其他算法可缺省或填 0
  • startTime (算法开始时间):格式为 'HH:MM:SS',如 '10:00:00'
  • endTime (算法截止时间):格式为 'HH:MM:SS',如 '10:30:00'

2. TWAP 半小时均匀分批买入实战源码

以下是一个完整的 QMT 策略示例。该策略在盘中触发条件后,调用 smart_algo_passorder 启动 TWAP 算法,在 10:00:00 至 10:30:00 这半小时内均匀分批买入 50,000 股平安银行(000001.SZ)。

#coding:gbk
import time

def init(ContextInfo):
    # 设定交易账号
    ContextInfo.accid = '6000000105'
    ContextInfo.set_account(ContextInfo.accid)
    ContextInfo.stock = '000001.SZ'
    ContextInfo.has_ordered = False # 避免重复触发

def handlebar(ContextInfo):
    if not ContextInfo.is_last_bar():
        return
        
    # 获取当前时间
    ticktimetag = ContextInfo.get_tick_timetag()
    current_time = timetag_to_datetime(ticktimetag, '%H%M%S')
    
    # 设定在 10:00:00 之后触发算法拆单任务
    if current_time >= '100000' and not ContextInfo.has_ordered:
        print("触发 TWAP 智能算法交易任务...")
        
        # 调用智能算法交易接口
        smart_algo_passorder(
            23,                         # opType: 股票买入
            1101,                       # orderType: 单股单账号股数下单
            ContextInfo.accid,          # 资金账号
            ContextInfo.stock,          # 股票代码
            5,                          # prType: 最新价
            -1,                         # modelprice: 最新价时填 -1
            50000,                      # volume: 总买入 50000 股
            "TWAP_30Min",               # strategyName: 策略名
            1,                          # quickTrade: 立即触发
            "remark_twap",              # userOrderId: 投资备注
            "TWAP",                     # smartAlgoType: 使用 TWAP 算法
            20,                         # limitOverRate: 量比 20%
            0,                          # minAmountPerOrder: 最小委托金额 0
            0,                          # targetPriceLevel: 目标价格级别 0
            '10:00:00',                 # startTime: 算法开始时间
            '10:30:00',                 # endTime: 算法截止时间(半小时后)
            ContextInfo
        )
        
        ContextInfo.has_ordered = True
        print("TWAP 拆单任务已成功下发至服务器,执行时间:10:00:00 - 10:30:00")

3. 注意事项

  1. 实盘权限:智能算法交易(TWAP/VWAP)通常需要券商端开通相应的算法总线权限,模拟运行下可能无法产生真实委托,建议在实盘前与券商确认。
  2. 时间区间设置startTimeendTime 必须在交易时间内。如果下发任务时已经超过了 startTime,算法会自动从当前时间开始执行,直至 endTime 结束。
  3. 防重复触发:在 handlebar 中使用全局变量(如 ContextInfo.has_ordered)进行状态标记,防止每个 tick 到来时重复提交相同的算法任务。