本页为简体中文译文。如有歧义,请以英文原文为准。 阅读英文版 →
跳转到主要内容

自成交防护 (STP)

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

概述​

当一笔新进入的(Taker)订单将与同一钱包挂出的(Maker)订单撮合时,引擎会同时撤销这两笔订单,而不是让它们成交。这可以防止对敲交易,并避免做市商意外与自己的报价交叉成交。

STP 始终处于启用状态。没有任何配置项,不可选择退出,也没有其他可选模式。

行为​

策略:双边撤单​

检测到自成交时:

  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 模式吗(例如撤销最新订单或递减)? 不能。Hypercall 仅使用双边撤单模式。

STP 是否适用于永续合约订单? 不适用。Hypercall 的 STP 适用于在 Hypercall 订单簿上撮合的订单:期权订单和组合订单。永续合约订单在 Hyperliquid 的订单簿上撮合,适用 Hyperliquid 自身的自成交规则。

STP 是否适用于组合订单? 适用。在组合或隐含路径会让账户与自身成交之前,撮合即会停止,挂单中的 Maker 订单会被撤销。关于全部成交或全部不成交的情况(FOK 和原子替换),请参阅实验性组合 API。

STP 是否适用于 RFQ 交易? 适用。如果 Taker 与某个报价方使用同一钱包,该报价将被拒绝。

我是做市商,同时进行双边报价。我的报价会互相撤销吗? 只有当新进入的订单会导致它们交叉成交时才会。在订单簿两侧以不同价格挂出的订单可以正常共存。STP 仅在撮合时触发。