Эта страница переведена автоматически. Оригинал на английском языке является каноническим. Читать на английском
Перейти к основному содержимому

Защита маркетмейкеров (MMP)

Лимиты в окне исполнения и автоматическая отмена ордеров для маркетмейкеров.

Обзор

MMP защищает маркетмейкеров от быстрых неблагоприятных исполнений следующим образом:

  1. Отслеживает кумулятивные метрики исполнений в скользящем временном окне
  2. Отменяет ордера при превышении лимитов
  3. Автоматически отменяет все остальные ордера с включённым MMP для той же пары кошелёк+базовый актив

Конфигурация

Установка конфигурации MMP

Эндпоинт: POST /mmp-config

Запрос: 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..."
}

Поля:

  • wallet: адрес кошелька
  • currency: валюта базового актива (например, "BTC", "ETH")
  • interval_ms: длина скользящего окна в миллисекундах
  • frozen_time_ms: длительность заморозки после срабатывания (в миллисекундах)
  • qty_limit: необязательный лимит по количеству (в единицах контракта)
  • delta_limit: необязательный лимит по дельте
  • vega_limit: необязательный лимит по веге
  • enabled: включён ли MMP для данной пары кошелёк+валюта

Ответ: ApiResponse<MmpConfigData>

Получение конфигурации MMP

Эндпоинт: GET /mmp-config?wallet=...&currency=...

Параметры запроса:

  • wallet (обязательный)
  • currency (необязательный фильтр)

Ответ: 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
}
]
}

Удаление конфигурации MMP

Эндпоинт: DELETE /mmp-config

Запрос: DeleteMmpConfigRequest

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

Ответ: ApiResponse<String>

Сброс состояния MMP

Эндпоинт: POST /mmp-config/reset

Запрос: ResetMmpRequest

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

Ответ: ApiResponse<String>

Примечания: Сбрасывает состояние окна исполнений MMP (очищает кумулятивные метрики, размораживает валюту).

Поведение MMP (важно понимать)

Порядок обработки исполнений

Оценка MMP выполняется ПОСЛЕ исполнения:

  1. Движок сводит ордера и сначала принимает исполнение
  2. Затем MMP проверяет кумулятивные метрики
  3. Если лимиты превышены:
    • MMP срабатывает
    • Оставшееся количество активного ордера прекращает обрабатываться
    • Ордер получает статус CANCELED с причиной: "MMP triggered during fill processing"
    • Движок генерирует событие MmpTriggered
    • Движок автоматически отменяет все остальные открытые ордера с включённым MMP для той же пары кошелёк+базовый актив

Следствие: вы можете получить исполнения, выводящие вас за настроенные пороги, до срабатывания MMP.

Условия срабатывания

MMP срабатывает при превышении любого из настроенных лимитов:

  • Лимит по количеству: cumulative_qty > qty_limit
  • Лимит по дельте: |cumulative_delta| > delta_limit
  • Лимит по веге: |cumulative_vega| > vega_limit

Кумулятивные метрики рассчитываются в пределах скользящего окна (interval_ms).

Поведение при отмене

Когда MMP срабатывает:

  1. Активный ордер: оставшееся количество прекращает обрабатываться, ордер получает статус CANCELED с причиной "MMP triggered during fill processing"
  2. Остальные ордера: все остальные открытые ордера с включённым MMP для той же пары кошелёк+базовый актив автоматически отменяются с причиной "Order canceled by MMP trigger"

Примечание: отменяются только ордера с включённым MMP. Ордера с mmp_enabled=false не затрагиваются.

Поведение при заморозке

После срабатывания MMP:

  • Валюта замораживается на frozen_time_ms миллисекунд
  • Во время заморозки новые исполнения могут отклоняться (зависит от реализации)

Расчёт метрик исполнений

Количество

  • Источник: size исполнения (в единицах контракта)
  • Кумулятивно: сумма всех исполнений в скользящем окне

Дельта

  • Источник: рассчитывается по символу исполнения и GreeksCache
  • Кумулятивно: сумма дельт всех исполнений в скользящем окне

Вега

  • Источник: рассчитывается по символу исполнения и GreeksCache
  • Кумулятивно: сумма вег всех исполнений в скользящем окне

Скользящее окно

Вытеснение из окна

Исполнения старше interval_ms автоматически вытесняются из окна:

  • Вытеснение выполняется периодически (фоновая задача)
  • Кумулятивные метрики уменьшаются по мере удаления старых исполнений

Сброс окна

Сбросьте состояние MMP через POST /mmp-config/reset:

  • Очищает все исполнения в окне
  • Обнуляет кумулятивные метрики
  • Размораживает валюту

События MMP

Событие MmpTriggered

Внутреннее событие (в настоящее время не пересылается WS-клиентам):

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

Рекомендации

Конфигурация

  1. Установите адекватные лимиты: исходя из вашей толерантности к риску и типичных размеров исполнений
  2. Используйте конфигурации по валютам: настраивайте отдельно для каждого базового актива (BTC, ETH и т. д.)
  3. Отслеживайте срабатывания MMP: высокая частота срабатываний может указывать на некорректно настроенные лимиты или неблагоприятную рыночную конъюнктуру

Управление ордерами

  1. Включайте MMP выборочно: устанавливайте mmp_enabled=true только для ордеров, которые хотите защитить
  2. Используйте единообразную валюту: убедитесь, что все ордера по одному базовому активу используют ту же валюту, что и в конфигурации MMP
  3. Обрабатывайте отмены по MMP: реализуйте логику для обнаружения отмен, вызванных MMP, и корректировки котирования

Мониторинг

  1. Отслеживайте срабатывания MMP: мониторьте причины "MMP triggered during fill processing" и "Order canceled by MMP trigger"
  2. Проверяйте окна исполнений: сверяйте кумулятивные метрики через конфигурацию MMP (в настоящее время не доступны через API)
  3. Корректируйте лимиты: если MMP срабатывает слишком часто — увеличьте лимиты; если слишком редко — уменьшите

Типичные проблемы

MMP срабатывает слишком часто

Причины:

  • Лимиты слишком низкие для типичных размеров исполнений
  • Неблагоприятная рыночная конъюнктура
  • Частое котирование, приводящее к большому числу исполнений

Решения:

  • Увеличьте qty_limit, delta_limit или vega_limit
  • Увеличьте interval_ms, чтобы окно вмещало больше исполнений
  • Снизьте частоту котирования

MMP не срабатывает

Причины:

  • Лимиты слишком высокие
  • MMP не включён на ордерах (mmp_enabled=false)
  • Несовпадение валюты (валюта в конфигурации MMP != базовый актив ордера)

Решения:

  • Уменьшите лимиты
  • Проверьте, что на ордерах установлено mmp_enabled=true
  • Проверьте, что валюта в конфигурации MMP соответствует базовому активу ордера

Неожиданные отмены

Симптом: ордера отменены с причиной "Order canceled by MMP trigger", хотя вы этого не ожидали.

Причина: другой ордер для той же пары кошелёк+базовый актив вызвал срабатывание MMP.

Решение: при срабатывании проверяйте все ордера с включённым MMP по тому же базовому активу.