Почему Reinforcement Learning торговля проваливается на живом рынке
Обучение с подкреплением для крипто красиво выглядит на истории: агент выходит в плюс, кривая доходности ровная, просадка держится в заданных границах. Ломается всё на переходе к живым сделкам, потому что рынок не стационарен: меняются ликвидность, волатильность и состав участников, а среда, на которой агент учился, осталась в прошлом.
Первое узкое место — переобучение на исторических данных. Когда награда поощряет прибыль на каждом шаге, агент заучивает микроструктуру конкретных периодов: точные уровни, характер отскоков, тайминг входов. Эти зависимости не воспроизводятся, поэтому агент теряет доходность на реальном рынке не из-за слабой идеи, а потому что оптимизировался под шум, которого в реальных данных уже нет.
Второе — просадка при смене режима рынка. Стратегия поведения, устойчивая во флете, разваливается в тренде или на резком движении. Штраф за риск и лимит на размер позиции помогают лишь частично: если смена режимов в обучающем наборе встречалась редко, агент просто не отработал реакцию на неё.
Третье — нестабильное исполнение сделок. Проскальзывание, комиссии, частичное исполнение и задержка между сигналом и сделкой на истории идеализированы, а в реальности съедают преимущество целиком. Разбираем ниже, как это закрывается: от дизайна награды и проверки на отложенных периодах до контуров контроля риска на живом счёте.
Что даёт обученный агент: эффект в измеримых величинах
Агент для торговли — не «чёрный ящик», а политика с набором измеряемых характеристик. Эффект снимаем в той же среде, где шло обучение, и сравниваем с базовой стратегией: доля времени в рынке, глубина просадки, задержка реакции на волатильность, соблюдение лимитов. Среду описываем через Gymnasium, поэтому метрики воспроизводимы на любом историческом отрезке.
- Устойчивость к режимам рынка. Тренировка и валидация идут раздельно на отрезках с трендом, флэтом и высокой волатильностью. Политика, переобученная на одном режиме, отсеивается на проверке, а не на реальном счёте.
- Снижение просадки. Штраф за просадку встроен в функцию награды и растёт нелинейно. На валидации это даёт просадку в 1,5–2 раза меньше базовой при сопоставимой доходности.
- Управление риском в реальном времени. Размер позиции и стоп пересчитываются на каждом шаге из текущей волатильности. Слой исполнения проверяет лимиты, объём и цену до отправки заявки — сбой модели не превращается в незапланированную позицию.
- Мониторинг и журналирование решений. Каждое действие пишется вместе с состоянием, наградой и причиной срабатывания ограничения. По журналу восстанавливается, почему агент вошёл или вышел.
Деградацию видно по метрикам раньше, чем она станет убытком: расхождение текущих показателей с валидационными запускает переобучение по регламенту, а не по факту потерь.
Сравнение подходов: обучение с подкреплением и ручные стратегии
Выбор между обучением с подкреплением и ручными правилами — это не вопрос вкуса, а вопрос того, как формализована цель и сколько данных есть на входе. Обучение с подкреплением требует среды, в которой агент может прогонять эпизоды и получать награду; обучение на размеченных данных работает там, где задача сводится к предсказанию; подбор параметров правил нужен, когда логика уже описана, но не настроена. Ниже — четыре варианта, между которыми реально выбирают, и их инженерные границы.
Четыре варианта и их границы
| Вариант | Когда уместен | Чем ограничен |
|---|---|---|
| Обучение с подкреплением | Цель выражается через награду, есть среда для прогона эпизодов и запас данных под разные режимы рынка | Агент находит лазейки в функции награды; политика плохо объяснима, поведение расходится с историей при смене режима |
| Обучение на размеченных данных | Задача сводится к предсказанию: вероятность движения, классификация состояния рынка, фильтр входов | Разметка фиксирует прошлое распределение; модель не учитывает комиссии и влияние собственных заявок |
| Подбор параметров правил | Логика входа и выхода уже описана, параметров немного, нужна устойчивость, а не максимум на истории | Переобучение: на подгонке результат растёт, на отложенных данных падает |
| Ручные правила и индикаторы | Мало инструментов, решения редкие, важна прозрачность каждого входа | Дисциплина и скорость реакции; не масштабируется на десятки инструментов |
На практике чаще всего выигрывает гибридный подход к стратегии: обучение с подкреплением отвечает за выбор момента и размера позиции, а ручные правила и индикаторы задают жёсткие границы риска, запреты на торговлю в отдельных состояниях и лимиты на серию убытков. Проверяем такие связки скользящей проверкой на последовательных отрезках и сравнением с простым эталоном — если агент не обходит его на отложенных данных, в продакшн он не идёт.
Этапы работы: от постановки задачи до передачи агента
В проектах Reinforcement Learning для торговли работа начинается не с кода, а с разбора задачи: какие инструменты и на каком горизонте торгуем, какой риск неприемлем. На этом же шаге фиксируем метрики — доходность с поправкой на просадку, долю прибыльных сделок, максимальную просадку. Без формальных метрик обучение нечем остановить, а результат нельзя принять.
- Разбор задачи и метрик. Согласуем горизонт, набор инструментов и ограничения по риску; метрики становятся критерием остановки обучения и приёмки агента.
- Подготовка исторических данных. Собираем котировки и стакан из открытых источников (Binance), убираем разрывы и выбросы, приводим ряды к единой частоте — иначе агент выучит шум вместо закономерностей.
- Проектирование среды обучения. Воспроизводим логику биржи: комиссии, проскальзывание, частичное исполнение заявок. На идеальных условиях агент показывает прибыль, которой в реальности нет.
- Настройка функции вознаграждения. Балансируем прибыль и штраф за риск: при смещённых весах агент либо уходит в бездействие, либо в избыточную торговлю, где комиссия съедает результат.
- Проверка перед реальным запуском. Прогон на отложенном отрезке истории и в симуляции на аномальных рыночных периодах, сравнение с базовой стратегией.
- Передача и сопровождение агента. Отдаём код, конфигурации среды, обученную модель и документацию по метрикам; остаёмся на связи после запуска.
Каждый шаг закрывается проверяемым артефактом: отчётом по данным, конфигурацией среды, кривой обучения, протоколом проверки. Вернуться на шаг назад дешевле, чем разбирать убытки на живом счёте.
Политики риска, конфигурации и документация агента
Обученный агент без эксплуатационного контура бесполезен: его нельзя воспроизвести, проверить или безопасно остановить. Поэтому вместе с моделью заказчик получает весь набор артефактов — от конфигураций запуска до инструкций для дежурной команды.
- Конфигурации запуска: параметры среды, состав инструментов, горизонт решения и начальные условия. Один и тот же набор данных с одной конфигурацией воспроизводит поведение агента.
- Политики ограничения риска: предел просадки за сессию, дневной стоп, максимальный размер позиции и частота сделок. При срабатывании агент переходит в режим закрытия, а не продолжает набирать позицию.
- Схемы интеграции с биржей: потоки ордеров, котировок и состояния счёта с указанием точек отказа, таймаутов и порядка повторной отправки запроса.
- Журналы и отчётность: по каждому решению сохраняются наблюдение, действие, награда и фактический результат исполнения — из них собирается отчёт по доходности и риску.
- Инструкции для команды: порядок запуска, остановки и отката версии политики, действия при расхождении состояния счёта с ожидаемым.
- Регламент дообучения: на каких данных обновляется политика, какие метрики считаются пороговыми и когда версия откатывается к предыдущей.
- Набор проверок перед выпуском: прогон на исторических данных, симуляция задержек исполнения и поведение при обрыве связи с биржей.
Каждый пункт — это файл, схема или документ, который остаётся в вашем репозитории и читается без нашего участия. Передача закрыта, когда ваша команда сама запускает, останавливает и откатывает агента, а журналы подтверждают, что политики риска сработали.
Кейс: агент, устойчивый к смене режима торговли
Что было до
Первую версию агента обучали на истории одного года, взятой с Binance, и на обучающем отрезке она выглядела ровно: просадка 12%, стабильный прирост. На смене режима с тренда на боковик поведение развалилось — модель продолжала набирать позиции по инерции, просадка выросла до 38%, а доля прибыльных торговых дней упала ниже половины. Ошибка была не в архитектуре, а в данных: агент видел одно состояние рынка и не имел признаков, по которым отличает его от другого.
Что изменили
Историю разметили по режимам — тренд вверх, тренд вниз, боковик, повышенная волатильность — и добавили эти признаки в наблюдение агента. Обучение пересобрали так, чтобы эпизоды чередовались между режимами, а награда штрафовала за концентрацию в одном сценарии: выигрывать за счёт одного удачного периода стало невыгодно. На этапе работы добавили ограничитель, который снижает размер позиции при смене режима, пока агент не наберёт статистику по новым условиям.
Что стало
На том же контрольном отрезке, что и раньше, просадка составила 14% вместо 38%, доля прибыльных дней выросла с 54% до 66%, отношение доходности к риску — с 0.7 до 1.8. Важнее цифр изменилось поведение: агент сам сокращает экспозицию в незнакомом режиме и возвращается к обычному размеру позиции, когда распределение доходностей снова совпадает с обучающим. Ручных переключений между стратегиями больше нет.
Что делать, если уже развёрнут готовый торговый алгоритм
Ответ зависит от того, сколько решений в текущей системе описывается явными правилами, а сколько — рыночным шумом. От этого зависит судьба готового алгоритмического робота: надстроить обучение сверху, перенести логику на обучение или заменить контур целиком.
Первый сценарий — оставить правила и добавить обучение сверху. Робот торгует по прежним условиям, а агент подбирает только параметры исполнения: размер позиции, пороги входа, фильтры волатильности. Совместимость с текущими настройками здесь максимальная — контур не трогаем, обучение работает в узком пространстве действий.
Второй сценарий — перенос логики на обучение. Прежние правила превращаются в среду: функция награды штрафует за нежелательные действия, ограничения на действие задают рамки риска. Доработка существующего агента идёт итеративно — на истории, затем на потоке, где поведение сравнивают с эталоном из старых правил. Перенос оправдан, когда правила противоречат друг другу и настройка порогов не сходится.
Третий сценарий — заменить контур целиком. Его берут, когда правила убыточны сами по себе или их слишком много, чтобы удержать в голове. Тогда важнее внешний контроль рисков: лимиты, стоп-условия и журнал решений живут вне агента — обученная политика не объясняет каждый шаг.
Сценарий выбираем по одному замеру: какая доля решений описывается явными правилами. Много — надстраиваем обучение, мало — переносим и переобучаем. В любом варианте нужен воспроизводимый симулятор и журнал сделок, иначе эффект обучения не отделить от изменения рынка.
Технические сомнения: переобучение, отклик, устойчивость
Главное возражение к обучению с подкреплением — что рост на истории не переносится на живой рынок. Чаще всего причина не в самой идее, а в утечке будущего в признаки и подгонке под один режим волатильности: агент заучивает конкретный отрезок вместо поведения рынка.
Мы разводим проверку по времени: обучение на одном окне, настройка на следующем, финальная оценка — на отложенном отрезке, которого агент не видел. Модель обязана пройти одинаковые пороги на всех трёх этапах, иначе в работу не идёт.
Как отличить переобучение агента от смены рынка?
Смотрим на разрыв между результатом на обучении и на отложенном отрезке — он и есть признак переобучения. Дополнительно сверяем распределение признаков и режим волатильности: если сместился рынок, нужна переподготовка модели, а не пересмотр правил.
Что происходит с открытыми позициями во время переподготовки модели?
Переподготовка идёт на копии модели, торговый контур продолжает работать на текущей версии. Новая вступает в работу только после прохождения порогов и прогрева на живых данных; при расхождении возвращаемся к предыдущей без паузы в торговле.
Какую задержку принятия решения считаем допустимой?
Бюджет считаем от прихода рыночных данных до подтверждения заявки, с запасом на сеть и биржу. Если решение не укладывается в задержку принятия решения, заявка не отправляется: пропущенный вход дешевле исполнения по цене, которой уже нет.
На чём держится защита капитала в нестабильном рынке?
На ограничителях, а не на точности прогноза: лимит на размер позиции, дневной стоп по просадке, автоматическое снижение риска при расширении спреда. Они срабатывают независимо от того, права модель в отдельной сделке или нет.
Обсудим задачу: вернёмся с оценкой и планом работ
Присылайте вводные по задаче — этого достаточно, чтобы вернуться с оценкой и планом работ, а не с уточняющими вопросами. Обучение с подкреплением чувствительно к качеству истории и к тому, как формализована цель агента, поэтому конкретика на входе напрямую сокращает сроки и определяет состав команды.
Что полезно прислать:
- описание торговой идеи: инструменты, горизонт удержания позиции, что считаете хорошим результатом;
- историю котировок или сделок в любом читаемом формате — выгрузка из терминала, CSV, архив с биржи;
- ограничения по риску: допустимая просадка, лимит на сделку, правила аварийной остановки;
- контур запуска — тестовый счёт, песочница биржи или реальный счёт с ограниченным объёмом;
- кто остаётся на вашей стороне после передачи: аналитик, разработчик, дежурная смена;
- где будут храниться данные и считаться модель — ваши мощности или наш контур.
Разбор проходит в один заход: смотрим данные, проверяем, воспроизводима ли среда, и где в обучении утечка будущего. В ответ возвращаем оценку, план работ и этапы: подготовка данных, среда симуляции, обучение агента, проверка на периоде вне обучающего окна, передача результата с документацией и запуском у вас.
Состав команды расписываем по ролям с загрузкой на каждом этапе, чтобы вы видели, кто и за что отвечает. Первый ответ по вводным — в течение одного-двух рабочих дней, оценка и план работ — в течение трёх-пяти рабочих дней после разбора. Если данные сырые, скажем об этом сразу и перечислим, что нужно дособрать до старта.







