Настройка торгового RL-агента в OpenAI Gym / Gymnasium

Торговый агент показывает хорошие результаты в обучении, но теряет устойчивость на длинном горизонте и не доходит до боевого контура. Мы настраиваем среду обучения с подкреплением в OpenAI Gym под ключ: готовим конфигурации, проверяем сценарии и передаём регламент эксперимента. Вы получаете среду, в которой результат воспроизводится, а не зависит от удачи.
Часто задаваемые вопросы

Почему торговый агент в OpenAI Gym не выходит в прод

Агент, обученный в OpenAI Gym, редко выходит в прод с первой попытки — дело обычно не в алгоритме. Среда обучения агента живёт по своим правилам: ровный шаг, непрерывный ряд, мгновенное исполнение заявки. Исторические данные приходят другими — пропуски, разные часы закрытия, разрывы на праздниках. Рассинхрон среды и данных ломает перенос на реальный контур.

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

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

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

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

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

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

Что становится измеримым, когда среда настроена:

  • Время обучения агента — перезапуски из-за несовместимых наблюдений и рассинхрона шагов уходят, серия прогонов укладывается в часы, и план экспериментов не срывается.
  • Устойчивость стратегии — политика проверяется на длинных сериях с разными стартовыми условиями: результат не рассыпается к третьему эпизоду и держится на горизонте.
  • Класс отказов — часть сбоев закрывается на уровне среды (некорректные состояния, выход за границы действия) и перестаёт выглядеть как ошибка обучения.
  • Контроль переобучения — выделяется отдельный набор эпизодов для проверки: агент показывает результат там, где раньше не учился.
  • Повторяемость результата — два одинаковых запуска дают сопоставимый график награды, поэтому гипотезы проверяются сравнением, а не спором.

Итог — становится видно, что именно дало прирост: изменение награды, набора наблюдений или условий остановки. Гипотезы отсеиваются на коротких прогонах, а не после долгой выкатки.

Режимы запуска в OpenAI Gym: сравнение подходов

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

Ниже — три режима, между которыми обычно выбирают; они различаются требованиями к данным и к сопровождению.

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

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

Как мы настраиваем и проверяем среду обучения агента

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

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

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

Конфигурации, схемы среды и регламенты эксперимента

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

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

Такой комплект снимает зависимость от подрядчика: изменения в награде или в модели проверяются по регламенту, а не по памяти автора.

Кейс: устранили деградацию агента на длинном горизонте

Что было

Агент учился управлять торговой стратегией в среде OpenAI Gym. На коротких эпизодах политика сходилась уверенно, но на длинном горизонте удержания позиции качество падало: доля неудачных эпизодов — около 40%, разброс результата между прогонами с одинаковыми настройками — до трёх раз. Полный цикл обучения занимал почти сутки, и часть прогонов приходилось выбрасывать целиком.

Что изменили

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

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

Доля неудачных эпизодов снизилась с 40% до 9%, разброс между прогонами — с трёх раз до 1,2, полный цикл обучения ускорился в 2,4 раза. На данных, не участвовавших в обучении, поведение агента осталось устойчивым: деградации на длинном горизонте нет.

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

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

Свойство среды Тестовая среда Рабочий контур Что проверяем при переносе
Исполнение заявок мгновенно, полным объёмом частично, с задержкой долю неисполненных и отменённых
Поток данных синхронный, без пропусков разрывы канала, догон истории поведение при потере связи
Издержки фиксированная комиссия комиссия, спред, проскальзывание устойчивость к росту издержек
Состояние сброс эпизода в любой момент позиция и заявки живут непрерывно перезапуск без потери позиции

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

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

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

У нас уже развёрнута среда в OpenAI Gym — начнёте с нуля?

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

Как отличить переобучение агента от недоработки награды?

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

Можно ли перенести модель и что делать при смене данных?

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

Что входит в поддержку решения?

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

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

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

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

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

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

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

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