Хроника сборки: как исполнение обрастало ограничениями
Пять изменений в ядре за полтора месяца — и у всех общая черта: каждое не расширяло возможности алгоритма, а сужало их.
Полтора месяца правок в ядре. Если выложить их подряд, видно закономерность: почти каждое изменение не давало алгоритму больше свободы, а забирало её.
Право вето на сделку
Раньше цепочка была простая: стратегия видит сигнал — открывает сделку.
Между ними появился отдельный сервис. Сигнал уходит не на биржу, а в модуль-арбитр, который получает рыночный контекст и возвращает два параметра: направление и уверенность. Если направление совпадает с сигналом, а уверенность выше порога — сделка уходит на биржу. В любом другом случае сигнал игнорируется.
Обычные алгоритмы жадные: увидел паттерн — хочет торговать. Здесь появился холодный судья, который отфильтровывает шум и запрещает торговать там, где условия хуже расчётных.
Риск растёт только там, где доказана вероятность
Толпа завышает риск на эмоциях: удваивает объём после серии стопов, отыгрываясь, или после случайного профита, поймав эйфорию. Матожидание таких действий ведёт в одну сторону.
Блок управления капиталом переписан так: базовый риск на сетап жёстко зафиксирован. Мультипликатор включается только если по конкретному активу растёт winrate и историческое соотношение риска к прибыли держится выше порога — тогда риск на следующую сделку по этому тикеру повышается.
Дополнительный капитал заливается только туда, где плотность стакана и ликвидность уже доказали предсказуемость. Ломается математика актива — множитель снимается.
Отказ торговать то, что не торгуется
Прогон по топ-50 активов для финального whitelist показал жёсткую сегрегацию.
Активы с понятной структурой и плотным стаканом дают уверенный результат — даже при winrate около 31% система вытягивает в плюс за счёт честного соотношения риска к прибыли. Розничные фавориты и мемкоины сжигают капитал: winrate падает до 10–13%, просадка улетает вниз.
Причина простая. Код торгует логику маркетмейкера и зоны ликвидности. Монеты, которыми движет эмоциональная толпа и новости, — это хаотичный шум: сквизы, проскальзывания, непредсказуемая ликвидность на выходе.
Мы не стали переписывать архитектуру, чтобы бот научился торговать хаос. Если математика не работает на активе — актив убирается из пула, а не подгоняется под него стратегия.
Когда упёрлись в железо
Ядру хватало одного CPU и 512 МБ. По мере усложнения логики оценки стакана инфраструктура начала задыхаться: бот не успевал просчитывать математику по всему пулу и пропускал валидные сетапы.
Развилок было две: порезать пул активов, чтобы снизить нагрузку, — то есть согласиться на потерю; или нарастить мощности и переписать обработку данных.
Выбрали второе. Важна не сама развилка, а привычка её замечать: деградация под нагрузкой проявляется не ошибкой в логах, а тихо пропущенными сделками.
Что выглядит как хаос, а является калибровкой
Когда система перешла в режим активного сбора неэффективностей с динамическим трейлингом, со стороны это выглядело как овертрейдинг: поток мелких сделок.
Под капотом это калибровка — тестирование плотности ликвидности и подстройка весов под текущую волатильность, с жёстким трейлингом в роли ограничителя риска.
Отсюда практический вывод, который выходит за пределы трейдинга: у автоматизированной системы поведение и намерение выглядят по-разному. Смотреть надо на метрики риска, а не на количество событий.
Общий знаменатель
Пять изменений, и ни одно не сделало алгоритм умнее в смысле «может больше». Все они сужали пространство допустимых действий: вето на сделку, потолок риска, отказ от активов, отказ терять сетапы из-за нехватки ресурсов, ограничитель на трейлинге.
Надёжная автоматизация растёт не из расширения возможностей, а из аккуратно расставленных запретов.