Protección de Market Maker (MMP)
Límites por ventana de ejecuciones y comportamiento de cancelación automática para market makers.
Descripción general
MMP protege a los market makers de ejecuciones adversas rápidas mediante:
- El seguimiento de métricas acumuladas de ejecuciones dentro de una ventana de tiempo móvil
- La cancelación de órdenes cuando se superan los límites
- La cancelación automática de todas las demás órdenes con MMP habilitado para la misma combinación de wallet+activo subyacente
Configuración
Establecer la configuración de MMP
Endpoint: POST /mmp-config
Solicitud: SetMmpConfigRequest
{
"wallet": "0x...",
"currency": "BTC",
"interval_ms": 60000,
"frozen_time_ms": 300000,
"qty_limit": 1000000,
"delta_limit": 10.0,
"vega_limit": 5.0,
"enabled": true,
"nonce": 1,
"signature": "0x..."
}
Campos:
wallet: Dirección de la walletcurrency: Moneda del activo subyacente (por ejemplo,"BTC","ETH")interval_ms: Duración de la ventana móvil en milisegundosfrozen_time_ms: Duración de la congelación después del disparo (milisegundos)qty_limit: Límite opcional de cantidad (unidades de contrato)delta_limit: Límite opcional de deltavega_limit: Límite opcional de vegaenabled: Indica si MMP está habilitado para esta combinación de wallet+moneda
Respuesta: ApiResponse<MmpConfigData>
Obtener la configuración de MMP
Endpoint: GET /mmp-config?wallet=...¤cy=...
Parámetros de consulta:
wallet(obligatorio)currency(filtro opcional)
Respuesta: MmpConfigResponse
{
"success": true,
"data": [
{
"wallet_address": "0x...",
"currency": "BTC",
"interval_ms": 60000,
"frozen_time_ms": 300000,
"qty_limit": 1000000,
"delta_limit": 10.0,
"vega_limit": 5.0,
"enabled": true
}
]
}
Eliminar la configuración de MMP
Endpoint: DELETE /mmp-config
Solicitud: DeleteMmpConfigRequest
{
"wallet": "0x...",
"currency": "BTC",
"nonce": 1,
"signature": "0x..."
}
Respuesta: ApiResponse<String>
Restablecer el estado de MMP
Endpoint: POST /mmp-config/reset
Solicitud: ResetMmpRequest
{
"wallet": "0x...",
"currency": "BTC",
"nonce": 1,
"signature": "0x..."
}
Respuesta: ApiResponse<String>
Notas: Restablece el estado de la ventana de ejecuciones de MMP (borra las métricas acumuladas y descongela la moneda).
Comportamiento de MMP (fundamental de entender)
Orden de procesamiento de ejecuciones
La evaluación de MMP es POSTERIOR A LA EJECUCIÓN:
- El motor casa la operación y acepta primero la ejecución
- Luego MMP verifica las métricas acumuladas
- Si se superan los límites:
- MMP se dispara
- La cantidad restante de la orden activa deja de procesarse
- La orden pasa a
CANCELEDcon el motivo:"MMP triggered during fill processing" - El motor emite un evento
MmpTriggered - El motor cancela automáticamente todas las demás órdenes abiertas con MMP habilitado para la misma combinación de wallet+activo subyacente
Implicación: Puede recibir ejecuciones que lo lleven más allá de los umbrales configurados antes de que MMP se dispare.
Condiciones de disparo
MMP se dispara si se supera cualquiera de los límites configurados:
- Límite de cantidad:
cumulative_qty > qty_limit - Límite de delta:
|cumulative_delta| > delta_limit - Límite de vega:
|cumulative_vega| > vega_limit
Las métricas acumuladas se calculan sobre la ventana móvil (interval_ms).
Comportamiento de cancelación
Cuando MMP se dispara:
- Orden activa: La cantidad restante se detiene y la orden pasa a
CANCELEDcon el motivo"MMP triggered during fill processing" - Otras órdenes: Todas las demás órdenes abiertas con MMP habilitado para la misma combinación de wallet+activo subyacente se cancelan automáticamente con el motivo
"Order canceled by MMP trigger"
Nota: Solo se cancelan las órdenes con MMP habilitado. Las órdenes con mmp_enabled=false no se ven afectadas.
Comportamiento de congelación
Después de que MMP se dispara:
- La moneda se congela durante
frozen_time_msmilisegundos - Mientras está congelada, las nuevas ejecuciones pueden ser rechazadas (depende de la implementación)
Cálculo de las métricas de ejecución
Cantidad
- Fuente:
sizede la ejecución (unidades de contrato) - Acumulado: Suma de todas las ejecuciones dentro de la ventana móvil
Delta
- Fuente: Calculado a partir del símbolo de la ejecución y la GreeksCache
- Acumulado: Suma de los deltas de todas las ejecuciones dentro de la ventana móvil
Vega
- Fuente: Calculado a partir del símbolo de la ejecución y la GreeksCache
- Acumulado: Suma de los vegas de todas las ejecuciones dentro de la ventana móvil
Ventana móvil
Expulsión de la ventana
Las ejecuciones más antiguas que interval_ms se expulsan automáticamente de la ventana:
- La expulsión se ejecuta periódicamente (tarea en segundo plano)
- Las métricas acumuladas se decrementan a medida que se eliminan las ejecuciones antiguas
Restablecimiento de la ventana
Restablezca el estado de MMP mediante POST /mmp-config/reset:
- Borra todas las ejecuciones de la ventana
- Restablece las métricas acumuladas a cero
- Descongela la moneda
Eventos de MMP
Evento MmpTriggered
Evento interno (actualmente no se reenvía a los clientes de WS):
MmpTriggeredMessage {
wallet: WalletAddress,
currency: String,
reason: String, // "qty_limit" | "delta_limit" | "vega_limit"
}
Buenas prácticas
Configuración
- Establezca límites apropiados: Según su tolerancia al riesgo y el tamaño típico de sus ejecuciones
- Use configuraciones específicas por moneda: Configure por activo subyacente (BTC, ETH, etc.)
- Monitoree los disparos de MMP: Una alta tasa de disparos puede indicar límites mal configurados o condiciones de mercado adversas
Gestión de órdenes
- Habilite MMP de forma selectiva: Establezca
mmp_enabled=truesolo en las órdenes que desee proteger - Use una moneda consistente: Asegúrese de que todas las órdenes para el mismo activo subyacente usen la misma moneda en la configuración de MMP
- Gestione las cancelaciones por MMP: Implemente lógica para detectar las cancelaciones disparadas por MMP y ajustar la cotización
Monitoreo
- Haga seguimiento de los disparos de MMP: Monitoree los motivos
"MMP triggered during fill processing"y"Order canceled by MMP trigger" - Revise las ventanas de ejecuciones: Verifique las métricas acumuladas mediante la configuración de MMP (actualmente no expuestas vía API)
- Ajuste los límites: Si MMP se dispara con demasiada frecuencia, aumente los límites; si se dispara con muy poca frecuencia, redúzcalos
Problemas comunes
MMP se dispara con demasiada frecuencia
Causas:
- Límites demasiado bajos para el tamaño típico de las ejecuciones
- Condiciones de mercado adversas
- Cotización rápida que genera muchas ejecuciones
Soluciones:
- Aumente
qty_limit,delta_limitovega_limit - Aumente
interval_mspara permitir más ejecuciones en la ventana - Reduzca la frecuencia de cotización
MMP no se dispara
Causas:
- Límites demasiado altos
- MMP no habilitado en las órdenes (
mmp_enabled=false) - Discrepancia de moneda (la moneda de la configuración de MMP != el activo subyacente de la orden)
Soluciones:
- Disminuya los límites
- Verifique que
mmp_enabled=trueen las órdenes - Verifique que la moneda de la configuración de MMP coincida con el activo subyacente de la orden
Cancelaciones inesperadas
Síntoma: Órdenes canceladas con el motivo "Order canceled by MMP trigger" sin que usted lo esperara.
Causa: Otra orden para la misma combinación de wallet+activo subyacente disparó MMP.
Solución: Revise todas las órdenes con MMP habilitado para el mismo activo subyacente cuando una se dispare.