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

QMT 平台 MOC (尾盘成交) 算法下单应该如何设置参数与启动时间?(附 Python 源码)

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

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: QMT 智能算法:MOC (尾盘成交) 算法下单参数与实战应用

Question: QMT 中的 MOC 尾盘算法下单应该如何设置参数和启动时间?

解决方案

QMT 平台 MOC (尾盘成交) 算法下单指南与实战应用

在股票量化交易中,MOC(Market On Close / Mark On Close,尾盘成交算法) 是一种专门用于在收盘阶段(通常是集合竞价或尾盘连续竞价阶段)完成指定成交量的智能算法。通过 MOC 算法,投资者可以有效降低盘中价格波动带来的冲击成本,确保委托在尾盘尽量贴近收盘价撮合成交。

本文将详细介绍 QMT(迅投量化系统)中 MOC 算法的接口参数设置、时间控制逻辑及 Python 源码实现。


一、QMT 智能算法交易接口 API

在 QMT 中,智能算法交易主要通过 smart_algo_passorder 函数调用。

接口定义

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

MOC 核心参数说明

  1. smartAlgoType: 算法类型字符串,使用 MOC 时固定填写为 "MOC"
  2. startTime: 算法启动执行时间(格式 "HH:MM:SS")。MOC 属于尾盘算法,建议将启动时间设在尾盘阶段,如 "14:45:00""14:50:00"
  3. endTime: 算法截止时间(格式 "HH:MM:SS"),通常设置为收盘时间 "15:00:00"
  4. limitOverRate: 参与量比率(0-100),控制参与尾盘成交量的上限比率,防止对尾盘流动性造成过大冲击。
  5. minAmountPerOrder: 单笔最小委托金额(单位:元),通常设为 0
  6. opType: 操作类型(如 23 代表股票买入,24 代表股票卖出)。
  7. orderType: 下单方式(如 1101 单股单账号股数下单)。

二、MOC 算法启动时间与参数设置的最佳实践

  1. 执行时间选择
    • A 股市场在 14:57-15:00 为收盘集合竞价阶段。为了让 MOC 算法有足够的拆单和铺单时间,推荐将 startTime 设为 14:45:0014:50:00 之间endTime 设为 15:00:00
  2. 快速交易触发 (quickTrade)
    • 盘中实时推送触发时,设置 quickTrade=1quickTrade=2,可立即向柜台/算法服务发送 MOC 任务,无需等待 K 线走完。

三、Python 实战代码示例

以下为一个标准的 QMT 策略,演示如何在尾盘自动调用 MOC 算法进行下单:

#coding:gbk
import time

def init(ContextInfo):
    # 设定交易资金账号
    ContextInfo.account = "6000000001"
    ContextInfo.set_account(ContextInfo.account)
    # 设置股票池
    ContextInfo.stock = "600000.SH"
    ContextInfo.set_universe([ContextInfo.stock])

def handlebar(ContextInfo):
    # 只在最后一根 K 线/实时推送阶段判断
    if not ContextInfo.is_last_bar():
        return
    
    # 获取最新行情时间
    timetag = ContextInfo.get_tick_timetag()
    current_time = timetag_to_datetime(timetag, '%H%M%S')
    
    # 示例条件:当时间达到 14:45:00 后触发 MOC 买入
    if "144500" <= current_time <= "145500":
        opType = 23             # 23: 股票买入
        orderType = 1101        # 1101: 单股/单账号/普通/股数下单
        accountID = ContextInfo.account
        orderCode = ContextInfo.stock
        prType = 5              # 5: 最新价
        price = -1              # 非指定价可传 -1
        volume = 10000          # 买入 10000 股
        strategyName = "MOC_Strategy"
        quickTrade = 1          # 1: 立即下单
        userOrderId = "MOC_Order_01"
        smartAlgoType = "MOC"   # 指定 MOC 尾盘算法
        limitOverRate = 10      # 限制最高量比为 10%
        minAmountPerOrder = 0   # 最小单笔金额
        startTime = "14:45:00"  # MOC 启动时间
        endTime = "15:00:00"    # MOC 截止时间
        
        print(f"触发 MOC 尾盘算法买入: {orderCode}, 数量: {volume}")
        
        # 调用智能算法接口
        smart_algo_passorder(
            opType, orderType, accountID, orderCode, prType, price, volume,
            strategyName, quickTrade, userOrderId, smartAlgoType,
            limitOverRate, minAmountPerOrder, 1, startTime, endTime, ContextInfo
        )

四、总结与注意事项

  1. 柜台/服务端支持:使用 smart_algo_passorder 执行 MOC 算法前,请确认所使用的券商柜台及 QMT 交易端已开通对应的智能算法交易权限。
  2. 撤单与任务管理:MOC 任务生成后,可通过 get_trade_detail_data(accountID, strAccountType, 'TASK') 查询任务状态,并使用 cancel_taskpause_task 进行任务调控。