Предотвращение самоторговли (STP)
Автоматическая защита от торговли с самим собой.
Обзор
Когда входящая (тейкерская) заявка должна свестись с находящейся в книге (мейкерской) заявкой того же кошелька, движок отменяет обе заявки вместо их исполнения. Это предотвращает wash-трейдинг и защищает маркетмейкеров от случайного пересечения собственных котировок.
STP активен всегда. Нет ни настроек, ни возможности отключения, ни альтернативных режимов.
Поведение
Стратегия: отмена обеих заявок
При обнаружении самоторговли:
- Мейкерская заявка отменяется с причиной
"Self-trade prevention" - Тейкерская заявка отклоняется (если исполнений не было) или отменяется (если была исполнена частично)
Сделка между этими двумя заявками не заключается.
Сопоставление на уровне кошелька
STP сравнивает адреса кошельков, а не агентские ключи. Если вы используете авторизацию агентов для подписи заявок несколькими ключами, все заявки одного торгового кошелька подпадают под действие STP друг против друга.
Частичные исполнения сохраняются
Если тейкерская заявка исполняется против других контрагентов до столкновения с самоторговлей, эти исполнения сохраняются.
Пример: в книге предложено 5 контрактов от кошелька B, затем 5 контрактов от кошелька A. Кошелёк A отправляет заявку на покупку 10 контрактов:
| Шаг | Сведение с | Результат |
|---|---|---|
| 1 | Кошелёк B (5 контрактов) | Исполнение: 5 контрактов |
| 2 | Кошелёк A (5 контрактов) | Обнаружена самоторговля |
Итог:
- Кошелёк A получает исполнение на 5 контрактов против кошелька B
- Мейкерская заявка кошелька A (5 контрактов) отменяется
- Тейкерская заявка кошелька A отменяется с
filled_size: 5
Статус заявки
| Сценарий | Статус тейкера | Причина |
|---|---|---|
| Исполнений не было | Rejected | "Self-trade prevention" |
| Частичные исполнения до самоторговли | Canceled | "Self-trade prevention (partial fill kept)" |
Мейкерская заявка всегда получает статус Canceled с причиной "Self-trade prevention".
GTC-заявки не остаются в книге после срабатывания STP
Если тейкерская GTC-заявка вызывает срабатывание STP, оставшийся объём не добавляется в книгу, даже если в обычной ситуации заявка осталась бы в ней. Заявка полностью завершается.
Уведомления по WebSocket
Уведомления об отмене/отклонении как тейкерской, так и мейкерской заявки доставляются в канале order_updates. Поле reason указывает, что причиной стал STP.
Мониторинг
События STP увеличивают счётчик Prometheus ht_engine_self_trade_prevented_total.
FAQ
Можно ли выбрать другой режим STP (например, отмену новейшей заявки или уменьшение объёма)? Нет. Hypercall использует исключительно отмену обеих заявок.
Применяется ли STP к заявкам по перпам? Да. STP применяется ко всем типам заявок в движке сведения — как по опционам, так и по перпам.
Применяется ли STP к сделкам RFQ? Да. Если тейкер и поставщик котировки используют один и тот же кошелёк, котировка отклоняется.
Я маркетмейкер и котирую обе стороны. Будут ли мои котировки отменять друг друга? Только если входящая заявка приведёт к их пересечению. Заявки на противоположных сторонах книги по разным ценам сосуществуют в обычном режиме. STP срабатывает только в момент сведения.