跳至内容

订单生命周期与市场事件

注意

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

交易所连接器会跟踪 Hummingbot 中创建的所有订单的状态更新,并在订单状态发生变化时向策略模块发出事件。在实现新的交易所连接器时,请务必确保所有状态更新和发出的事件都符合 Hummingbot 定义的语义。

订单生命周期流程图

Figure 1: Order lifecycle flowchart

创建订单

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

收到成功响应后,将触发 BuyOrderCreatedEventSellOrderCreatedEvent 事件;否则将触发 MarketOrderFailureEvent 事件。请注意,尽管名称如此,即使是限价单失败也会触发 MarketOrderFailureEvent

订单成交中

一旦订单在交易所上线,其他市场参与者可能会随时间逐步成交该订单。根据订单类型(限价单或市价单),订单可能立即成交,也可能在其他市场参与者完成匹配后成交。

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

订单完成

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

之后,交易所连接器将停止对该订单的跟踪。

BuyOrderCompletedEventSellOrderCompletedEvent 必须在 OrderFilledEvent 触发之后才可发出。

订单取消或过期

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

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

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

订单失败

如果一个订单因除取消或过期之外的任何原因被拒绝,则必须触发 MarketOrderFailureEvent