自己取引防止 (STP)
自己取引に対する自動保護機能です。
概要
新たに入ってきた (テイカー) 注文が、同じウォレットの待機中の (メイカー) 注文と約定しようとした場合、エンジンは約定させずに両方の注文をキャンセルします。これにより仮装売買を防ぎ、マーケットメイカーが誤って自身のクオートと交差してしまうことを防ぎます。
STP は常に有効です。設定項目、オプトアウト、代替モードはありません。
動作
方式: 両方キャンセル
自己取引が検出された場合:
- メイカー注文は理由
"Self-trade prevention"でキャンセルされます - テイカー注文は拒否されます (それ以前の約定がない場合)。部分約定済みの場合はキャンセルされます
2 つの注文の間で約定は発生しません。
ウォレット単位での照合
STP はエージェントキーではなく、ウォレットアドレスを比較します。エージェント認可を利用して複数のキーで注文に署名している場合でも、同一の取引ウォレットに属するすべての注文は、互いに STP の対象となります。
部分約定は保持されます
テイカー注文が自己取引に到達する前に他の取引相手と約定していた場合、それらの約定は保持されます。
例: 注文板に、ウォレット B による 5 枚の売り注文、続いてウォレット A による 5 枚の売り注文があります。ウォレット A が 10 枚の買い注文を出します:
| ステップ | 約定対象 | 結果 |
|---|---|---|
| 1 | ウォレット B (5 枚) | 約定: 5 枚が執行 |
| 2 | ウォレット A (5 枚) | 自己取引を検出 |
結果:
- ウォレット A はウォレット B との間で 5 枚の約定を得ます
- ウォレット A のメイカー注文 (5 枚) はキャンセルされます
- ウォレット A のテイカー注文は
filled_size: 5でキャンセルされます
注文ステータス
| シナリオ | テイカーのステータス | 理由 |
|---|---|---|
| それ以前の約定なし | REJECTED | "Self-trade prevention" |
| 自己取引の前に部分約定あり | CANCELED | "Self-trade prevention (partial fill kept)" |
メイカー注文は常に理由 "Self-trade prevention" で CANCELED となります。
自己取引後に GTC 注文は板に残りません
GTC のテイカー注文が STP を発動させた場合、通常であれば板に残る注文であっても、残数量は注文板に追加されません。注文は完全に終了します。
WebSocket 通知
テイカーとメイカーのキャンセル/拒否は、いずれも order_updates チャネルで配信されます。reason フィールドにより、STP が原因であることが示されます。
よくある質問
別の STP モード (例: 新しい注文をキャンセル、または数量を減算) を選べますか? いいえ。Hypercall は両方キャンセル方式のみを採用しています。
STP はパーペチュアル注文にも適用されますか? いいえ。Hypercall の STP は、Hypercall の注文板で約定する注文、すなわちオプション注文とコンボ注文に適用されます。パーペチュアル注文は Hyperliquid のオーダーブックで約定し、Hyperliquid 独自の自己取引ルールが適用されます。
STP はコンボ注文にも適用されますか? はい。コンボまたはインプライドルートによってアカウントが自身と約定しようとする前に照合は停止し、待機中のメイカー注文はキャンセルされます。オール・オア・ナッシングのケース (FOK およびアトミックリプレース) については、Experimental Combo API を参照してください。
STP は RFQ 取引にも適用されますか? はい。テイカーとクオート提供者が同じウォレットである場合、そのクオートは拒否されます。
私は両サイドにクオートを出すマーケットメイカーです。自分のクオート同士がキャンセルし合うことはありますか? 新たに入ってきた注文によってそれらが交差する場合に限ります。注文板の反対サイドに異なる価格で置かれた待機注文は、通常どおり共存します。STP は約定時にのみ発動します。