VIZANIXРазработка торгового ПО
Архитектура ботовРиск8 мин чтения

Риск-движок — это список того, чего боту делать нельзя

Управление риском в торговом боте — не вычисление. Это набор отказов, зашитых в код, с которыми стратегия не может спорить.

Инженеры Vizanix · об авторе

МАТЕРИАЛ
8 минвремя чтения
РАЗДЕЛ
Архитектура ботов
ОПУБЛИКОВАНО
2026-08-28
ГЛАВ
6
ЧИТАТЬ ДАЛЬШЕ
3
ЯЗЫК
написано на русском
Инженерный разбор, а не пересказ документации.
RISK ENGINEKILL SWITCHDAILY LOSSEXPOSURECORRELATION

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

Отказы, а не поправки

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

python
@dataclass
class Verdict:
    approved: bool
    qty: Decimal          # может быть меньше запрошенного
    reason: str           # заполняется всегда, в том числе при одобрении

def evaluate(intent, portfolio, day) -> Verdict:
    for rule in RULES:                     # порядок важен: сначала дешёвые и жёсткие
        v = rule(intent, portfolio, day)
        if not v.approved:
            return v
    return Verdict(True, intent.qty, "ok")

Правила, которые оправдывают своё место

ПравилоЧто ограничиваетТипичный отказ, который предотвращает
Максимум позиции по символуПотолок номинала по инструментуОдин сигнал, многократно срабатывающий в огромную позицию
Максимум общей экспозицииВаловая и нетто по всей книгеДесять «независимых» монет, все с бетой к BTC
Число одновременных позицийЛимит слотовСмена режима рынка, открывающая всё разом
Дневной лимит убыткаРеализованный плюс нереализованный с начала сессииПлохой день, складывающийся в катастрофический
Стоп по просадкеОт пика эквити к текущемуМедленное кровотечение, которого никто не заметил
Потолок плечаЖёсткий предел ниже биржевогоЭффективное плечо, ползущее вверх по мере падения эквити
Расстояние до ликвидацииМинимальный буфер по каждой позицииБиржа закрывает позицию за вас и по своей цене
Серия убытков по символуАвтоблэклист после N убытковИнструмент, который стратегия перестала понимать

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

Позиции коррелируют, и риск-движок обязан это знать

Самый частый тихий отказ: пять позиций по одному проценту риска каждая, описываемые как пять процентов риска. На коррелированном рынке это одна позиция с риском в пять процентов, и стопы у них сработают в одну минуту.

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

Kill switch должен быть тупым

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

Требования, которые звучат очевидно и постоянно нарушаются:

  • Работает с высшим приоритетом запросов — отмены уходят раньше всего остального.
  • Доступен вручную с пульта одной командой.
  • Идемпотентен. Второе срабатывание не делает ничего.
  • Работает, когда слой стратегии завис, потому что не обращается к нему.
  • Протестирован. Kill switch, который никто не нажимал, — это гипотеза.

Нереализованное считается

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

Каждый отказ логируется

Риск-движок, который молча отклоняет, неотличим от сломанной стратегии. Записывайте намерение, правило, которое его отклонило, и состояние на тот момент. Это та же дисциплина, что запись причины несработавшего сигнала: «бот сегодня ничего не делал» превращается из тревоги в запрос.

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

Статья описывает инженерную практику. Это не инвестиционная рекомендация. Vizanix разрабатывает программное обеспечение и не обещает торговую доходность.

Блог

Читать дальше

Хотите такое у себя?

Мы пишем о том, что строим. Если нужно построить — напишите, разбор бесплатный.

Бриф

Получить оценку проекта

Четыре вопроса и контакт. Предоплата для разговора не нужна — если задача не наша, скажем сразу.

01Что вам нужно
02Биржа
03Рынок
04Стратегия
05Контакты

Проще написать напрямую? Telegram @vx_ceo

Обсудить систему