Проектирование и разработка торгового RL-агента на базе DQN

Рынок меняет режим быстрее, чем успевают перестроиться ручные правила, и позиция теряет прибыль. Мы проектируем и обучаем торговых RL-агентов на базе DQN под ключ: от постановки задачи до отчётов о качестве решений. Заказчик получает агента, который адаптируется к смене режима и снимает с команды ручной контроль.
Часто задаваемые вопросы

Почему DQN трейдинг ломается на реальном рынке

Агент, обученный на исторических котировках, выдаёт ровную кривую на отложенной выборке — и уходит в просадку в первые недели реальной торговли. Дело не в ошибке реализации: глубокой Q-сети хватает ёмкости, чтобы запомнить конкретные траектории цены вместо закономерности, которая за ними стоит.

Сдвиг рыночного режима ломает агента первым. Волатильность, ликвидность и микроструктура меняются, а буфер воспроизведения ещё долго отдаёт переходы из прежнего режима — сеть продолжает выбирать действия по уже неверной функции ценности. Рядом работает запаздывание сигнала: наблюдение приходит с задержкой, исполнение сдвигается ещё позже, и вознаграждение считается за состояние, которого на момент сделки уже нет.

Переобучение агента маскируется под удачную настройку. Если вознаграждение считать по исторической кривой без издержек, сеть выучивает шум данных — спред, проскальзывание, разрывы ликвидности — и на новых данных просадка стратегии оказывается глубже любого разумного лимита риска.

Поэтому устойчивость закладывают в саму постановку задачи: среда с честной задержкой и издержками, проверка скользящим окном, признаки режима в наблюдениях, штраф за лишний оборот. Дальше разбираем, как это закрывается на практике.

Что меняется после внедрения обученного агента

После обучения агент работает как измеримый контур принятия решений: оценка состояния рынка, выбор действия, переоценка позиции на следующем шаге. Метрики торгового агента мы считаем одинаково — и на исторических прогонах, и на живом потоке, чтобы сравнивать поведение до и после внедрения.

Доля решений без ручного вмешательства

Агент на базе DQN закрывает типовые сценарии сам: выставляет и переносит заявки, сокращает позицию при росте волатильности, выходит по достижении заданного риска. Автоматизация торговых решений выводит на ручное управление только исключения — разрыв ликвидности, остановку торгов, новостной шок. В общем потоке доля автоматических решений доходит до 80–90%, а оператор переключается с исполнения на контроль отклонений.

Устойчивость стратегии и снижение просадки

Обучение на нескольких рыночных режимах вместо одного даёт устойчивость стратегии: политика не разваливается при смене тренда на боковик. Снижение просадки на тестовом отрезке — в 1.5–2 раза против базовой эвристики, а реакция на смену режима измеряется шагами модели, а не минутами ожидания оператора.

Контроль качества держим на повторяемых сценариях: прогоняем эпизоды в среде Gymnasium и сверяем распределение действий агента с ожидаемым. Один и тот же набор режимов проверяет политику и до вывода в реальный контур, и после обновления модели — расхождение метрик видно сразу.

DQN трейдинг: режимы работы и ограничения

Агент, обученный на одном характере рынка, теряет качество решений, когда меняется волатильность и ликвидность. Поэтому контуры обучения и исполнения разведены: политика отбирается в песочнице на исторических данных, а в реальный контур попадает только зафиксированная версия. Режим — это параметр конфигурации, а не отдельная сборка.

Режим Когда подходит Ограничения
Песочница на истории Первичная настройка, проверка гипотез Политика подстраивается под прошлые режимы рынка; проскальзывание и издержки исполнения моделируются приближённо
Дообучение на потоке данных Характер рынка сменился, нужна адаптация Риск забыть прежние режимы, нестабильность на коротких выборках
Теневой прогон рядом с рабочим контуром Проверка перед выводом агента в работу Сигналы не исполняются, оценка не учитывает реальное качество сделок
Работа с лимитами по риску Агент выведен в реальный контур Обучение с подкреплением оптимизирует среднюю награду, а не худший сценарий

Общее ограничение обучения с подкреплением — награда, описанная в среде, не равна цели бизнеса: агент честно максимизирует то, что ему задали. Поэтому поверх политики стоит слой риск-ограничений, а состояние агента сохраняется по контрольным точкам: откат к предыдущей версии занимает минуты и не стоит накопленной статистики.

Этапы проектирования торгового агента

