Esta página fue traducida automáticamente. El original en inglés es la versión canónica. Leer en inglés
Saltar al contenido principal

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:

  1. El seguimiento de métricas acumuladas de ejecuciones dentro de una ventana de tiempo móvil
  2. La cancelación de órdenes cuando se superan los límites
  3. 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 wallet
  • currency: Moneda del activo subyacente (por ejemplo, "BTC", "ETH")
  • interval_ms: Duración de la ventana móvil en milisegundos
  • frozen_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 delta
  • vega_limit: Límite opcional de vega
  • enabled: 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=...&currency=...

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:

  1. El motor casa la operación y acepta primero la ejecución
  2. Luego MMP verifica las métricas acumuladas
  3. Si se superan los límites:
    • MMP se dispara
    • La cantidad restante de la orden activa deja de procesarse
    • La orden pasa a CANCELED con 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:

  1. Orden activa: La cantidad restante se detiene y la orden pasa a CANCELED con el motivo "MMP triggered during fill processing"
  2. 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_ms milisegundos
  • 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: size de 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

  1. Establezca límites apropiados: Según su tolerancia al riesgo y el tamaño típico de sus ejecuciones
  2. Use configuraciones específicas por moneda: Configure por activo subyacente (BTC, ETH, etc.)
  3. 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

  1. Habilite MMP de forma selectiva: Establezca mmp_enabled=true solo en las órdenes que desee proteger
  2. 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
  3. Gestione las cancelaciones por MMP: Implemente lógica para detectar las cancelaciones disparadas por MMP y ajustar la cotización

Monitoreo

  1. Haga seguimiento de los disparos de MMP: Monitoree los motivos "MMP triggered during fill processing" y "Order canceled by MMP trigger"
  2. Revise las ventanas de ejecuciones: Verifique las métricas acumuladas mediante la configuración de MMP (actualmente no expuestas vía API)
  3. 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_limit o vega_limit
  • Aumente interval_ms para 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=true en 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.