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

QMT 平台如何配置 smart_algo_passorder 参数实现高效 TWAP/VWAP 算法拆单?

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

问题描述

qmt 智能算法交易:smart_algo_passorder 实现高效 TWAP/VWAP 拆单
如何配置 qmt 的 smart_algo_passorder 参数以实现高效率的 TWAP 或 VWAP 拆单?

解决方案

QMT 智能算法交易:smart_algo_passorder 实现高效 TWAP/VWAP 拆单

在进行大额订单交易时,为了减少对市场的冲击成本(Market Impact)并隐藏交易意图,量化交易员通常会采用**算法交易(Algorithms Trading)**进行拆单。QMT 平台提供了强大的智能算法交易接口 smart_algo_passorder,支持 TWAP(时间加权平均价格)VWAP(成交量加权平均价格) 等主流算法。

本文将详细解析 smart_algo_passorder 的参数配置,并给出高效拆单的 Python 代码示例。


1. smart_algo_passorder 函数原型

QMT 中智能算法交易的调用格式如下:

smart_algo_passorder(opType, orderType, accountid, orderCode, prType, modelprice, volume, strageName, quickTrade, userid, smartAlgoType, limitOverRate, minAmountPerOrder, [targetPriceLevel], [startTime], [endTime], ContextInfo)

核心参数解析:

  • opType (操作类型):股票买入填 23,股票卖出填 24;信用账户买入填 33,卖出填 34
  • orderType (下单方式):常用 1101(单股、单账号、股数方式下单)。
  • prType (选价类型):常用 5(最新价)或 11(指定模型价)。
  • smartAlgoType (智能算法类型)
    • "TWAP":时间加权平均价格算法,将订单均匀地分布在设定的时间段内执行。
    • "VWAP":成交量加权平均价格算法,根据历史成交量分布预测,在成交量大的时段多投单,成交量小时段少投单。
  • limitOverRate (量比):数据范围 0-100。控制算法交易的成交量占市场即时成交量的最大比例,防止因下单过多推高股价。
  • minAmountPerOrder (最小委托金额):单笔委托的最小金额限制,范围 0-100000,默认 0
  • startTime / endTime (算法起止时间):格式为 "HH:MM:SS",如 "09:30:00""14:30:00"。合理设置起止时间可以避开开盘或收盘的剧烈波动期。

2. TWAP 与 VWAP 拆单实战代码

以下是在 QMT 中实现智能拆单的完整策略示例:

#coding:gbk
import time

def init(ContextInfo):
    # 设定交易账号
    ContextInfo.accid = '6000000105'
    ContextInfo.set_account(ContextInfo.accid)
    # 设定股票池
    ContextInfo.set_universe(['000001.SZ'])

def handlebar(ContextInfo):
    # 仅在最后一根Bar(最新Tick驱动)时执行算法交易,避免历史回测重复触发
    if not ContextInfo.is_last_bar():
        return
    
    stock_code = '000001.SZ'
    volume = 50000  # 计划交易 50,000 股
    
    # 示例 1:使用 TWAP 算法在 09:30 到 11:30 之间均匀拆单买入
    # limitOverRate 设为 20(即单笔不超过市场成交量的 20%)
    print("触发 TWAP 智能拆单任务...")
    smart_algo_passorder(
        23,                  # opType: 股票买入
        1101,                # orderType: 单股单账号股数下单
        ContextInfo.accid,   # 资金账号
        stock_code,          # 股票代码
        5,                   # prType: 最新价
        -1,                  # modelprice: 非指定价填 -1
        volume,              # 委托总量
        "MyTwapStrategy",    # 策略名
        1,                   # quickTrade: 1 表示立即触发
        "remark_twap",       # 投资备注
        "TWAP",              # 智能算法类型
        20,                  # limitOverRate: 量比 20%
        0,                   # minAmountPerOrder: 最小委托金额 0
        0,                   # targetPriceLevel: 目标价格(非冰山算法可填0)
        '09:30:00',          # 算法开始时间
        '11:30:00',          # 算法截止时间
        ContextInfo
    )
    
    # 示例 2:使用 VWAP 算法在 13:00 到 14:30 之间根据市场成交量分布拆单卖出
    # smart_algo_passorder(24, 1101, ContextInfo.accid, stock_code, 5, -1, volume, "MyVwapStrategy", 1, "remark_vwap", "VWAP", 15, 0, 0, '13:00:00', '14:30:00', ContextInfo)

3. 高效拆单配置建议

  1. 量比控制(limitOverRate):对于流动性较差的股票,建议将 limitOverRate 限制在 10% - 15% 以内;流动性极佳的宽基指数成分股可放宽至 20% - 30%
  2. 时间区间避让:尽量避开 09:30 - 09:45(开盘前15分钟市场波动剧烈,容易产生滑点)以及 14:57 - 15:00(尾盘集合竞价期),将算法时间段设在市场交易平稳的中盘时段。
  3. 配合任务管理函数:通过 get_trade_detail_data(accountID, 'STOCK', 'TASK') 可以实时监控拆单任务的执行状态,并使用 pause_task()cancel_task() 进行灵活干预。