跳转至内容

订单生命周期和市场事件

注意

以下信息适用于构建直接集成到 Hummingbot 客户端的 spotperp 连接器的开发者。有关使用 Gateway 开发 gateway 连接器的信息,请参见 构建网关连接器

交易所连接器跟踪 Hummingbot 中创建的所有订单的状态更新,并在订单的状态更新时为策略模块发出事件。在实现新交易所连接器时要小心,确保所有状态更新和发出的事件都符合 Hummingbot 定义的语义。

订单生命周期流程图

Figure 1: Order lifecycle flowchart

创建订单

当脚本或策略调用交易所连接器中的 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 提交订单之前执行必要的交易规则检查。

收到成功响应后,将发出 BuyOrderCreatedEventSellOrderCreatedEvent。否则,将发出 MarketOrderFailureEvent。请注意,尽管名称如此,MarketOrderFailureEvent 甚至对限价订单也会发出。

订单成交

一旦订单在交易所上生效,其他市场参与者可能会随时间填充订单。根据订单类型,即限价单或市价单,订单可能会立即成交或在另一个市场参与者完成交易后成交。

对于我们的订单上的每次成交,无论是部分成交还是全部成交,交易所连接器都必须发出 OrderFilledEvent,以通知策略模块订单的进展。

订单完成

一旦订单完全成交,交易所连接器必须发出 BuyOrderCompletedEventSellOrderCompletedEvent

交易所连接器随后将停止跟踪订单。

BuyOrderCompletedEventSellOrderCompletedEvent 应始终在发出 OrderFilledEvent 之后发生。

订单取消或过期

如果订单在完全成交之前被取消或过期,应发出 OrderCancelledEventOrderExpiredEvent

对于中心化交易所,在发出 OrderCancelledEventOrderExpiredEvent 后,订单跟踪应结束。

在去中心化交易所中 - 由于区块延迟,订单在取消甚至过期后仍可能成交 - 交易所连接器可以在之后的一定时间内继续跟踪订单。

订单失败

如果一个失败的订单因取消或过期以外的任何原因被拒绝,则必须发出 MarketOrderFailureEvent