Esta página foi traduzida automaticamente. O original em inglês é a versão canônica. Ler em inglês
Pular para o conteúdo principal

Proteção de Market Maker (MMP)

Limites por janela de execuções e comportamento de cancelamento automático para market makers.

Visão Geral

O MMP protege market makers contra execuções adversas rápidas ao:

  1. Rastrear métricas cumulativas de execuções dentro de uma janela de tempo deslizante
  2. Cancelar ordens quando os limites são violados
  3. Cancelar automaticamente todas as outras ordens com MMP habilitado para a mesma carteira+ativo subjacente

Configuração

Definir Configuração de MMP

Endpoint: POST /mmp-config

Requisição: 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: Endereço da carteira
  • currency: Moeda do ativo subjacente (ex.: "BTC", "ETH")
  • interval_ms: Duração da janela deslizante em milissegundos
  • frozen_time_ms: Duração do congelamento após o gatilho (milissegundos)
  • qty_limit: Limite de quantidade opcional (unidades de contrato)
  • delta_limit: Limite de delta opcional
  • vega_limit: Limite de vega opcional
  • enabled: Se o MMP está habilitado para esta carteira+moeda

Resposta: ApiResponse<MmpConfigData>

Obter Configuração de MMP

Endpoint: GET /mmp-config?wallet=...&currency=...

Parâmetros de query:

  • wallet (obrigatório)
  • currency (filtro opcional)

Resposta: 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
}
]
}

Excluir Configuração de MMP

Endpoint: DELETE /mmp-config

Requisição: DeleteMmpConfigRequest

{
"wallet": "0x...",
"currency": "BTC",
"nonce": 1,
"signature": "0x..."
}

Resposta: ApiResponse<String>

Redefinir Estado do MMP

Endpoint: POST /mmp-config/reset

Requisição: ResetMmpRequest

{
"wallet": "0x...",
"currency": "BTC",
"nonce": 1,
"signature": "0x..."
}

Resposta: ApiResponse<String>

Notas: Redefine o estado da janela de execuções do MMP (limpa as métricas cumulativas, descongela a moeda).

Comportamento do MMP (Crítico Entender)

Ordem de Processamento das Execuções

A avaliação do MMP é PÓS-EXECUÇÃO:

  1. O engine casa e aceita a execução primeiro
  2. Em seguida, o MMP verifica as métricas cumulativas
  3. Se os limites forem violados:
    • O MMP é acionado
    • A quantidade restante da ordem ativa para de ser processada
    • A ordem passa a CANCELED com o motivo: "MMP triggered during fill processing"
    • O engine emite o evento MmpTriggered
    • O engine cancela automaticamente todas as outras ordens abertas com MMP habilitado para a mesma carteira+ativo subjacente

Implicação: Você pode receber execuções que ultrapassem os seus limites configurados antes que o MMP seja acionado.

Condições de Acionamento

O MMP é acionado se qualquer limite configurado for violado:

  • Limite de quantidade: cumulative_qty > qty_limit
  • Limite de delta: |cumulative_delta| > delta_limit
  • Limite de vega: |cumulative_vega| > vega_limit

As métricas cumulativas são calculadas ao longo da janela deslizante (interval_ms).

Comportamento de Cancelamento

Quando o MMP é acionado:

  1. Ordem ativa: A quantidade restante é interrompida, a ordem passa a CANCELED com o motivo "MMP triggered during fill processing"
  2. Outras ordens: Todas as outras ordens abertas com MMP habilitado para a mesma carteira+ativo subjacente são canceladas automaticamente com o motivo "Order canceled by MMP trigger"

Nota: Apenas ordens com MMP habilitado são canceladas. Ordens com mmp_enabled=false não são afetadas.

Comportamento de Congelamento

Depois que o MMP é acionado:

  • A moeda fica congelada por frozen_time_ms milissegundos
  • Enquanto congelada, novas execuções podem ser rejeitadas (dependente da implementação)

Cálculo das Métricas de Execução

Quantidade

  • Fonte: size da execução (unidades de contrato)
  • Cumulativo: Soma de todas as execuções na janela deslizante

Delta

  • Fonte: Calculado a partir do símbolo da execução e do GreeksCache
  • Cumulativo: Soma dos deltas de todas as execuções na janela deslizante

Vega

  • Fonte: Calculado a partir do símbolo da execução e do GreeksCache
  • Cumulativo: Soma dos vegas de todas as execuções na janela deslizante

Janela Deslizante

Expiração da Janela

Execuções mais antigas que interval_ms são automaticamente removidas da janela:

  • A remoção é executada periodicamente (tarefa em segundo plano)
  • As métricas cumulativas são decrementadas conforme execuções antigas são removidas

Redefinição da Janela

Redefina o estado do MMP via POST /mmp-config/reset:

  • Limpa todas as execuções na janela
  • Zera as métricas cumulativas
  • Descongela a moeda

Eventos de MMP

Evento MmpTriggered

Evento interno (atualmente não encaminhado aos clientes WS):

MmpTriggeredMessage {
wallet: WalletAddress,
currency: String,
reason: String, // "qty_limit" | "delta_limit" | "vega_limit"
}

Boas Práticas

Configuração

  1. Defina limites apropriados: Com base na sua tolerância a risco e nos tamanhos típicos das suas execuções
  2. Use configurações específicas por moeda: Configure por ativo subjacente (BTC, ETH, etc.)
  3. Monitore os acionamentos do MMP: Uma taxa alta de acionamentos pode indicar limites mal configurados ou condições adversas de mercado

Gestão de Ordens

  1. Habilite o MMP seletivamente: Defina mmp_enabled=true apenas para as ordens que você deseja proteger
  2. Use moeda consistente: Garanta que todas as ordens para o mesmo ativo subjacente usem a mesma moeda na configuração de MMP
  3. Trate os cancelamentos do MMP: Implemente lógica para detectar cancelamentos acionados pelo MMP e ajustar suas cotações

Monitoramento

  1. Rastreie os acionamentos do MMP: Monitore os motivos "MMP triggered during fill processing" e "Order canceled by MMP trigger"
  2. Revise as janelas de execuções: Verifique as métricas cumulativas via configuração de MMP (atualmente não expostas via API)
  3. Ajuste os limites: Se o MMP for acionado com muita frequência, aumente os limites; se for acionado com pouca frequência, diminua os limites

Problemas Comuns

MMP Aciona com Muita Frequência

Causas:

  • Limites muito baixos para os tamanhos típicos de execução
  • Condições adversas de mercado
  • Cotações rápidas gerando muitas execuções

Soluções:

  • Aumente qty_limit, delta_limit ou vega_limit
  • Aumente interval_ms para permitir mais execuções na janela
  • Reduza a frequência de cotações

MMP Não Aciona

Causas:

  • Limites muito altos
  • MMP não habilitado nas ordens (mmp_enabled=false)
  • Divergência de moeda (moeda da configuração de MMP != ativo subjacente da ordem)

Soluções:

  • Diminua os limites
  • Verifique mmp_enabled=true nas ordens
  • Verifique se a moeda da configuração de MMP corresponde ao ativo subjacente da ordem

Cancelamentos Inesperados

Sintoma: Ordens canceladas com o motivo "Order canceled by MMP trigger" sem que você esperasse.

Causa: Outra ordem para a mesma carteira+ativo subjacente acionou o MMP.

Solução: Revise todas as ordens com MMP habilitado para o mesmo ativo subjacente quando uma delas for acionada.