3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在执行大额委托时,直接大单挂单容易暴露交易意图并对盘口造成较大冲击。QMT 提供了 冰山委托 (ICEBERG) 算法,将大单拆分为多笔小单分批挂出,以实现隐蔽挂单、降低冲击成本的目的。
冰山委托是一种隐藏真实交易量的拆单算法。它仅在盘口展示极小一部分委托量(冰山一角),当该部分成交完毕后,算法会自动补充下一批小单挂单,直至总目标委托量全部完成。
在 QMT 中,调用冰山算法需使用 smart_algo_passorder 函数。其基本调用格式如下:
smart_algo_passorder(
opType,
orderType,
accountID,
orderCode,
prType,
price,
volume,
strategyName,
quickTrade,
userOrderId,
smartAlgoType,
limitOverRate,
minAmountPerOrder,
targetPriceLevel,
ContextInfo
)
| 参数名称 | 类型 | 说明 | 示例/取值 |
|---|---|---|---|
opType |
int | 操作类型 | 23(买入)、24(卖出) |
orderType |
int | 下单方式 | 1101(单股单账号按股/手) |
prType |
int | 选价类型 | 11(指定价/模型价)、5(最新价) |
price |
float | 下单价格 | prType=11 时填写具体限价 |
volume |
int | 总委托数量 | 欲执行的总股数(如 100000) |
smartAlgoType |
str | 算法类型 | 固定填 'ICEBERG' |
limitOverRate |
int | 量比限制 | 范围 0-100 |
minAmountPerOrder |
int | 单笔最小委托金额 | 单位:元,默认 0 |
targetPriceLevel |
int | 目标价格层级 | 1-己方盘口1,6-最新价,7-对方盘口 |
以下示例展示如何在行情触发时,使用 冰山算法 分批买入 50,000 股平安银行(000001.SZ)。
#encoding:gbk
import time
def init(ContextInfo):
ContextInfo.accID = '6000000105'
ContextInfo.set_account(ContextInfo.accID)
ContextInfo.set_universe(['000001.SZ'])
def handlebar(ContextInfo):
# 仅在最后一根 Bar 执行下单逻辑
if not ContextInfo.is_last_bar():
return
stock_code = '000001.SZ'
total_volume = 50000
limit_price = 12.50 # 买入限价
# 调用 smart_algo_passorder 执行冰山算法
# 目标价格层级 targetPriceLevel=1 (己方买一价悬挂/补充)
smart_algo_passorder(
23, # opType: 股票买入
1101, # orderType: 单股单账号股数下单
ContextInfo.accID, # accountID: 资金账号
stock_code, # orderCode: 股票代码
11, # prType: 指定价
limit_price, # price: 下单价格
total_volume, # volume: 买入总数量
'IcebergStrategy', # strategyName: 策略名称
1, # quickTrade: 立即下单
'remark_iceberg_01', # userOrderId: 备注信息
'ICEBERG', # smartAlgoType: 冰山算法
20, # limitOverRate: 参与量比20%
10000, # minAmountPerOrder: 每次挂单最小金额10000元
1, # targetPriceLevel: 己方盘口1
ContextInfo
)
print(f"已下发冰山委托买入任务:{stock_code}, 总量:{total_volume}, 限价:{limit_price}")
get_trade_detail_data(accountID, strAccountType, 'TASK') 查询任务运行状态,或通过 pause_task / cancel_task 对算法任务进行暂停与撤销。