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:
- Rastrear métricas cumulativas de execuções dentro de uma janela de tempo deslizante
- Cancelar ordens quando os limites são violados
- 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 carteiracurrency: Moeda do ativo subjacente (ex.:"BTC","ETH")interval_ms: Duração da janela deslizante em milissegundosfrozen_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 opcionalvega_limit: Limite de vega opcionalenabled: Se o MMP está habilitado para esta carteira+moeda
Resposta: ApiResponse<MmpConfigData>
Obter Configuração de MMP
Endpoint: GET /mmp-config?wallet=...¤cy=...
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:
- O engine casa e aceita a execução primeiro
- Em seguida, o MMP verifica as métricas cumulativas
- Se os limites forem violados:
- O MMP é acionado
- A quantidade restante da ordem ativa para de ser processada
- A ordem passa a
CANCELEDcom 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:
- Ordem ativa: A quantidade restante é interrompida, a ordem passa a
CANCELEDcom o motivo"MMP triggered during fill processing" - 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_msmilissegundos - Enquanto congelada, novas execuções podem ser rejeitadas (dependente da implementação)
Cálculo das Métricas de Execução
Quantidade
- Fonte:
sizeda 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
- Defina limites apropriados: Com base na sua tolerância a risco e nos tamanhos típicos das suas execuções
- Use configurações específicas por moeda: Configure por ativo subjacente (BTC, ETH, etc.)
- 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
- Habilite o MMP seletivamente: Defina
mmp_enabled=trueapenas para as ordens que você deseja proteger - Use moeda consistente: Garanta que todas as ordens para o mesmo ativo subjacente usem a mesma moeda na configuração de MMP
- Trate os cancelamentos do MMP: Implemente lógica para detectar cancelamentos acionados pelo MMP e ajustar suas cotações
Monitoramento
- Rastreie os acionamentos do MMP: Monitore os motivos
"MMP triggered during fill processing"e"Order canceled by MMP trigger" - Revise as janelas de execuções: Verifique as métricas cumulativas via configuração de MMP (atualmente não expostas via API)
- 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_limitouvega_limit - Aumente
interval_mspara 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=truenas 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.