Защита маркетмейкеров (MMP)
Лимиты в окне исполнения и автоматическая отмена ордеров для маркетмейкеров.
Обзор
MMP защищает маркетмейкеров от быстрых неблагоприятных исполнений следующим образом:
- Отслеживает кумулятивные метрики исполнений в скользящем временном окне
- Отменяет ордера при превышении лимитов
- Автоматически отменяет все остальные ордера с включённым 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=...¤cy=...
Параметры запроса:
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 выполняется ПОСЛЕ исполнения:
- Движок сводит ордера и сначала принимает исполнение
- Затем MMP проверяет кумулятивные метрики
- Если лимиты превышены:
- 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 срабатывает:
- Активный ордер: оставшееся количество прекращает обрабатываться, ордер получает статус
CANCELEDс причиной"MMP triggered during fill processing" - Остальные ордера: все остальные открытые ордера с включённым 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"
}
Рекомендации
Конфигурация
- Установите адекватные лимиты: исходя из вашей толерантности к риску и типичных размеров исполнений
- Используйте конфигурации по валютам: настраивайте отдельно для каждого базового актива (BTC, ETH и т. д.)
- Отслеживайте срабатывания MMP: высокая частота срабатываний может указывать на некорректно настроенные лимиты или неблагоприятную рыночную конъюнктуру
Управление ордерами
- Включайте MMP выборочно: устанавливайте
mmp_enabled=trueтолько для ордеров, которые хотите защитить - Используйте единообразную валюту: убедитесь, что все ордера по одному базовому активу используют ту же валюту, что и в конфигурации MMP
- Обрабатывайте отмены по MMP: реализуйте логику для обнаружения отмен, вызванных MMP, и корректировки котирования
Мониторинг
- Отслеживайте срабатывания MMP: мониторьте причины
"MMP triggered during fill processing"и"Order canceled by MMP trigger" - Проверяйте окна исполнений: сверяйте кумулятивные метрики через конфигурацию MMP (в настоящее время не доступны через API)
- Корректируйте лимиты: если 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 по тому же базовому активу.