订单生命周期和市场事件
交易所连接器跟踪 Hummingbot 中创建的所有订单的状态更新,并在订单的状态更新时为策略模块发出事件。在实现新交易所连接器时要小心,确保所有状态更新和发出的事件都符合 Hummingbot 定义的语义。
订单生命周期流程图¶
创建订单¶
当脚本或策略调用交易所连接器中的 buy()
或 sell()
方法时,订单被创建。buy()
和 sell()
会立即返回一个客户端订单 ID,Hummingbot 使用该 ID 来跟踪订单状态。
它们会尽快安排订单提交到交易所,但在返回之前不会等待交易所的回复。
订单跟踪¶
当调用 _create_order()
时,开始订单跟踪。它从 buy()
和 sell()
函数内部调用。
交易所连接器应持续跟踪订单状态,并在任何状态更改时发出事件,直到订单完成、取消、过期或失败。
这是通过调用 Exchange
类中的 start_tracking_order()
方法完成的。start_tracking_order()
应在执行提交订单的 API 请求之前调用。
提交订单¶
在我们大多数内置的交易所连接器中,订单提交发生在 _create_order()
函数中 - 尽管对于某些去中心化交易所连接器可能有所不同。
_create_order()
方法负责在通过 REST API 提交订单之前执行必要的交易规则检查。
收到成功响应后,将发出 BuyOrderCreatedEvent
或 SellOrderCreatedEvent
。否则,将发出 MarketOrderFailureEvent
。请注意,尽管名称如此,MarketOrderFailureEvent
甚至对限价订单也会发出。
订单成交¶
一旦订单在交易所上生效,其他市场参与者可能会随时间填充订单。根据订单类型,即限价单或市价单,订单可能会立即成交或在另一个市场参与者完成交易后成交。
对于我们的订单上的每次成交,无论是部分成交还是全部成交,交易所连接器都必须发出 OrderFilledEvent
,以通知策略模块订单的进展。
订单完成¶
一旦订单完全成交,交易所连接器必须发出 BuyOrderCompletedEvent
或 SellOrderCompletedEvent
。
交易所连接器随后将停止跟踪订单。
BuyOrderCompletedEvent
或 SellOrderCompletedEvent
应始终在发出 OrderFilledEvent
之后发生。
订单取消或过期¶
如果订单在完全成交之前被取消或过期,应发出 OrderCancelledEvent
或 OrderExpiredEvent
。
对于中心化交易所,在发出 OrderCancelledEvent
或 OrderExpiredEvent
后,订单跟踪应结束。
在去中心化交易所中 - 由于区块延迟,订单在取消甚至过期后仍可能成交 - 交易所连接器可以在之后的一定时间内继续跟踪订单。
订单失败¶
如果一个失败的订单因取消或过期以外的任何原因被拒绝,则必须发出 MarketOrderFailureEvent
。