自我交易预防 (Self Trade Prevention - STP) 常见问题
免责声明:
- 此处使用的佣金和价格是虚构的,并不反映实际交易所的设置。
什么是 Self Trade Prevention - STP?
自我交易预防是指阻止订单与来自同一账户或者同一 tradeGroupId 账户的订单交易。
什么是自我交易(self-trade)?
在以下任一情况下都可能发生自我交易:
- 属于同一账户的订单之间交易。
- 属于相同
tradeGroupId的账户的订单之间交易。
STP 触发时会发生什么?
如果订单会触发自我交易,系统将执行五种可能的模式:
NONE - 此模式使订单免于自我交易预防。
EXPIRE_TAKER - 此模式通过立即使吃单者(taker)的剩余数量过期来预防交易。
EXPIRE_MAKER - 此模式通过立即使潜在挂单者(maker)的剩余数量过期来预防交易。
EXPIRE_BOTH - 此模式通过立即同时使吃单和挂单者的剩余数量过期来预防交易。
DECREMENT - 此模式通过阻止匹配的数量来增加两种订单的 prevented quantity。这将使可用数量较少的订单过期, 如果两个订单的可用数量相等,那么两个订单都将过期。
TRANSFER - 如果订单来自同一账户,则行为与 DECREMENT 相同。
如果订单来自不同账户且具有相同的 tradeGroupId,则除了 DECREMENT 的行为外,最后被阻止的数量 及其名义价值将在两个账户之间转移。
STP 行为通常仅由吃单的 STP 模式决定。例外情况是,只有当挂单和吃单都指定 STP 模式为 TRANSFER 时,才会发生 STP TRANSFER。如果吃单指定 STP 模式为 TRANSFER,但挂单指定了不同的 STP 模式,则 STP 行为为 DECREMENT。
总结如下:
| 吃单 STP 模式 | 挂单 STP 模式 | 实际生效的 STP 模式 |
|---|---|---|
TRANSFER | TRANSFER | TRANSFER |
TRANSFER | EXPIRE_MAKER、EXPIRE_TAKER、EXPIRE_BOTH、NONE、DECREMENT | DECREMENT |
EXPIRE_MAKER、EXPIRE_TAKER、EXPIRE_BOTH、NONE、DECREMENT | 任意 STP 模式 | 吃单的 STP 模式 |
什么是交易组 Id(Trade Group Id)?
属于同一 tradeGroupId 的账户被视为同一交易组。相同交易组成员提交的订单有 STP 资格。
每个账户可以从 GET /api/v3/account(REST API)或 account.status(WebSocket API)确认账户是否属于同一个 tradeGroupId。
tradeGroupId 也存在 GET /api/v3/preventedMatches(REST API)或 myPreventedMatches(WebSocket API)的响应中。
如果该值为 -1,这表示账户未设置 tradeGroupId,因此 STP 只能发生在同一账户的订单之间。