Чему меня научила просадка в 99,99% при создании торговых ботов
Самый первый торговый бот, который я запустил на реальном счёте, потерял почти всё. Win rate: 25%. Максимальная просадка (max drawdown): 99,99%. Он не взорвался потому, что рынок оказался жесток. Он взорвался потому, что я построил его так, как большинство строит своего первого бота — как prototype, скреплённый моими собственными мнениями.
Это история о том, почему я удалил каждое ручное правило из системы, которая пришла ему на смену, и чему это решение научило меня в отношении того, где на самом деле место человеческому суждению в автоматизированной стратегии.
Иллюстрация, а не реальные данные о результатах. Обвал был вызван не одной плохой сделкой — а тысячей мелких, уверенных и ошибочных.
Удобная ошибка
Когда вы только начинаете, жёстко зашитые правила ощущаются как контроль. Stop-loss на 3%. Take-profit на каком-нибудь круглом числе. Position sizing по формуле, вычитанной в каком-то блог-посте. Каждое правило по отдельности кажется разумным. Вместе они образуют хрупкий механизм, который никогда не видел той ситуации, с которой ему предстоит столкнуться.
Моя первая система была полна таких правил. К тому же все расчёты она выполняла на CPU, в циклах, как пишут одноразовый скрипт. Всё это не имело значения, пока я гонял backtest на чистых, дружелюбных данных. И всё это стало иметь значение в тот момент, когда появились реальные условия — fees, slippage, возможность liquidation. Жёсткий стоп в 3%, который на бумаге выглядит дисциплинированным, превращается в механизм, который продаёт при каждом всплеске шума и не даёт идее дышать. Просадка (drawdown) не была одной катастрофической сделкой. Это была тысяча мелких, уверенных и ошибочных решений.
Неудобный урок
Урок состоял не в том, чтобы «лучше настроить stop-loss». Он состоял в том, что бутылочным горлышком был я сам. Каждый жёстко зашитый порог был мной, замораживающим догадку в системе и заставляющим будущее ей подчиняться.
Поэтому в следующей системе я установил правило о правилах: внутри той части модели, которая действительно обучается, нет вообще никаких ручных правил. Ни stop-loss, ни take-profit, ни position sizing, ни leverage. Если решение влияет на то, как ведёт себя стратегия, модель должна выучить его из последствий своих действий — а не унаследовать от моей интуиции. (Безопасность на уровне системы — лимиты экспозиции, kill-switch — это отдельный слой, и он остаётся. Уходит именно моё ручное написание сделки.)
Это звучит радикально, и так оно и есть. Но это также навязывает дисциплину, которая незаметно устраняет несколько типичных ошибок новичков:
- Никаких prototype. Prototype — это обещание исправить всё потом, а «потом» — это место, где живут просадки в 99,99%. Всё пишется так, как будто это уже настоящая система.
- Никаких magic number. Если значение не выучено, оно живёт в config-файле, где я могу его видеть, версионировать и обосновать, — а не зарыто в коде в виде числа, причину которого я забуду.
- Backtest должен причинять боль. Fees, slippage и liquidation моделируются, потому что backtest, который не может терять деньги так же, как реальный счёт, — это просто льстивая симуляция.
Где человеку всё ещё есть место
Удаление ручных правил не убирает человека. Оно его перемещает. Я больше не решаю, что делает модель в конкретный момент. Я решаю, что значит «хорошо» — какой reward она получает, в каких условиях обучается, какие издержки обязана учитывать. Проектирование этой objective function — самая человеческая часть всего предприятия, и ошибиться в ней гораздо опаснее, чем в любой отдельной плохой сделке, потому что модель будет оптимизировать ровно то, о чём вы попросили, а не то, что вы имели в виду.
Эту сделку я заключал бы каждый раз: перестать притворяться, будто я могу вручную прописать решение для каждого будущего состояния, и вместо этого потратить эти усилия на определение того мира, в котором система учится.
Вывод
Просадка в 99,99% — дорогой учитель, но понятный. Бот провалился не потому, что ему не хватало правил. Он провалился потому, что у него были мои правила — жёсткие, не проверенные реальностью и подменяющие обучение вместо того, чтобы его обеспечивать.
Если вы строите свою первую систему, самое полезное, что вы можете удалить, — это ваша собственная уверенность.
Это часть 1 продолжающегося анонимного журнала о создании торговой системы на основе обучения с подкреплением (RL). Он о методе и ошибках, а не о сигналах — ничто здесь не является инвестиционной рекомендацией, и никакие детали стратегии не раскрываются.