
Логика аварийного закрытия при неудачной постановке стопа
Суть проблемы: трейдер зафиксировал намерение (стоп выставлен в терминале), но биржа отклонила заявку, потому что цена уже ушла за уровень (типичная ошибка на волатильности). Терминал не должен просто снимать стоп и оставлять позицию без защиты. Нужно трактовать ошибку как «стоп уже сработал по сути» и принудительно закрывать сделку.
Основной алгоритм
Фиксация намерения в терминале
При установке стопа терминал сохраняет локальную запись:
LOCAL_ARMEDПопытка выставления на биржу
Терминал отправляет заявку и переводит статус в PLACING.
Ожидает ответ:
Accepted → статус EXCHANGE_ACTIVE, обычная работа.Rejected / timeout / ошибка → переход в обработку отказа.Классификация ошибки
При получении ошибки терминал смотрит код/текст:
Аварийное закрытие
Как только ошибка классифицирована как «стоп не встал, а должен был»:
MISSED_PLACEMENT_TRIGGERED.После отправки аварийного закрытия
Local stop set → Exchange reject → Emergency close.Дополнительные правила надёжности
LOCAL_ARMED / MISSED_… дольше N секунд без подтверждения с биржи — принудительная проверка и закрытие.PLACING или аварийное закрытие, повторные попытки выставить тот же стоп блокируются.Краткий поток состояний
LOCAL_ARMED
↓
PLACING
↓
├─ Accepted → EXCHANGE_ACTIVE
└─ Rejected (price passed / critical)
↓
MISSED_PLACEMENT_TRIGGERED
↓
Emergency Market Close
↓
Position closed / residual handlingТакая логика сохраняет намерение трейдера: если стоп был выставлен в терминале, а биржа его не приняла из-за улетевшего спреда/цены, позиция не остаётся без защиты и закрывается принудительно. Это именно то поведение, которого не хватает в описанном случае с Tiger Terminal.