Prevenção de Autonegociação (STP)
Proteção automática contra autonegociação.
Visão geral
Quando uma ordem de entrada (taker) seria executada contra uma ordem em repouso (maker) da mesma carteira, o motor cancela as duas ordens em vez de executá-las. Isso impede wash trading e protege os market makers de cruzarem acidentalmente suas próprias cotações.
O STP está sempre ativo. Não há configuração, não há opção de desativação e não há modos alternativos.
Comportamento
Estratégia: cancelar ambas
Quando uma autonegociação é detectada:
- A ordem maker é cancelada com o motivo
"Self-trade prevention" - A ordem taker é rejeitada (se não houver execuções anteriores) ou cancelada (se tiver sido parcialmente executada)
Nenhuma execução é gerada entre as duas ordens.
Correspondência por carteira
O STP compara endereços de carteira, não chaves de agente. Se você usa autorização de agente para assinar ordens a partir de várias chaves, todas as ordens sob a mesma carteira de negociação estão sujeitas ao STP entre si.
Execuções parciais são preservadas
Se uma ordem taker for executada contra outras contrapartes antes de encontrar uma autonegociação, essas execuções são mantidas.
Exemplo: o livro tem 5 contratos ofertados pela Carteira B e, em seguida, 5 contratos ofertados pela Carteira A. A Carteira A envia uma compra de 10 contratos:
| Etapa | Correspondência contra | Resultado |
|---|---|---|
| 1 | Carteira B (5 contratos) | Execução: 5 contratos executados |
| 2 | Carteira A (5 contratos) | Autonegociação detectada |
Resultado:
- A Carteira A recebe uma execução de 5 contratos contra a Carteira B
- A ordem maker da Carteira A (5 contratos) é cancelada
- A ordem taker da Carteira A é cancelada com
filled_size: 5
Status da ordem
| Cenário | Status do taker | Motivo |
|---|---|---|
| Sem execuções anteriores | REJECTED | "Self-trade prevention" |
| Execuções parciais antes da autonegociação | CANCELED | "Self-trade prevention (partial fill kept)" |
A ordem maker é sempre CANCELED com o motivo "Self-trade prevention".
Ordens GTC não ficam em repouso após autonegociação
Se uma ordem taker GTC acionar o STP, a quantidade restante não é adicionada ao livro, mesmo que a ordem normalmente ficasse em repouso. A ordem é encerrada por completo.
Notificações via WebSocket
Tanto o cancelamento/rejeição do taker quanto o do maker são entregues no canal order_updates. O campo reason indica que o STP foi a causa.
Perguntas frequentes
Posso escolher um modo de STP diferente (por exemplo, cancelar a mais nova ou decremento)? Não. A Hypercall usa exclusivamente o cancelamento de ambas.
O STP se aplica a ordens de perpétuos? Não. O STP da Hypercall se aplica a ordens executadas no livro da Hypercall: opções e ordens combo. Ordens de perpétuos são executadas no livro de ofertas da Hyperliquid, onde se aplicam as regras de autonegociação da própria Hyperliquid.
O STP se aplica a ordens combo? Sim. A correspondência é interrompida antes que um combo ou uma rota implícita faça uma conta negociar contra si mesma, e a ordem maker em repouso é cancelada. Consulte a API Experimental de Combos para os casos tudo-ou-nada (FOK e substituição atômica).
O STP se aplica a negociações via RFQ? Sim. Se o taker e um provedor de cotação compartilharem a mesma carteira, a cotação é rejeitada.
Sou market maker e coto os dois lados. Minhas cotações vão se cancelar? Somente se uma ordem de entrada fizer com que elas se cruzem. Ordens em repouso em lados opostos do livro, com preços diferentes, coexistem normalmente. O STP só é acionado no momento da correspondência.