3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化交易中,大单直接申报容易对盘口造成冲击,产生较高的滑点成本。QMT 平台提供了强大的智能算法交易接口 smart_algo_passorder,支持 TWAP(时间加权平均价格)、VWAP(成交量加权平均价格) 等多种算法,帮助投资者实现大单的自动拆分与平滑执行。
smart_algo_passorder 的完整调用格式如下:
smart_algo_passorder(opType, orderType, accountid, orderCode, prType, modelprice, volume, strategyName, quickTrade, userOrderId, smartAlgoType, limitOverRate, minAmountPerOrder, targetPriceLevel, startTime, endTime, ContextInfo)
23 代表股票买入,24 代表股票卖出。1101 代表单股、单账号、普通、股/手方式下单。'000001.SZ'。5 代表最新价,11 代表指定价(模型价)。prType 为 5(最新价),此项填 -1 即可。1 代表立即触发下单。'TWAP'、'VWAP' 等。0-100,控制算法参与市场成交的比例。0。0。'HH:MM:SS',如 '10:00:00'。'HH:MM:SS',如 '10:30:00'。以下是一个完整的 QMT 策略示例。该策略在盘中触发条件后,调用 smart_algo_passorder 启动 TWAP 算法,在 10:00:00 至 10:30:00 这半小时内均匀分批买入 50,000 股平安银行(000001.SZ)。
#coding:gbk
import time
def init(ContextInfo):
# 设定交易账号
ContextInfo.accid = '6000000105'
ContextInfo.set_account(ContextInfo.accid)
ContextInfo.stock = '000001.SZ'
ContextInfo.has_ordered = False # 避免重复触发
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
return
# 获取当前时间
ticktimetag = ContextInfo.get_tick_timetag()
current_time = timetag_to_datetime(ticktimetag, '%H%M%S')
# 设定在 10:00:00 之后触发算法拆单任务
if current_time >= '100000' and not ContextInfo.has_ordered:
print("触发 TWAP 智能算法交易任务...")
# 调用智能算法交易接口
smart_algo_passorder(
23, # opType: 股票买入
1101, # orderType: 单股单账号股数下单
ContextInfo.accid, # 资金账号
ContextInfo.stock, # 股票代码
5, # prType: 最新价
-1, # modelprice: 最新价时填 -1
50000, # volume: 总买入 50000 股
"TWAP_30Min", # strategyName: 策略名
1, # quickTrade: 立即触发
"remark_twap", # userOrderId: 投资备注
"TWAP", # smartAlgoType: 使用 TWAP 算法
20, # limitOverRate: 量比 20%
0, # minAmountPerOrder: 最小委托金额 0
0, # targetPriceLevel: 目标价格级别 0
'10:00:00', # startTime: 算法开始时间
'10:30:00', # endTime: 算法截止时间(半小时后)
ContextInfo
)
ContextInfo.has_ordered = True
print("TWAP 拆单任务已成功下发至服务器,执行时间:10:00:00 - 10:30:00")
startTime 和 endTime 必须在交易时间内。如果下发任务时已经超过了 startTime,算法会自动从当前时间开始执行,直至 endTime 结束。handlebar 中使用全局变量(如 ContextInfo.has_ordered)进行状态标记,防止每个 tick 到来时重复提交相同的算法任务。