← Заметки
Когда движок останавливается
control·hil·operations

Когда движок останавливается

Алгоритм работает сам. Но в трёх случаях он спрашивает оператора, и ещё в одном просто ложится. Разбираем, как устроены HIL-очередь, режимы стратегии и kill switch и где между ними проходит граница.

· Mikhail Savchenko · Обновлено

Самое противоречивое обещание любого алгоритмического стека звучит так: «вы контролируете капитал, но руками ничего делать не нужно». На словах красиво, на практике рассыпается. Если алгоритм действительно ничего не просит у оператора, оператор лишний. Если просит на каждое решение, это те же 90 кнопок, от которых мы и ушли.

Граница проходит по трём уровням. На первом — режимы стратегии. На втором — очередь HIL для конкретных событий. На третьем — kill switch как аварийный тормоз. Каждый уровень закрывает свой класс ситуаций и существует ровно потому, что мы за пять лет несколько раз обжигались на том, что одного из них не хватало.

Режимы: грубая ручка громкости

У каждой стратегии пять состояний: NORMAL, CAUTIOUS, MANUAL, PAUSED, EMERGENCY. На разных режимах движок ведёт себя по-разному.

В NORMAL стратегия живёт сама. Считает сигналы, переаллоцирует веса, отправляет ордера в maker-режиме, замораживает раскатку капитала при троттле просадки. Оператор смотрит на кривую equity раз в неделю и обычно не делает ничего.

CAUTIOUS — режим повышенной паранойи. Те же действия, но любая ребалансировка с движением капитала больше определённого порога уходит в HIL-очередь. Стратегия по-прежнему торгует, но крупные сдвиги ждут подтверждения. Включаем перед FOMC, перед выпуском NFP или просто после плохой ночи.

MANUAL — стратегия не открывает новых позиций, но ведёт уже открытые. Удобно, если вы хотите вручную добрать или сбросить экспозицию, не выключая стратегию совсем. Существующие стопы и тейки продолжают работать.

PAUSED — полная остановка. Никаких новых сделок, никаких ребалансов. Открытые позиции остаются как есть до явной команды. Это режим для поездок, отпусков, переходов между биржами или для случая, когда вы решили посмотреть, как ведёт себя рынок без вашего участия.

EMERGENCY — автоматический PAUSED плюс принудительное закрытие позиций. Включается алгоритмом сам в трёх случаях: пробит kill switch, сглаженная просадка ушла ниже −15% или биржа вернула 5+ ошибок подряд за один тик. Возврат из EMERGENCY — только вручную, с явным апрувом админа.

HIL-очередь: где живёт ваше «да»

Очередь HIL — это не «оператор смотрит каждый ордер». Это место, куда падают конкретные классы решений, которые мы посчитали слишком важными для автомата.

Их четыре. Любое движение капитала между cash, портфельной и торговой частью больше определённого порога — туда. Любая ребалансировка портфеля, двигающая вес одного из активов больше чем на N процентных пунктов за один тик — туда. Любое срабатывание лимита, выставленного оператором руками — туда. И любая попытка стратегии выйти за заранее заданные диапазоны экспозиции — туда же.

Очередь живёт в дашборде и в чате с Claude параллельно. На дашборде видны карточки с предлагаемым действием, старым и новым значением и обоснованием от движка. В Claude можно посмотреть ту же очередь командой list_pending_approvals и закрыть конкретный апрув через approve_trade. Решения уходят в audit_log с пометкой, откуда они пришли — из кнопки или из чата.

Что важно: пока апрув висит, стратегия живёт дальше. Не блокирует другие сделки и не тормозит остальные движки. Просто конкретное действие, упёршееся в лимит, ждёт.

Kill switch: аварийный тормоз

Kill switch — не режим. Это глобальный флаг, который мгновенно переводит конкретную стратегию (или все сразу) в EMERGENCY с принудительным закрытием. Включается в одном случае — когда вы поняли, что что-то идёт не так, а разбираться будете потом.

Архитектурно kill switch — это отдельная строка в БД с двумя полями: engaged: bool и reason: string. Каждый тик движка читает это поле до любых сигналов и торговых действий. Если флаг поднят — движок сначала закрывает позиции по маркету с уведомлением в чат, потом останавливается. Никаких сложностей с очерёдностью, никаких race-условий.

Зацепить kill switch может оператор или админ. Сбросить — только админ, и только после явной команды и записи причины. Это сделано специально: остановить можно одним движением, отключить — двумя руками в трезвом рассудке.

Где проходит граница

Главный вопрос дизайна: что должен решать алгоритм сам, а что оставить на оператора. Мы пришли к простому правилу. Алгоритм решает всё, что укладывается в заранее заданные границы — диапазоны весов, лимиты по марже, потолки оборота. Оператор подключается тогда, когда действие выходит за эти границы или когда сами границы надо сместить.

В терминах ответственности это значит: за конкретные торговые решения внутри границ отвечает методология, и спрос с неё. За границы — оператор, и за их сдвиг тоже спрос с оператора. Алгоритм без границ — это автоторговля; границы без алгоритма — это электронный брокер. Между ними и сидит inite.fund.

И последнее. Если за неделю в HIL-очереди не прошло ни одного апрува, это не значит, что вы не нужны. Это значит, что движок настроен правильно. В среднем оператор inite.fund подтверждает 2-4 действия в неделю; если становится больше, мы пересматриваем границы. Если меньше — пересматриваем тоже, потому что система, которая никогда не спрашивает, обычно не та, в которой хочется держать деньги.

— inite team

Похожие заметки
Все заметки →