Prevenção de Auto-Negociação (STP)
Proteção automática contra auto-negociação.
Visão Geral
Quando uma ordem entrante (taker) casaria com uma ordem em aberto (maker) da mesma carteira, o motor cancela ambas as ordens em vez de executá-las. Isso previne wash trading e protege market makers de cruzarem acidentalmente suas próprias cotações.
O STP está sempre ativo. Não há configuração, não há como desativar e não existem modos alternativos.
Comportamento
Estratégia: Cancelar Ambas
Quando uma auto-negociaçã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 parcialmente executada)
Nenhuma execução é gerada entre as duas ordens.
Correspondência no Nível da 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 múltiplas 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 auto-negociaçã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:
| Passo | Casamento Contra | Resultado |
|---|---|---|
| 1 | Carteira B (5 contratos) | Execução: 5 contratos executados |
| 2 | Carteira A (5 contratos) | Auto-negociaçã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 da Taker | Motivo |
|---|---|---|
| Sem execuções anteriores | Rejected | "Self-trade prevention" |
| Execuções parciais antes da auto-negociação | Canceled | "Self-trade prevention (partial fill kept)" |
A ordem maker é sempre Canceled com o motivo "Self-trade prevention".
Ordens GTC Não Permanecem no Livro Após Auto-Negociação
Se uma ordem taker GTC acionar o STP, a quantidade restante não é adicionada ao livro, mesmo que a ordem normalmente permanecesse em aberto. A ordem é totalmente encerrada.
Notificações via WebSocket
Tanto o cancelamento/rejeição da taker quanto o da maker são entregues no canal order_updates. O campo reason indica que o STP foi a causa.
Monitoramento
Eventos de STP incrementam o contador Prometheus ht_engine_self_trade_prevented_total.
FAQ
Posso escolher um modo diferente de STP (por exemplo, cancelar a mais nova ou decrementar)? Não. A Hypercall usa exclusivamente o cancelamento de ambas as ordens.
O STP se aplica a ordens de perpétuos? Sim. O STP se aplica a todos os tipos de ordem no motor de matching, tanto opções quanto perpétuos.
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 um market maker cotando ambos os lados. Minhas cotações vão cancelar umas às outras? Somente se uma ordem entrante fizer com que elas se cruzem. Ordens em aberto em lados opostos do livro a preços diferentes coexistem normalmente. O STP só é acionado no momento do matching.