本页由机器翻译。英文原文为权威版本。 阅读英文版
跳转到主要内容

自成交防护 (STP)

针对自成交的自动保护机制。

概述

当一个进入市场的(taker)订单将与来自同一钱包的挂单(maker)订单撮合时,撮合引擎会取消这两个订单,而不是让它们成交。这可以防止对敲交易(wash trading),并保护做市商免于意外与自己的报价成交。

STP 始终处于激活状态。没有任何配置选项、无法退出,也没有其他替代模式。

行为

策略:双向撤单(Cancel Both)

当检测到自成交时:

  1. Maker 订单被取消,原因为 "Self-trade prevention"
  2. Taker 订单被拒绝(如果之前没有任何成交)或被取消(如果已部分成交)

这两个订单之间不会产生任何成交。

钱包级别的匹配

STP 比较的是钱包地址,而不是代理密钥。如果您使用代理授权通过多个密钥签署订单,同一交易钱包下的所有订单彼此之间均受 STP 约束。

部分成交将被保留

如果 taker 订单在遇到自成交之前已与其他交易对手方成交,这些成交会被保留。

示例:订单簿中先有钱包 B 卖出的 5 张合约,然后是钱包 A 卖出的 5 张合约。钱包 A 提交一笔买入 10 张合约的订单:

步骤撮合对象结果
1钱包 B(5 张合约)成交:执行 5 张合约
2钱包 A(5 张合约)检测到自成交

结果

  • 钱包 A 与钱包 B 成交 5 张合约
  • 钱包 A 的 maker 订单(5 张合约)被取消
  • 钱包 A 的 taker 订单被取消,filled_size: 5

订单状态

场景Taker 状态原因
之前无成交Rejected"Self-trade prevention"
自成交前有部分成交Canceled"Self-trade prevention (partial fill kept)"

Maker 订单始终为 Canceled,原因为 "Self-trade prevention"

GTC 订单在触发自成交后不会挂单

如果 GTC taker 订单触发了 STP,其剩余数量不会被加入订单簿,即使该订单通常会挂单。该订单将被完全终止。

WebSocket 通知

taker 和 maker 的取消/拒绝通知均通过 order_updates 频道推送。reason 字段会指明原因是 STP。

监控

STP 事件会递增 ht_engine_self_trade_prevented_total Prometheus 计数器。

常见问题

我可以选择其他 STP 模式(例如取消最新订单或数量递减)吗? 不可以。Hypercall 仅使用双向撤单模式。

STP 适用于永续合约订单吗? 适用。STP 适用于撮合引擎上的所有订单类型,包括期权和永续合约。

STP 适用于 RFQ 交易吗? 适用。如果 taker 与报价提供方使用同一钱包,该报价将被拒绝。

我是双边报价的做市商。我的报价会相互取消吗? 只有当一个进入市场的订单导致它们交叉时才会。位于订单簿两侧、价格不同的挂单可以正常共存。STP 仅在撮合时触发。