3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在执行大单交易时,为了隐藏真实的交易意图并降低市场冲击成本(Impact Cost),量化投资者通常会选择冰山委托(Iceberg Algorithm)。QMT 平台提供了专门的智能算法交易接口 smart_algo_passorder,可以极其便捷地实现冰山委托。
冰山委托将一个大额买单或卖单拆分为多个暴露在盘口的小额委托。只有当当前挂出的公开委托全部成交或被撤销后,系统才会继续自动挂出下一批指定数量的委托,就像浮在水面上的冰山角一样,大部分真实意图隐藏在水面之下。
在 QMT 中,通过 smart_algo_passorder 接口可以灵活设定冰山算法的目标价格层级、参与量比以及最小委托金额等参数。
smart_algo_passorder执行冰山算法需使用 smart_algo_passorder 函数,关键参数说明如下:
smart_algo_passorder(
opType,
orderType,
accountid,
orderCode,
prType,
modelprice,
volume,
smartAlgoType,
limitOverRate,
minAmountPerOrder,
targetPriceLevel,
ContextInfo
)
23,股票卖出填 24;融资买入填 27,融券卖出填 28。1101(单股单账号按股数下单)。-1(默认/按面板)、5(最新价)、11(指定价/模型价)。'ICEBERG'。1: 己方盘口12: 己方盘口26: 最新价7: 对方盘口以下是在 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
init() 方法中调用 ContextInfo.set_account() 绑定账号,否则实盘回调与算法任务无法正常建立链接。get_trade_detail_data(account, 'STOCK', 'TASK') 查询任务运行状态,并可以通过 pause_task() 或 cancel_task() 进行暂停与撤销。