Почему RL-агент для трейдинга ломается на живом рынке
Агент на A2C/A3C учится максимизировать среднюю награду по траекториям из обучающей выборки. Рынок при этом нестационарен: меняются режим волатильности, ликвидность и состав участников, а история содержит всего одну реализацию процесса. Политика, выученная под конкретный режим, на новом ведёт себя как случайная — отсюда провал RL-агента в трейдинге при запуске в реальном контуре.
Дороже всего обходится расхождение теста и реальной торговли по издержкам исполнения. Среда считает сделку по цене закрытия свечи, а реальный контур добавляет спред, комиссию и проскальзывание, плюс задержку до исполнения — воспроизвести это можно только по логике конкретного брокера, будь то биржевой доступ или терминал вроде MetaTrader. Если средняя прибыль на сделку сопоставима с трением, стратегия уходит в минус без единой ошибки в модели.
Ещё один источник — переобучение на исторических данных: отбор признаков по всему ряду, нормировка, посчитанная через будущее, подбор параметров на том же отрезке, что и контроль. Красивая кривая чаще означает утечку информации, чем найденную закономерность. Лечится честной схемой валидации: скользящее окно без перекрытия, отдельный период на контроль, проверка на смене режима.
На реальном счёте это даёт нестабильную доходность: серия плюсовых сделок сменяется просадкой, которую агент не распознаёт. Разбираем, как это закрывается.
Что даёт обучение с подкреплением: эффект в метриках
Эффект обучения с подкреплением измеряем не доходностью в вакууме, а устойчивостью поведения агента. Асинхронные актор-критик методы, восходящие к работам DeepMind, позволяют прогонять десятки копий среды с разными рыночными условиями параллельно — агент учится классу режимов, а не одной удачной траектории. Смена тренда на флэт или рост волатильности перестаёт требовать переписывания правил с нуля.
Устойчивость стратегии проверяем на отложенных периодах: доля сценариев, где поведение совпало с ожидаемым, динамика коэффициента Шарпа, число нарушений лимита по размеру позиции. Рандомизация стартовых условий и комиссий не даёт политике запомнить конкретную историю — расхождение между обучением и проверкой падает до единиц процентов.
Контроль просадки зашит в награду: штраф за риск, ограничение доли капитала в позиции, обязательные стоп-условия. Максимальная просадка становится задаваемым параметром и проверяется стресс-прогонами на кризисных отрезках, а не остаётся следствием удачи на истории.
Снижение ручных правок — прямое следствие: смена режима рынка обрабатывается дообучением политики, а не правкой кода, цикл занимает минуты, метрики сравниваются до и после. Адаптация к режиму держится на ансамбле сред и детерминированном применении политики — одинаковые входные данные дают одинаковое решение, поэтому результат воспроизводим в тестовом контуре. В отчёте фиксируем число ручных вмешательств за месяц, максимальную просадку, долю времени вне рынка и время дообучения.
Сравнение подходов: A2C, A3C и обучение на истории
Выбор между A2C, A3C и обучением на истории — это выбор между устойчивостью градиента, скоростью набора опыта и ценой проверки гипотезы. Синхронный актор-критик обновляет политику по согласованному шагу всех сред, асинхронный собирает опыт независимыми копиями агента, а офлайн-датасет даёт стартовую политику вообще без обращения к среде.
На практике эти режимы не конкурируют, а стоят в одном конвейере: котировки прогревают политику, симулятор уточняет поведение, а выбор между синхронным и асинхронным обучением определяется тем, сколько параллельных сред вы реально можете держать и насколько критична воспроизводимость запуска.
| Режим | Когда подходит | Где упирается |
|---|---|---|
| A2C, синхронное обучение | Нужен ровный градиент и повторяемый запуск; есть несколько параллельных сред | Каждый шаг ждёт самую медленную копию; масштабируется хуже асинхронного |
| A3C, асинхронное обучение | Много узлов, нужен быстрый набор опыта из разных состояний рынка | Устаревшие градиенты от отставших копий снижают устойчивость, отладка сложнее |
| Обучение на истории | Нет доступа к среде; нужен прогрев политики и проверка гипотез на длинном ряде котировок | Упирается в объём выборки: редкие режимы рынка представлены слабо, обратной связи нет |
| Симулятор на исторических данных | Нужна проверка с учётом комиссий и проскальзывания перед реальными сделками | Реализм модели исполнения определяет, перенесётся ли результат в боевой контур |
Поэтому объём исторических данных — не самоцель, а ограничитель: чем реже нужный режим рынка встречается в выборке, тем дороже подтвердить, что агент научился именно тому, что мы имеем в виду.
Этапы внедрения: от аудита данных до передачи модели
Порядок работ фиксируем до старта: агент обучения с подкреплением чувствителен к качеству исторических данных и к тому, как описана среда исполнения. Ошибка в разметке сделок или в функции вознаграждения проявляется не на обучении, а на реальных сделках — поэтому каждый этап закрываем проверяемым артефактом, а не устным «готово».
- Аудит данных. Сводим историю котировок и сделок по таймфреймам, ищем пропуски, дубликаты, сдвиги времени и признаки утечки будущих значений. На выходе — очищенный набор, описание разрывов и вердикт о пригодности периода для обучения.
- Схема обучения. Согласуем пространство действий (вход, выход, размер позиции), функцию вознаграждения с учётом комиссий и проскальзывания, длину эпизода и набор признаков. Здесь же определяем, что считаем успехом: доходность с поправкой на риск, а не абсолютную прибыль.
- Сборка окружения. Собираем воспроизводимую среду: закреплённые зависимости, эмулятор брокера с задержками исполнения, журналирование прогонов. Любой запуск повторяется из одной конфигурации в репозитории.
- Обучение и настройка. Прогоняем варианты A2C/A3C, сравниваем по устойчивости кривой и числу эпизодов до сходимости, отбираем конфигурацию без переобучения на отдельные режимы рынка.
- Проверка на отложенном периоде. Тестируем скользящим окном: обучение на одном отрезке, проверка на следующем, которого модель не видела. Смотрим просадку, поведение в тренде и во флете, а не одну итоговую цифру.
- Передача модели и сопровождение. Отдаём код, веса, конфигурации, отчёт о проверках и инструкцию по переобучению. Описываем мониторинг деградации и порядок отката на предыдущую версию.
Этапы идут последовательно, но с возвратами: если аудит данных выявил утечку, схема обучения пересобирается до следующего запуска.
Артефакты внедрения: конфигурации, модели и регламенты
После внедрения у заказчика остаётся не «обученная модель», а воспроизводимый контур: по нему агента можно переобучить, откатить и передать другой команде без авторов. Комплект фиксируем в акте приёмки, и список закрытый — если пункт не воспроизводится на вашем стенде, работа не принята.
- Файлы конфигурации — гиперпараметры обучения, состав инструментов, окно признаков, лимиты риска и пороги автостопа; версионируются вместе с кодом.
- Описание схемы обучения — число параллельных сред, частота синхронизации весов, критерии остановки и правила отбора контрольных точек модели.
- Журналы прогонов — метрики по эпохам, сохранённые веса, отчёт по доходности и просадке на отложенном периоде.
- Разграничение доступа — отдельные роли на обучение, исполнение сигналов и изменение риск-лимитов; ключи к торговому шлюзу хранятся в секрет-хранилище, а не в репозитории.
- Инструкции по эксплуатации — порядок запуска, режим «только сигналы», откат на предыдущую контрольную точку одной командой.
- Регламент переобучения — триггеры (дрейф распределения признаков, деградация метрик), периодичность и порядок ввода новой версии в работу.
- Документация по данным — словарь признаков, источники, правила обработки пропусков и корпоративных действий.
Смысл перечня не в отчётности: по этим файлам новая команда воспроизводит обучение и продолжает работу без нас.
Кейс: портфель инструментов, метрики до и после внедрения
До: политика на одном активе
В этом кейсе — портфель из двенадцати инструментов: акции, фьючерсы на индекс, валютные пары. Агент обучался на одном активе, и при переносе политика уходила в перекос: до 70% веса забирал самый ликвидный инструмент. На отложенном участке истории Шарп держался около 0.6, максимальная просадка доходила до 28%.
После: что изменили и как считали
Собрали общую политику на весь портфель: в состояние добавили признаки самого инструмента — класс, ликвидность, корреляцию с индексом, — а награду сделали риск-скорректированной со штрафом за концентрацию. Обучали семейством актор-критик (A2C/A3C): несколько параллельных сред прогоняли разные участки истории и режимы волатильности, котировки и стаканы брали из Interactive Brokers.
Метрики считали только на отложенном участке и сравнивали с равновзвешенным портфелем. Шарп 0.6 → 1.3, максимальная просадка 28% → 11%, доля времени в рынке упала с 85% до 60% — агент чаще ждал. Вклад инструментов выровнялся: ни один не даёт больше пятой части результата.
Отдельно прогнали стресс-сценарии: разрыв ликвидности, гэп на открытии, затяжной боковик, трендовый разворот. На каждом агент терял меньше базовой стратегии, а восстановление занимало меньше времени.
Чем RL-агент для трейдинга отличается от стратегии на правилах
Стратегия на правилах — это явно записанное условие: если цена пробила уровень, волатильность ниже порога, а позиция пуста, покупаем. Логику можно прочитать в коде и объяснить риск-комитету. Обучение с подкреплением убирает условие и ставит на его место политику: агент видит состояние рынка и счёта, выбирает действие и получает награду. Так в алгоритмической торговле появляется модель, которая сама определяет, какие признаки значимы, а какие — шум.
Формально задача описывается как марковский процесс. Состояние — окно рыночных признаков, текущая позиция, нереализованный результат и свободные средства. Действия — вход, удержание, выход и размер позиции. Награда — доходность шага с поправкой на просадку и издержки. Агент на A2C/A3C обучается через актора-критика: актор предлагает распределение действий, критик оценивает перспективность состояния, градиент правит политику. Готового «если — то» в решении нет: правило вытеснено параметрами, настроенными на данных.
Граница заметнее всего на новых данных. Набор условий, подобранный на истории, ломается вместе со сменой режима: одни и те же пороги в тренде и в боковике дают разное качество, а переписать их можно только руками. Агент переносит поведение, если признаки описывают режим, а не конкретный отрезок. Но гибкость оборачивается своими отказами: политика вырождается в постоянное удержание, когда награда не учитывает издержки, либо подгоняется под исторические аномалии.
Поэтому обучение идёт в паре с дисциплиной проверки. Награда включает комиссию и проскальзывание, качество измеряется на последовательных временных отрезках, а не на перемешанной выборке, отдельно считается деградация политики при смене режима. Рабочая схема — гибрид, а не замена: агент принимает решения, жёсткие правила остаются лимитами по позиции, просадке и частоте сделок.
Технические сомнения: переобучение, проскальзывание, риск
Перед стартом инженерные команды заказчика задают один и тот же набор вопросов: как убедиться, что модель не подогнана под прошлое, как учтено реальное исполнение заявок и кто отвечает за риск при сбое. Ниже — ответы, которые мы проверяем на прототипе до промышленного запуска, а не декларируем на словах.
Как отличить рабочую модель от переобученной?
Делим историю по времени, а не случайно: обучение идёт на одном отрезке, проверка — на следующем, которого агент не видел. Смотрим не на итоговую доходность, а на разрыв между этими отрезками и на поведение при смене режима рынка. Если результат держится при завышенных издержках исполнения и на инструментах, не участвовавших в обучении, — модель устойчива. Если рассыпается, возвращаемся к набору признаков и регуляризации, а не «докручиваем» её подгонкой.
Как учитывается проскальзывание и реальное исполнение?
Симулятор исполняет заявку не по цене закрытия, а с учётом спреда, комиссии и задержки между решением и попаданием ордера в стакан. Добавляем случайную задержку и ограничение по доступному объёму, чтобы агент не рассчитывал на полное заполнение. Политика, которая выгодна только на бумаге, отсеивается ещё на этапе проверки.
Что делать, если история сделок короткая?
Короткая история — ограничение статистики, а не повод ждать. Расширяем выборку за счёт других инструментов и таймфреймов, проверяем в скользящем окне и на синтетических сценариях. Честно фиксируем, что при малой выборке у части выводов шире разброс, и на старте делаем ставку на контроль риска и минимальный объём позиции.
Кто и как контролирует риск?
Риск живёт вне агента. Отдельный слой правил ограничивает размер позиции, дневную просадку, число сделок и удержание через новости и выходные. Агент предлагает действие, но ордер проходит через модуль контроля: при срабатывании лимита торговля останавливается, а не продолжается в надежде отыграться.
Как проходит подключение к торговой системе?
Через программный интерфейс брокера с отдельным ключом и урезанными правами — без вывода средств. Сначала идёт длительный прогон в режиме наблюдения: агент формирует сигналы, мы сверяем их с фактическими ценами и реальными задержками. Только после расхождения в пределах допуска включаем минимальный объём. Обратное переключение в ручной режим — одним действием.
Обсудим задачу и вернёмся с оценкой и планом внедрения
Чтобы вернуться с оценкой проекта и планом внедрения, а не с общими словами, нам нужна ваша картина рынка и инфраструктуры. Ниже — минимальный набор, которого обычно достаточно; остальное уточним на созвоне и при необходимости запросим точечно.
- Данные: инструмент, таймфрейм, глубина истории, тик-данные или бары, источник выгрузки и есть ли пропуски в рядах.
- Ограничения торговли: допустимый риск на сделку, предельная просадка, лимиты по позиции, периоды, когда торговля не ведётся.
- Контур исполнения: свои серверы или облако, наличие тестового режима, как устроен шлюз к брокеру и кто управляет доступами.
- Что уже работает вручную: правила входа и выхода, которые дают результат сейчас, — на них схема обучения опирается надёжнее, чем на слепой перебор.
- Критерии приёмки: по какой метрике вы считаете модель успешной — доходность с поправкой на риск, доля прибыльных сделок, поведение на падающем рынке.
- Ответственные с вашей стороны: кто отвечает за данные, кто принимает модель, кто согласует риск-рамки.
Вернёмся со схемой обучения (среда, набор признаков, функция вознаграждения, проверка на отрезке, не участвовавшем в обучении), планом внедрения по этапам с точками контроля и регламентом сопровождения модели — мониторинг дрейфа, переобучение, ручная остановка торговли.
Опишите задачу — вернёмся с оценкой и планом.







