QMT中的事件驱动编程:订单状态监控与自动撤单重发
发布时间:6小时前阅读:5

在量化交易中,订单可能会因为价格波动而未能成交。QMT提供事件驱动接口,可以监控订单状态,实现自动撤单重发,提高成交率。本文介绍如何利用on_order_status和on_order_trade回调构建智能订单管理模块。
首先,了解QMT的订单状态回调。on_order_status在订单状态发生变化时调用,状态包括:ORDER_STATUS_SUBMITTED(已提交)、ORDER_STATUS_FILLED(全部成交)、ORDER_STATUS_PARTIAL_FILLED(部分成交)、ORDER_STATUS_CANCELLED(已撤)、ORDER_STATUS_REJECTED(被拒)。on_order_trade在每笔成交(含部分成交)时调用。
实现自动撤单重发的逻辑:
1. 在下单时,将订单信息存入一个字典context.pending_orders,包含股票代码、方向、目标数量、下单时间等。
2. 在on_order_status中,如果订单状态为PARTIAL_FILLED或SUBMITTED,设置一个定时器(例如10秒后检查)。如果超时仍未成交,则调用cancel_order(order.order_id)撤单。
3. 撤单成功后,根据剩余未成交数量,重新以新的价格(如当前对手价)下单。注意防止无限循环,设置最多重试次数(如3次)。
代码框架示例:
`python
def init(context):
context.pending_orders = {}
context.retry_count = {}
def order_with_retry(context, stock, amount, price=None):
order_id = order(stock, amount, limit_price=price)
context.pending_orders[order_id] = {'stock': stock, 'amount': amount, 'time': context.now}
def on_order_status(context, order):
if order.order_id in context.pending_orders:
if order.status in [ORDER_STATUS_FILLED, ORDER_STATUS_CANCELLED, ORDER_STATUS_REJECTED]:
del context.pending_orders[order.order_id]
elif order.status == ORDER_STATUS_PARTIAL_FILLED:
设置超时撤单
pass # 具体实现使用 run_delay
def on_order_trade(context, trade):
pass # 记录成交细节
`
注意,频繁撤单可能被券商风控限制,不要设置过短的超时(建议10秒以上)。另外,重新下单的价格需要合理调整,可参考当前买一/卖一价。
事件驱动订单管理适合流动性较差的标的或大额订单。对于流动性好的ETF,通常不需要这么复杂。QMT的算法交易模块已经封装了类似功能,可以直接使用。
国金证券的QMT支持完整的事件回调,10万资金即可开通。量化社群中有现成的撤单重发模块代码,可参考。同时,两融全线上办理,信用账户的订单状态管理同样重要。掌握事件驱动编程,可以让你的量化策略在执行层面更加专业、稳健。
温馨提示:投资有风险,选择需谨慎。
-
国常会力挺“六张网”,利好哪些板块?普通人如何稳健布局?
2026-05-18 15:52
-
REITs打新: 风电项目 ⌈中核新能⌋ 今日发售!点击领取认购操作指南~
2026-05-18 15:52
-
华泰AI涨乐APP超实用提示词分享,直接复制使用~
2026-05-18 15:52


问一问

+微信
分享该文章
