3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化交易中,理解同步下单与异步下单的机制对于编写高效、稳定的策略至关重要。需要首先说明的是,order_stock 和 order_stock_async 通常是 Ptrade 平台或某些特定封装库的 API 命名。在 QMT 原生 Python API 中,核心的下单函数是 passorder、order_lots 等。不过,同步与异步下单的底层逻辑是相通的,下面为您详细解答这两种模式的区别、适用场景以及回调问题。
order_stock)order_stock_async)同步下单适用场景:
异步下单适用场景:
如果您在使用某种异步下单接口时发现无法触发成交主推回调(如 on_stock_trade 或 QMT 中的 deal_callback),通常是由以下几个原因造成的:
未正确绑定资金账号
在 QMT 中,接收交易主推的前提是在 init 函数中显式绑定了资金账号。如果没有绑定,底层网关不知道该把哪个账号的推送发给当前策略。
def init(ContextInfo):
# 必须绑定账号才能接收 order_callback 和 deal_callback
ContextInfo.set_account('您的资金账号')
异步线程上下文丢失
异步下单通常由后台独立线程处理。如果封装的异步接口在发送订单时,没有正确携带当前策略的上下文标识(如 strategyName),当柜台返回成交信息时,平台无法将该成交信息路由回您当前的策略实例中,从而导致回调函数不触发。
API 接口本身的限制或 Bug
某些平台在早期设计异步接口时,可能仅将其作为一种“只发不收”的快捷通道(Fire-and-Forget),底层并未将异步生成的订单 ID 与主推事件队列进行关联。如果是这种情况,建议查阅对应平台的最新文档或联系技术支持。
回调函数命名或参数错误
在 QMT 平台中,标准的成交主推回调函数是 deal_callback,委托主推是 order_callback。请确保函数签名完全正确:
def deal_callback(ContextInfo, dealInfo):
print("收到成交主推:", dealInfo.m_strInstrumentID, dealInfo.m_nVolume)
在 QMT 平台中,推荐使用原生的 passorder 函数。配合 quickTrade 参数(设为 1 或 2)以及 deal_callback,可以实现非常高效的准异步交易体验,同时完美支持成交和委托的状态主推。