3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在股票量化交易中,MOC(Market On Close / Mark On Close,尾盘成交算法) 是一种专门用于在收盘阶段(通常是集合竞价或尾盘连续竞价阶段)完成指定成交量的智能算法。通过 MOC 算法,投资者可以有效降低盘中价格波动带来的冲击成本,确保委托在尾盘尽量贴近收盘价撮合成交。
本文将详细介绍 QMT(迅投量化系统)中 MOC 算法的接口参数设置、时间控制逻辑及 Python 源码实现。
在 QMT 中,智能算法交易主要通过 smart_algo_passorder 函数调用。
smart_algo_passorder(opType, orderType, accountid, orderCode, prType, modelprice, volume, strategyName, quickTrade, userOrderId, smartAlgoType, limitOverRate, minAmountPerOrder, [targetPriceLevel], startTime, endTime, ContextInfo)
smartAlgoType: 算法类型字符串,使用 MOC 时固定填写为 "MOC"。startTime: 算法启动执行时间(格式 "HH:MM:SS")。MOC 属于尾盘算法,建议将启动时间设在尾盘阶段,如 "14:45:00" 或 "14:50:00"。endTime: 算法截止时间(格式 "HH:MM:SS"),通常设置为收盘时间 "15:00:00"。limitOverRate: 参与量比率(0-100),控制参与尾盘成交量的上限比率,防止对尾盘流动性造成过大冲击。minAmountPerOrder: 单笔最小委托金额(单位:元),通常设为 0。opType: 操作类型(如 23 代表股票买入,24 代表股票卖出)。orderType: 下单方式(如 1101 单股单账号股数下单)。startTime 设为 14:45:00 至 14:50:00 之间,endTime 设为 15:00:00。quickTrade):
quickTrade=1 或 quickTrade=2,可立即向柜台/算法服务发送 MOC 任务,无需等待 K 线走完。以下为一个标准的 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
)
smart_algo_passorder 执行 MOC 算法前,请确认所使用的券商柜台及 QMT 交易端已开通对应的智能算法交易权限。get_trade_detail_data(accountID, strAccountType, 'TASK') 查询任务状态,并使用 cancel_task 或 pause_task 进行任务调控。