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