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

如何在 QMT 中使用 Python 实现冰山委托 (Iceberg) 算法交易?

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

问题描述

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

Title: qmt 算法交易:冰山委托 (Iceberg) 的 Python 实现与参数设置

Question: 如何使用 qmt API 发操大单的冰山委托?

解决方案

如何在 QMT 中使用 Python 实现冰山委托 (Iceberg) 算法交易?

在执行大单交易时,为了隐藏真实的交易意图并降低市场冲击成本(Impact Cost),量化投资者通常会选择冰山委托(Iceberg Algorithm)。QMT 平台提供了专门的智能算法交易接口 smart_algo_passorder,可以极其便捷地实现冰山委托。


1. 冰山委托 (Iceberg) 的核心原理

冰山委托将一个大额买单或卖单拆分为多个暴露在盘口的小额委托。只有当当前挂出的公开委托全部成交或被撤销后,系统才会继续自动挂出下一批指定数量的委托,就像浮在水面上的冰山角一样,大部分真实意图隐藏在水面之下。

在 QMT 中,通过 smart_algo_passorder 接口可以灵活设定冰山算法的目标价格层级参与量比以及最小委托金额等参数。


2. API 接口说明:smart_algo_passorder

执行冰山算法需使用 smart_algo_passorder 函数,关键参数说明如下:

smart_algo_passorder(
    opType, 
    orderType, 
    accountid, 
    orderCode, 
    prType, 
    modelprice, 
    volume, 
    smartAlgoType, 
    limitOverRate, 
    minAmountPerOrder, 
    targetPriceLevel, 
    ContextInfo
)

关键参数详解:

  • opType: 操作类型,股票买入填 23,股票卖出填 24;融资买入填 27,融券卖出填 28
  • orderType: 下单方式,如 1101(单股单账号按股数下单)。
  • prType: 选价类型,-1(默认/按面板)、5(最新价)、11(指定价/模型价)。
  • volume: 策略总委托数量(股数)。
  • smartAlgoType: 算法类型,冰山委托填 'ICEBERG'
  • limitOverRate: 量比限制(0-100),控制算法参与盘口成交量的最高比例。
  • minAmountPerOrder: 单笔最小委托金额(元)。
  • targetPriceLevel: 冰山算法目标价格层级(仅对冰山算法有效):
    • 1: 己方盘口1
    • 2: 己方盘口2
    • 6: 最新价
    • 7: 对方盘口

3. Python 策略源码示例

以下是在 QMT 中使用 Python 实现冰山委托买入的完整策略模板:

#encoding:gbk
import time

def init(ContextInfo):
    # 设定交易资金账号
    ContextInfo.account = '6000000105'
    ContextInfo.set_account(ContextInfo.account)
    
    # 设定股票池
    ContextInfo.stock = '000001.SZ'
    ContextInfo.set_universe([ContextInfo.stock])
    
    # 标记下单状态,防止重复触发
    ContextInfo.has_ordered = False

def handlebar(ContextInfo):
    # 仅在最后一根 Bar(实时盘中最新 tick)时触发
    if not ContextInfo.is_last_bar():
        return
        
    if not ContextInfo.has_ordered:
        account = ContextInfo.account
        stock = ContextInfo.stock
        
        # 冰山委托交易参数设定
        total_volume = 100000  # 计划买入总数量:10万股
        algo_type = "ICEBERG"  # 指定算法类型为冰山委托
        limit_over_rate = 15   # 市场量比限制:15%
        min_amount = 10000     # 单笔最小委托金额:10000 元
        price_level = 1        # 目标挂单价格层级:己方买一价 (己方盘口1)
        
        print(f"[冰山委托发出] 目标标的: {stock}, 计划总量: {total_volume} 股")
        
        # 发起智能算法交易:买入 000001.SZ,10万股,使用 ICEBERG 算法
        smart_algo_passorder(
            23,                  # opType: 股票买入
            1101,                # orderType: 单股/单账号/普通/股数
            account,             # 资金账号
            stock,               # 股票代码
            5,                   # prType: 最新价
            -1,                  # price: 模型价(非指定价填-1)
            total_volume,        # 委托总股数
            algo_type,           # 智能算法名称 ICEBERG
            limit_over_rate,     # 量比
            min_amount,          # 最小单笔委托金额
            price_level,         # 冰山目标价格层级
            ContextInfo
        )
        
        ContextInfo.has_ordered = True

4. 实盘运行注意事项

  1. 账号绑定:务必在 init() 方法中调用 ContextInfo.set_account() 绑定账号,否则实盘回调与算法任务无法正常建立链接。
  2. 执行模式:智能算法函数需要在实盘/模拟实盘环境下执行,回测模式下智能算法交易函数不产生实际撮合模拟效果。
  3. 任务管理:算法发起的冰山任务可以通过 get_trade_detail_data(account, 'STOCK', 'TASK') 查询任务运行状态,并可以通过 pause_task()cancel_task() 进行暂停与撤销。