Порядок работ строим так, чтобы ошибка становилась видна до того, как превратится в убыточную стратегию. Сначала фиксируем цель: что считаем результатом с учётом комиссии и проскальзывания, какую просадку готовы переживать, на каком горизонте держим позицию.

  1. Аудит исторических данных. Проверяем полноту и связность ряда: пропуски, разрывы сессий, корпоративные события, выбросы после публикаций. Инструменты с низкой ликвидностью исключаем — агент не должен учиться на ценах, которых на рынке не было.
  2. Постановка функции вознаграждения. Формализуем, что оптимизирует агент: доходность с поправкой на риск, штраф за удержание позиции, лимит на вложенный капитал. Ошибка здесь — причина, почему обучение выглядит успешным, а сделки убыточными.
  3. Проектирование среды обучения. Собираем состояния, действия и переходы так, чтобы повторялись реальные условия: спред, комиссия, задержка исполнения. Среда воспроизводима — одинаковый запуск даёт тот же результат, иначе версии агента не с чем сравнивать.
  4. Обучение с контролем переобучения. Часть истории держим в стороне и используем только для валидации. Так видно, где агент выучил закономерность рынка, а где запомнил конкретный отрезок.
  5. Проверка агента. Прогоняем модель на отложенном периоде и на участках с иной волатильностью: тренд, боковик, резкий разворот. Смотрим просадку и поведение при проскальзывании выше привычного.
  6. Передача модели. Отдаём воспроизводимый запуск, конфигурацию среды, веса сети и отчёт по метрикам. Описываем, как переобучать агента на свежих данных и когда останавливать его в работе на живом рынке.

Конфигурации, отчёты и документация агента

Обученный агент без сопроводительного пакета — чёрный ящик: его нельзя ни воспроизвести, ни безопасно обновлять, ни объяснить аудиту. Поэтому передача включает не только сохранённую сеть на основе DQN, но и всю обвязку вокруг неё — от конфигурации среды обучения до регламента дообучения и мониторинга агента. Ниже перечень того, что остаётся у команды заказчика.

  • Конфигурация среды обучения — описание состояния рынка, набора инструментов, горизонта прогноза и функции награды; зафиксированные файлы, по которым любой прогон воспроизводится по номеру версии, а не по памяти инженера.
  • Документация агента — архитектура сети, пространство действий, препроцессинг котировок, зависимости окружения и порядок запуска: новый инженер поднимает стенд за один рабочий день.
  • Схема решения — путь данных от источника котировок до заявки, точки контроля и границы ответственности между агентом и торговым контуром.
  • Регламент дообучения — триггеры (смена режима волатильности, дрейф распределения доходностей), окно валидации, критерии приёмки и порядок отката на предыдущий снимок весов.
  • Мониторинг агента — онлайн-метрики: просадка, доходность на риск, доля отклонённых сделок, расхождение оценки на истории и в реальном времени; пороги и порядок уведомлений.
  • Отчёты обучения и проверок — журнал прогонов (награда, число сделок, время удержания позиции) и отчёт по историческим данным с разбивкой по режимам рынка.
  • Карта ограничений — режимы, где агент не применяется: низкая ликвидность, пропуски в данных, аномальные разрывы, а также лимиты на размер позиции.

Кейс: агент при смене рыночного режима

Исходный агент обучался на одном режиме — спокойный тренд с низкой волатильностью. На истории он выглядел устойчиво: коэффициент Шарпа около 1,8, доля прибыльных сделок 58%. При переходе в боковик с высокой волатильностью агент продолжил держать трендовые позиции: просадка выросла до 34%, доля прибыльных сделок упала до 41%, а на редких гэпах основную часть потерь дали единичные сделки. Сеть не переобучилась — она уверенно действовала в мире, которого больше не было.

Что изменили

Пространство состояний расширили режимными признаками: скользящая волатильность, спред и метка тренд/боковик из скрытой марковской модели, которая ловит смену режима раньше, чем это видно по цене. В целевую функцию добавили штраф за удержание позиции против текущего режима, а буфер воспроизведения получил приоритет на редкие события: гэпы теперь весят в обучении столько же, сколько их реальный вклад в риск. Обучение шло через Ray RLlib на ансамбле исторических окон, двойная оценка ценности убрала переоценку действий.

Что стало

Просадка на переходах сократилась с 34% до 14%, реакция на смену режима — с шести часов до сорока минут удержания позиции. Доля прибыльных сделок на данных, которых агент не видел, держится в коридоре 52–55% в обоих режимах вместо провала до 41%. Худшая одиночная сделка на редком событии стала меньше в 2,5 раза — именно этот класс отказов и требовалось закрыть.

