Разработка RL-агента для торговли на базе PPO

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

PPO трейдинг: почему агент теряет устойчивость на живом рынке

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

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

Причины обычно инженерные, а не «рынок стал другим». Признаки считаются со сдвигом относительно момента принятия решения; издержки исполнения и проскальзывание учитываются огрублённо; проверочный отрезок слишком похож на обучающий по волатильности. Библиотеки вроде Stable-Baselines3 дают рабочий цикл обучения, но выбор среды, разбиение истории и режимные проверки остаются на стороне команды.

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

Устойчивость агента, риск-контроль и воспроизводимость результата

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

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

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

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

Варианты построения агента: обучение с нуля, дообучение, гибрид

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

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

Вариант Когда подходит Ограничения
Обучение с нуля Свой набор инструментов и горизонт удержания позиции, которых нет в готовых наборах данных Долгий старт, чувствительность к настройке штрафа за риск, подгонка под прошлое при короткой истории
Дообучение модели Уже есть работающая политика, нужно добавить инструмент или новый режим рынка Перенос старых смещений, риск ухудшения на прежних режимах, требуется контрольный прогон на отложенном отрезке
Гибридная схема Правила задают рамку по риску, агент распределяет капитал внутри неё Больше кода и проверок, нужен разбор вклада каждого слоя в итоговый результат

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

Как строится работа: аудит данных, схема, настройка, проверка

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

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

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

Состав передачи: код агента, конфигурации, документация, регламенты

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

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

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

PPO трейдинг под нагрузкой: метрики до и после внедрения

Что было до внедрения

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

Что изменили

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

Что стало после

Максимальная просадка снизилась с 34% до 11% на том же горизонте тестирования, восстановление после спада ускорилось примерно втрое. Отношение доходности к риску выросло с 0,8 до 1,5 — устойчивость агента перестала зависеть от текущего режима рынка. Число смен позиции упало на 40%, издержки на исполнение больше не съедают результат, а контроль риска стал частью политики: за риск-лимиты агент не выходит ни в одной сессии.

Чем агент отличается от стратегии, заданной правилами вручную?

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

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

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

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

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

Технические сомнения: устойчивость, данные, контроль риска

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

Устойчивость: что если рынок сменит характер?

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

Качество данных: хватит ли истории?

Смотрим полноту, частоту и разрывы в котировках, корректность корпоративных событий. Данные для обучения и для проверки разводим по времени — иначе получаем красивый, но бесполезный результат.

Ограничения риска: кто держит рамки?

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

Сопровождение: что после запуска?

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

Способы проверки: как убедиться до запуска?

Три уровня: тест на отложенном периоде, прогон под стресс-сценариями и работа на малом объёме в реальном контуре. Совпадение результатов на всех трёх — условие перехода к полному масштабу.

Обсудим задачу: что нужно для оценки и плана работ

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

Что прислать, чтобы мы вернулись с оценкой:

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

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

Опишите задачу в свободной форме — вернёмся с оценкой задачи и планом работ по этапам.

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

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

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