Почему DQN трейдинг ломается на реальном рынке
Агент, обученный на исторических котировках, выдаёт ровную кривую на отложенной выборке — и уходит в просадку в первые недели реальной торговли. Дело не в ошибке реализации: глубокой Q-сети хватает ёмкости, чтобы запомнить конкретные траектории цены вместо закономерности, которая за ними стоит.
Сдвиг рыночного режима ломает агента первым. Волатильность, ликвидность и микроструктура меняются, а буфер воспроизведения ещё долго отдаёт переходы из прежнего режима — сеть продолжает выбирать действия по уже неверной функции ценности. Рядом работает запаздывание сигнала: наблюдение приходит с задержкой, исполнение сдвигается ещё позже, и вознаграждение считается за состояние, которого на момент сделки уже нет.
Переобучение агента маскируется под удачную настройку. Если вознаграждение считать по исторической кривой без издержек, сеть выучивает шум данных — спред, проскальзывание, разрывы ликвидности — и на новых данных просадка стратегии оказывается глубже любого разумного лимита риска.
Поэтому устойчивость закладывают в саму постановку задачи: среда с честной задержкой и издержками, проверка скользящим окном, признаки режима в наблюдениях, штраф за лишний оборот. Дальше разбираем, как это закрывается на практике.
Что меняется после внедрения обученного агента
После обучения агент работает как измеримый контур принятия решений: оценка состояния рынка, выбор действия, переоценка позиции на следующем шаге. Метрики торгового агента мы считаем одинаково — и на исторических прогонах, и на живом потоке, чтобы сравнивать поведение до и после внедрения.
Доля решений без ручного вмешательства
Агент на базе DQN закрывает типовые сценарии сам: выставляет и переносит заявки, сокращает позицию при росте волатильности, выходит по достижении заданного риска. Автоматизация торговых решений выводит на ручное управление только исключения — разрыв ликвидности, остановку торгов, новостной шок. В общем потоке доля автоматических решений доходит до 80–90%, а оператор переключается с исполнения на контроль отклонений.
Устойчивость стратегии и снижение просадки
Обучение на нескольких рыночных режимах вместо одного даёт устойчивость стратегии: политика не разваливается при смене тренда на боковик. Снижение просадки на тестовом отрезке — в 1.5–2 раза против базовой эвристики, а реакция на смену режима измеряется шагами модели, а не минутами ожидания оператора.
Контроль качества держим на повторяемых сценариях: прогоняем эпизоды в среде Gymnasium и сверяем распределение действий агента с ожидаемым. Один и тот же набор режимов проверяет политику и до вывода в реальный контур, и после обновления модели — расхождение метрик видно сразу.
DQN трейдинг: режимы работы и ограничения
Агент, обученный на одном характере рынка, теряет качество решений, когда меняется волатильность и ликвидность. Поэтому контуры обучения и исполнения разведены: политика отбирается в песочнице на исторических данных, а в реальный контур попадает только зафиксированная версия. Режим — это параметр конфигурации, а не отдельная сборка.
| Режим | Когда подходит | Ограничения |
|---|---|---|
| Песочница на истории | Первичная настройка, проверка гипотез | Политика подстраивается под прошлые режимы рынка; проскальзывание и издержки исполнения моделируются приближённо |
| Дообучение на потоке данных | Характер рынка сменился, нужна адаптация | Риск забыть прежние режимы, нестабильность на коротких выборках |
| Теневой прогон рядом с рабочим контуром | Проверка перед выводом агента в работу | Сигналы не исполняются, оценка не учитывает реальное качество сделок |
| Работа с лимитами по риску | Агент выведен в реальный контур | Обучение с подкреплением оптимизирует среднюю награду, а не худший сценарий |
Общее ограничение обучения с подкреплением — награда, описанная в среде, не равна цели бизнеса: агент честно максимизирует то, что ему задали. Поэтому поверх политики стоит слой риск-ограничений, а состояние агента сохраняется по контрольным точкам: откат к предыдущей версии занимает минуты и не стоит накопленной статистики.
Этапы проектирования торгового агента
Порядок работ строим так, чтобы ошибка становилась видна до того, как превратится в убыточную стратегию. Сначала фиксируем цель: что считаем результатом с учётом комиссии и проскальзывания, какую просадку готовы переживать, на каком горизонте держим позицию.
- Аудит исторических данных. Проверяем полноту и связность ряда: пропуски, разрывы сессий, корпоративные события, выбросы после публикаций. Инструменты с низкой ликвидностью исключаем — агент не должен учиться на ценах, которых на рынке не было.
- Постановка функции вознаграждения. Формализуем, что оптимизирует агент: доходность с поправкой на риск, штраф за удержание позиции, лимит на вложенный капитал. Ошибка здесь — причина, почему обучение выглядит успешным, а сделки убыточными.
- Проектирование среды обучения. Собираем состояния, действия и переходы так, чтобы повторялись реальные условия: спред, комиссия, задержка исполнения. Среда воспроизводима — одинаковый запуск даёт тот же результат, иначе версии агента не с чем сравнивать.
- Обучение с контролем переобучения. Часть истории держим в стороне и используем только для валидации. Так видно, где агент выучил закономерность рынка, а где запомнил конкретный отрезок.
- Проверка агента. Прогоняем модель на отложенном периоде и на участках с иной волатильностью: тренд, боковик, резкий разворот. Смотрим просадку и поведение при проскальзывании выше привычного.
- Передача модели. Отдаём воспроизводимый запуск, конфигурацию среды, веса сети и отчёт по метрикам. Описываем, как переобучать агента на свежих данных и когда останавливать его в работе на живом рынке.
Конфигурации, отчёты и документация агента
Обученный агент без сопроводительного пакета — чёрный ящик: его нельзя ни воспроизвести, ни безопасно обновлять, ни объяснить аудиту. Поэтому передача включает не только сохранённую сеть на основе DQN, но и всю обвязку вокруг неё — от конфигурации среды обучения до регламента дообучения и мониторинга агента. Ниже перечень того, что остаётся у команды заказчика.
- Конфигурация среды обучения — описание состояния рынка, набора инструментов, горизонта прогноза и функции награды; зафиксированные файлы, по которым любой прогон воспроизводится по номеру версии, а не по памяти инженера.
- Документация агента — архитектура сети, пространство действий, препроцессинг котировок, зависимости окружения и порядок запуска: новый инженер поднимает стенд за один рабочий день.
- Схема решения — путь данных от источника котировок до заявки, точки контроля и границы ответственности между агентом и торговым контуром.
- Регламент дообучения — триггеры (смена режима волатильности, дрейф распределения доходностей), окно валидации, критерии приёмки и порядок отката на предыдущий снимок весов.
- Мониторинг агента — онлайн-метрики: просадка, доходность на риск, доля отклонённых сделок, расхождение оценки на истории и в реальном времени; пороги и порядок уведомлений.
- Отчёты обучения и проверок — журнал прогонов (награда, число сделок, время удержания позиции) и отчёт по историческим данным с разбивкой по режимам рынка.
- Карта ограничений — режимы, где агент не применяется: низкая ликвидность, пропуски в данных, аномальные разрывы, а также лимиты на размер позиции.
Кейс: агент при смене рыночного режима
Исходный агент обучался на одном режиме — спокойный тренд с низкой волатильностью. На истории он выглядел устойчиво: коэффициент Шарпа около 1,8, доля прибыльных сделок 58%. При переходе в боковик с высокой волатильностью агент продолжил держать трендовые позиции: просадка выросла до 34%, доля прибыльных сделок упала до 41%, а на редких гэпах основную часть потерь дали единичные сделки. Сеть не переобучилась — она уверенно действовала в мире, которого больше не было.
Что изменили
Пространство состояний расширили режимными признаками: скользящая волатильность, спред и метка тренд/боковик из скрытой марковской модели, которая ловит смену режима раньше, чем это видно по цене. В целевую функцию добавили штраф за удержание позиции против текущего режима, а буфер воспроизведения получил приоритет на редкие события: гэпы теперь весят в обучении столько же, сколько их реальный вклад в риск. Обучение шло через Ray RLlib на ансамбле исторических окон, двойная оценка ценности убрала переоценку действий.
Что стало
Просадка на переходах сократилась с 34% до 14%, реакция на смену режима — с шести часов до сорока минут удержания позиции. Доля прибыльных сделок на данных, которых агент не видел, держится в коридоре 52–55% в обоих режимах вместо провала до 41%. Худшая одиночная сделка на редком событии стала меньше в 2,5 раза — именно этот класс отказов и требовалось закрыть.
Сравнение считали на одинаковых периодах с последовательным переобучением на каждом окне, плюс стресс-тесты на синтетических разрывах ликвидности и журнал решений по каждой сделке. Метрики до и после получены по одной методике — поэтому их можно сопоставлять напрямую.
Чем обучённый агент отличается от ручных правил?
Ручное правило — явная функция от индикаторов: пересечение, порог, наклон. Его поведение читается глазами, и это сила: оно предсказуемо ровно настолько, насколько предсказуем режим рынка, под который его писали. Агент на обучении с подкреплением порогов не получает — он учится на переходах «состояние — действие — вознаграждение» и подбирает политику, максимизирующую накопленную награду с учётом издержек сделки.
Первое отличие — что именно оптимизируется. Набор правил описывает условия входа, но редко связывает их с размером позиции, моментом выхода и платой за спред в одно решение. DQN-агент оценивает ожидаемую ценность каждого действия в текущем состоянии, поэтому удержание, добор и выход становятся частями одной политики, а не независимыми условиями.
Второе — поведение на данных, которых не было в обучении. Правило на новом режиме рынка обычно не ломается, а тихо перестаёт работать: сигналов больше, качество ниже, заметно по просадке. Агент на сдвиге распределения состояний может деградировать резко, поэтому его выпускают с контролем входов, ограничением на действие и откатом к предыдущей версии политики.
Третье — сопровождение. Правки в правилах конфликтуют: новое условие чинит один участок и ломает соседний, регресс ищут вручную. У агента логика лежит в параметрах, поэтому изменение — это переобучение на расширенном наборе с фиксированным разбиением, проверкой на удержанном периоде и сравнением версий по устойчивости, а не по одной кривой доходности. Объяснимость даёт не формула, а разбор действий по состояниям и проверки чувствительности к признакам.
Технические вопросы перед началом работ
Перед стартом всплывают три технических сомнения: откуда брать данные, как убедиться, что DQN-агент не запомнил историю, и кто отвечает за риск на счёте. Ниже — как мы закрываем каждое инженерными процедурами, без обещаний «гарантированной доходности».
Хватит ли исторических данных и как проверить их качество?
Котировки из Interactive Brokers и внутренних архивов приводим к единой сетке: выравниваем время закрытия, восстанавливаем пропуски, помечаем периоды низкой ликвидности. DQN учится на переходах «состояние — действие — награда», поэтому один сдвинутый бар ломает цепочку — агент осваивает закономерность, которой на рынке не было.
Как понять, что агент переобучился?
Переобучение в обучении с подкреплением выглядит как рост результата на тренировочном отрезке при провале на отложенном. Держим жёсткую границу по времени, проверяем скользящим окном и сверяем поведение на разных режимах рынка: тренд, боковик, резкий откат.
Как часто нужно дообучение?
Дообучение запускаем не по календарю, а по сигналу: сместилось распределение признаков или изменилась волатильность инструмента. Новая версия проходит те же защитные проверки, что и первая, и сравнивается с текущей — иначе улучшение на одном режиме обнулит результат в другом.
Кто отвечает за риск?
Мы отвечаем за данные, архитектуру, воспроизводимость обучения и корректность проверок. Торговые ограничения — лимит на позицию, дневной стоп, запрет на новые входы при просадке — согласуются с вами и живут в контуре исполнения отдельно от модели, поэтому сбой агента не превращается в неконтролируемую просадку.
Обсудим задачу и вернёмся с планом
Прежде чем писать код, разбираем задачу на инженерном уровне: откуда идёт поток котировок, как формируется функция награды, какие ограничения по риску агент не имеет права нарушать. От этого зависит архитектура — один агент на инструмент или общий на портфель, и где проходит граница между обучением и исполнением.
- Что уточняем: глубина истории котировок, частота решений, признаки, доступные на каждом шаге без заглядывания в будущее.
- Как устроена среда симуляции: комиссии, проскальзывание, частичное исполнение заявок, поведение на разрывах ликвидности.
- По какой метрике считаем результат: доходность с поправкой на риск, просадка, устойчивость в разных рыночных режимах.
- Что считаем доказательством: агент проходит скользящую проверку на отложенных периодах и не разваливается на сдвинутых данных.
- Как агент встраивается в контур исполнения: сначала имитация без вывода заявок, затем лимиты на позицию и дневной убыток.
- Что нужно от вас: доступ к историческим данным, описание торгового контура и требований риск-менеджмента.
Возвращаемся с оценкой проекта агента и планом работ: этапы, порядок проверок и точки, где вы видите промежуточный результат. Опишите задачу — вернёмся с оценкой и планом.