Сравнение считали на одинаковых периодах с последовательным переобучением на каждом окне, плюс стресс-тесты на синтетических разрывах ликвидности и журнал решений по каждой сделке. Метрики до и после получены по одной методике — поэтому их можно сопоставлять напрямую.

Чем обучённый агент отличается от ручных правил?

Ручное правило — явная функция от индикаторов: пересечение, порог, наклон. Его поведение читается глазами, и это сила: оно предсказуемо ровно настолько, насколько предсказуем режим рынка, под который его писали. Агент на обучении с подкреплением порогов не получает — он учится на переходах «состояние — действие — вознаграждение» и подбирает политику, максимизирующую накопленную награду с учётом издержек сделки.

Первое отличие — что именно оптимизируется. Набор правил описывает условия входа, но редко связывает их с размером позиции, моментом выхода и платой за спред в одно решение. DQN-агент оценивает ожидаемую ценность каждого действия в текущем состоянии, поэтому удержание, добор и выход становятся частями одной политики, а не независимыми условиями.

Второе — поведение на данных, которых не было в обучении. Правило на новом режиме рынка обычно не ломается, а тихо перестаёт работать: сигналов больше, качество ниже, заметно по просадке. Агент на сдвиге распределения состояний может деградировать резко, поэтому его выпускают с контролем входов, ограничением на действие и откатом к предыдущей версии политики.

Третье — сопровождение. Правки в правилах конфликтуют: новое условие чинит один участок и ломает соседний, регресс ищут вручную. У агента логика лежит в параметрах, поэтому изменение — это переобучение на расширенном наборе с фиксированным разбиением, проверкой на удержанном периоде и сравнением версий по устойчивости, а не по одной кривой доходности. Объяснимость даёт не формула, а разбор действий по состояниям и проверки чувствительности к признакам.

Технические вопросы перед началом работ

Перед стартом всплывают три технических сомнения: откуда брать данные, как убедиться, что DQN-агент не запомнил историю, и кто отвечает за риск на счёте. Ниже — как мы закрываем каждое инженерными процедурами, без обещаний «гарантированной доходности».

Хватит ли исторических данных и как проверить их качество?

Котировки из Interactive Brokers и внутренних архивов приводим к единой сетке: выравниваем время закрытия, восстанавливаем пропуски, помечаем периоды низкой ликвидности. DQN учится на переходах «состояние — действие — награда», поэтому один сдвинутый бар ломает цепочку — агент осваивает закономерность, которой на рынке не было.

Как понять, что агент переобучился?

Переобучение в обучении с подкреплением выглядит как рост результата на тренировочном отрезке при провале на отложенном. Держим жёсткую границу по времени, проверяем скользящим окном и сверяем поведение на разных режимах рынка: тренд, боковик, резкий откат.

Как часто нужно дообучение?

Дообучение запускаем не по календарю, а по сигналу: сместилось распределение признаков или изменилась волатильность инструмента. Новая версия проходит те же защитные проверки, что и первая, и сравнивается с текущей — иначе улучшение на одном режиме обнулит результат в другом.

Кто отвечает за риск?

Мы отвечаем за данные, архитектуру, воспроизводимость обучения и корректность проверок. Торговые ограничения — лимит на позицию, дневной стоп, запрет на новые входы при просадке — согласуются с вами и живут в контуре исполнения отдельно от модели, поэтому сбой агента не превращается в неконтролируемую просадку.

Обсудим задачу и вернёмся с планом

Прежде чем писать код, разбираем задачу на инженерном уровне: откуда идёт поток котировок, как формируется функция награды, какие ограничения по риску агент не имеет права нарушать. От этого зависит архитектура — один агент на инструмент или общий на портфель, и где проходит граница между обучением и исполнением.

  • Что уточняем: глубина истории котировок, частота решений, признаки, доступные на каждом шаге без заглядывания в будущее.
  • Как устроена среда симуляции: комиссии, проскальзывание, частичное исполнение заявок, поведение на разрывах ликвидности.
  • По какой метрике считаем результат: доходность с поправкой на риск, просадка, устойчивость в разных рыночных режимах.
  • Что считаем доказательством: агент проходит скользящую проверку на отложенных периодах и не разваливается на сдвинутых данных.
  • Как агент встраивается в контур исполнения: сначала имитация без вывода заявок, затем лимиты на позицию и дневной убыток.
  • Что нужно от вас: доступ к историческим данным, описание торгового контура и требований риск-менеджмента.

Возвращаемся с оценкой проекта агента и планом работ: этапы, порядок проверок и точки, где вы видите промежуточный результат. Опишите задачу — вернёмся с оценкой и планом.

Направления AI-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1543
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142