Prevención de Auto-Negociación (STP)
Protección automática contra la auto-negociación.
Resumen
Cuando una orden entrante (taker) coincidiría con una orden en reposo (maker) de la misma wallet, el motor cancela ambas órdenes en lugar de ejecutarlas. Esto previene el wash trading y protege a los market makers de cruzar accidentalmente sus propias cotizaciones.
STP está siempre activo. No hay configuración, no hay opción de exclusión y no existen modos alternativos.
Comportamiento
Estrategia: Cancelar Ambas
Cuando se detecta una auto-negociación:
- La orden maker se cancela con el motivo
"Self-trade prevention" - La orden taker es rechazada (si no tuvo ejecuciones previas) o cancelada (si fue ejecutada parcialmente)
No se genera ninguna ejecución entre las dos órdenes.
Comparación a Nivel de Wallet
STP compara direcciones de wallet, no claves de agente. Si usted utiliza autorización de agentes para firmar órdenes desde múltiples claves, todas las órdenes bajo la misma wallet de trading están sujetas a STP entre sí.
Las Ejecuciones Parciales Se Conservan
Si una orden taker se ejecuta contra otras contrapartes antes de encontrar una auto-negociación, esas ejecuciones se conservan.
Ejemplo: El libro tiene 5 contratos ofrecidos por la Wallet B, y luego 5 contratos ofrecidos por la Wallet A. La Wallet A envía una orden de compra por 10 contratos:
| Paso | Coincide Contra | Resultado |
|---|---|---|
| 1 | Wallet B (5 contratos) | Ejecución: 5 contratos ejecutados |
| 2 | Wallet A (5 contratos) | Auto-negociación detectada |
Resultado:
- La Wallet A recibe una ejecución de 5 contratos contra la Wallet B
- La orden maker de la Wallet A (5 contratos) es cancelada
- La orden taker de la Wallet A es cancelada con
filled_size: 5
Estado de la Orden
| Escenario | Estado del Taker | Motivo |
|---|---|---|
| Sin ejecuciones previas | Rejected | "Self-trade prevention" |
| Ejecuciones parciales antes de la auto-negociación | Canceled | "Self-trade prevention (partial fill kept)" |
La orden maker siempre queda como Canceled con el motivo "Self-trade prevention".
Las Órdenes GTC No Quedan en Reposo Tras una Auto-Negociación
Si una orden taker GTC activa el STP, la cantidad restante no se añade al libro, incluso si la orden normalmente quedaría en reposo. La orden se termina por completo.
Notificaciones por WebSocket
Tanto la cancelación/rechazo del taker como del maker se entregan por el canal order_updates. El campo reason indica que el STP fue la causa.
Monitoreo
Los eventos de STP incrementan el contador de Prometheus ht_engine_self_trade_prevented_total.
Preguntas Frecuentes
¿Puedo elegir un modo de STP diferente (por ejemplo, cancelar la más nueva o decrementar)? No. Hypercall utiliza exclusivamente la cancelación de ambas órdenes.
¿El STP aplica a las órdenes de perpetuos? Sí. El STP aplica a todos los tipos de órdenes en el motor de emparejamiento, tanto opciones como perpetuos.
¿El STP aplica a las operaciones RFQ? Sí. Si el taker y un proveedor de cotizaciones comparten la misma wallet, la cotización es rechazada.
Soy un market maker cotizando ambos lados. ¿Mis cotizaciones se cancelarán entre sí? Solo si una orden entrante provocara que se crucen. Las órdenes en reposo en lados opuestos del libro a precios diferentes coexisten normalmente. El STP solo se activa en el momento del emparejamiento.