PPO трейдинг: почему агент теряет устойчивость на живом рынке
Обученный агент почти всегда выглядит убедительно на истории: кривая доходности ровная, просадки держатся в заданных границах, показатели на отложенном отрезке совпадают с обучающими. Проблема в том, что рынок не стационарен. Волатильность, ликвидность и связи между инструментами меняются, а политика, найденная обучением с подкреплением, остаётся настроенной на прошлое распределение цен.
PPO обновляет политику малыми шагами, ограничивая отклонение от предыдущей версии — это стабилизирует сходимость, но не защищает от переобучения агента. Функция награды подбирается под конкретный исторический отрезок, и модель начинает воспроизводить его особенности: редкие всплески, сезонные эффекты, шум в узкие часы. На смене рыночного режима просадка стратегии выходит за пределы, которые показывал любой прогон по истории.
Причины обычно инженерные, а не «рынок стал другим». Признаки считаются со сдвигом относительно момента принятия решения; издержки исполнения и проскальзывание учитываются огрублённо; проверочный отрезок слишком похож на обучающий по волатильности. Библиотеки вроде Stable-Baselines3 дают рабочий цикл обучения, но выбор среды, разбиение истории и режимные проверки остаются на стороне команды.
Поэтому решающий аргумент — живое тестирование: агент работает на реальных котировках в реальном времени с ограниченным объёмом сделок, а мы сопоставляем ожидаемое поведение политики с фактическим. Расхождение видно только здесь. Дальше разбираем, как это закрывается: какие проверки на устойчивость вводим и как переносим агента из истории в реальные сделки.
Устойчивость агента, риск-контроль и воспроизводимость результата
Агент, обученный на одном режиме рынка, теряет устойчивость при смене волатильности: политика запоминает статистику периода, а не логику поведения. Поэтому обучение ведём скользящим окном и на каждом шаге проверяем модель на данных, которых она не видела. Устойчивость измеряем не средней доходностью, а просадкой на этих срезах — если она растёт быстрее, чем на обучающем окне, обучение останавливаем и разбираем причину.
Риск-контроль встроен в две точки. В функцию награды — штраф за дисперсию и за выход за лимит позиции, чтобы агент не зарабатывал редкими крупными ставками. В исполнение — жёсткие ограничения поверх политики: доля капитала на одну сделку, дневной стоп по просадке и отключение стратегии при пробое порога, независимо от текущего прогноза.
Воспроизводимость держим на уровне инфраструктуры: фиксируем зерно случайности, состав и порядок рыночных данных, параметры среды и гиперпараметры — всё в репозитории рядом с кодом. Повторный прогон на том же наборе данных даёт метрики в заданном допуске, а расхождение читается как ошибка конфигурации, а не как «рынок изменился». Опорной реализацией PPO сверяемся с Stable-Baselines3, чтобы отделять эффект наших доработок от эффекта самой библиотеки.
На выходе — набор метрик качества с историей: максимальная просадка и время восстановления после неё, доля отключений по риск-лимитам, разброс результата между прогонами. По ним видно, где агент устойчив, а где нужен дополнительный фильтр — это и есть управляемый риск, а не обещание доходности.
Варианты построения агента: обучение с нуля, дообучение, гибрид
Выбор режима определяет, сколько данных потребуется на входе, как быстро появится первая рабочая политика и насколько болезненной будет смена набора инструментов. Обучение с нуля на PPO даёт полный контроль над поведением агента, но требует длинной истории котировок и терпимости к нестабильной доходности на ранних итерациях.
Дообучение модели стартует с уже собранной политики: это заметно короче по времени до результата, однако агент наследует смещения предыдущего обучения и легко «забывает» режимы, которые редко встречались в новых данных. Гибридная схема снимает часть этих рисков, распределяя роли между правилами и обучаемой частью.
| Вариант | Когда подходит | Ограничения |
|---|---|---|
| Обучение с нуля | Свой набор инструментов и горизонт удержания позиции, которых нет в готовых наборах данных | Долгий старт, чувствительность к настройке штрафа за риск, подгонка под прошлое при короткой истории |
| Дообучение модели | Уже есть работающая политика, нужно добавить инструмент или новый режим рынка | Перенос старых смещений, риск ухудшения на прежних режимах, требуется контрольный прогон на отложенном отрезке |
| Гибридная схема | Правила задают рамку по риску, агент распределяет капитал внутри неё | Больше кода и проверок, нужен разбор вклада каждого слоя в итоговый результат |
Выбор режима начинается с аудита данных и целевой метрики: где границы допустимой просадки, как часто меняется состав инструментов, есть ли чем проверять политику вне обучающего отрезка. По этим ответам видно, хватит ли дообучения или нужна гибридная схема — и уже под неё планируется объём работ.
Как строится работа: аудит данных, схема, настройка, проверка
Процесс идёт этапами, и на каждом есть точка контроля: вы видите, что именно проверено и какие выводы из этого следуют. Обучение стартует только после того, как данные и постановка задачи зафиксированы — иначе метрики не поддаются интерпретации.
- Аудит данных. Проверяем непрерывность котировок, выравниваем интервалы и часовые пояса, ищем пропуски, выбросы и разрывы на корпоративных событиях. Отдельно исключаем смещение выжившего: в выборке остаются только инструменты, торговавшиеся на тот момент.
- Постановка задачи. Фиксируем цель — доходность с поправкой на риск или контроль просадки, — а также горизонт, состав наблюдаемых признаков, лимиты по объёму и плечу.
- Среда исполнения и награда. Собираем симулятор с комиссиями, проскальзыванием и задержкой ордера. Награда штрафует лишний оборот и резкие перекладки, чтобы агент не подгонялся под идеальное исполнение.
- Настройка обучения PPO. Подбираем горизонт преимущества, порог отсечения, размер батча и темп обучения. Несколько прогонов с разными начальными зёрнами показывают разброс, а не лучший результат.
- Проверка устойчивости. Прогоняем агента на отложенном периоде и в режимах, которых не было в обучении: тренд, боковик, всплеск волатильности. Измеряем деградацию при увеличенном проскальзывании и задержке.
- Передача решения. Отдаём код окружения и обучения, конфигурации прогонов, сохранённые веса, правила дообучения на свежих данных и отчёт с метриками и границами применимости.
Контрольные точки — после аудита данных, перед запуском обучения и перед передачей: на каждой фиксируем, какой результат считаем приемлемым.
Состав передачи: код агента, конфигурации, документация, регламенты
Передача — не архив с кодом, а рабочий контур, который ваши инженеры запускают и сопровождают без нас. Каждый артефакт закрывает свой класс задач и проверяется на приёмке: агент с PPO проходит обучение и выходит на тестовый отрезок рынка на вашей инфраструктуре.
- Код агента — обучение и применение политики: среда с рыночными данными, модель политики и ценности, риск-фильтры, обвязка заявок. Поднимается по инструкции на чистом окружении.
- Конфигурации обучения — горизонт, коэффициент ограничения шага политики, размер выборки, число параллельных сред, признаки, фиксация случайности. Повторный запуск воспроизводит ту же политику.
- Журналы прогонов и метрики — кривые награды, доходности и просадки, частота сделок, распределение действий агента. По ним видно, деградировала модель или сменился режим рынка.
- Схемы и решения — поток данных от котировок до заявки, логика риск-фильтров, точки ветвления и границы между модулями.
- Документация — описание среды, наблюдений и функции награды, ограничения по риску, порядок дообучения на новых данных.
- Регламенты сопровождения — критерии остановки торговли, порядок переобучения, откат к сохранённому состоянию предыдущей модели.
- Права доступа — роли и ключи к хранилищу данных, реестру моделей и брокерскому контуру оформляются на вас, наши доступы отзываются.
Приёмка — ваши инженеры сами разворачивают контур и повторяют прогон обучения. Дальше сопровождение идёт по регламентам, без обращения к нам.
PPO трейдинг под нагрузкой: метрики до и после внедрения
Что было до внедрения
Базовая версия агента на PPO обучалась на одном режиме рынка — трендовом участке с низкой волатильностью. При смене режима политика продолжала наращивать позиции в ту же сторону: просадка доходила до 34% расчётного капитала, а восстановление занимало вдвое дольше самого спада. Контроль риска стоял снаружи модели — жёсткие лимиты срезали позиции уже после открытия, поэтому агент учился на одном распределении наград, а торговал в другом.
Что изменили
Риск-слой перенесли внутрь среды обучения: ограничения на экспозицию и шаг изменения позиции стали частью функции награды, а не внешним фильтром. Добавили определение режима по волатильности и доходности — на смене режима политика уходит в защищённый профиль вместо продолжения тренда. Обучали и валидировали на исторических данных из публичного архива Binance, отдельно прогоняя сценарии резких разворотов.
Что стало после
Максимальная просадка снизилась с 34% до 11% на том же горизонте тестирования, восстановление после спада ускорилось примерно втрое. Отношение доходности к риску выросло с 0,8 до 1,5 — устойчивость агента перестала зависеть от текущего режима рынка. Число смен позиции упало на 40%, издержки на исполнение больше не съедают результат, а контроль риска стал частью политики: за риск-лимиты агент не выходит ни в одной сессии.
Чем агент отличается от стратегии, заданной правилами вручную?
Правила, заданные вручную, — это набор условий: пересечение скользящих средних, порог волатильности, уровень стопа. Их сила в предсказуемости, каждое решение объясняется одной фразой. Слабость проявляется при смене режима рынка: параметры, подобранные на тренде, ломаются во флэте, а пересборка превращается в ручной перебор вариантов, который легко подогнать под прошлое.
Агент для PPO-трейдинга устроен иначе. Он не хранит условия, а обучает политику — распределение вероятностей по действиям, максимизируя ожидаемую доходность со штрафами за риск. Непрерывное пространство действий позволяет задавать размер позиции, а не только вход и выход, и учитывать десятки признаков в сочетаниях, которые человек не выпишет правилами.
Выигрывает обучение там, где зависимости многомерны и подвижны: размер позиции, одновременный учёт корреляций, микроструктуры стакана, нескольких горизонтов удержания. Дообучение на свежем окне данных позволяет быстрее реагировать на смену режима, но только если аналогичный сдвиг уже был в истории — иначе агент так же уверенно экстраполирует шум.
Проигрывает агент в интерпретируемости. Веса сети не читаются как правило, поэтому объяснить риск-комитету, почему позиция открыта, сложнее — нужен отдельный анализ вклада признаков. Выше и требования к данным и функции вознаграждения: жёсткий штраф за просадку делает агента пассивным, мягкий провоцирует плечо, которое не переживёт реальных издержек.
На практике это не выбор одного из двух. Правила остаются рамками риска — лимиты на позицию, стопы, запрет торговли в отдельные окна, — а агент работает внутри них, там, где правил стало слишком много для ручного описания. Проверяются обе схемы одинаково: на отложенном периоде, с учётом комиссий и проскальзывания, с раздельной оценкой на тренде и во флэте.
Технические сомнения: устойчивость, данные, контроль риска
Пять технических сомнений чаще всего снимаем до старта работ: выдержит ли агент смену режима рынка, хватит ли данных, где проходят границы риска, что с сопровождением и как проверить результат. Ниже — коротко по каждому.
Устойчивость: что если рынок сменит характер?
Проверяем не на одном отрезке истории, а на серии окон, включая резкие движения и низкую ликвидность. Агент считаем пригодным, если поведение сохраняется при смене режима, а не только на благоприятном участке.
Качество данных: хватит ли истории?
Смотрим полноту, частоту и разрывы в котировках, корректность корпоративных событий. Данные для обучения и для проверки разводим по времени — иначе получаем красивый, но бесполезный результат.
Ограничения риска: кто держит рамки?
Лимиты по позиции, просадке и числу сделок закладываем в среду обучения — агент учится внутри рамок. Дополнительно ставим внешний контроль, срабатывающий независимо от решений модели.
Сопровождение: что после запуска?
Модель теряет точность по мере изменения рынка, и это норма, а не авария. Поэтому заранее фиксируем, какие метрики отслеживаем, при каких отклонениях переобучаем и как откатываемся на прошлую версию агента.
Способы проверки: как убедиться до запуска?
Три уровня: тест на отложенном периоде, прогон под стресс-сценариями и работа на малом объёме в реальном контуре. Совпадение результатов на всех трёх — условие перехода к полному масштабу.
Обсудим задачу: что нужно для оценки и плана работ
Для оценки задачи по PPO-трейдингу не нужен полный архив торговой системы — достаточно описания среды и цели. Чем точнее входные данные, тем меньше допущений в плане работ: сразу видно, где симулятор совпадёт с реальным исполнением, а где потребуется отдельная проверка.
Что прислать, чтобы мы вернулись с оценкой:
- инструмент и горизонт: что торгуем, на каком таймфрейме, как часто агент принимает решение;
- исторические данные: глубина ряда, состав полей (цены, объёмы, стакан), как помечены пропуски;
- целевая метрика: доходность с учётом просадки, коэффициент Шарпа или доля прибыльных сделок;
- модель издержек: комиссии, проскальзывание, задержка исполнения — без них агент обучится на несуществующей доходности;
- ограничения риска: предельная просадка, лимит позиции, правила остановки торгов;
- инфраструктура: откуда берутся данные, куда агент отдаёт сигналы, есть ли тестовый контур;
- что уже пробовали и почему результат не устроил.
По этим данным собираем план работ: подготовка среды и пересчёт истории, настройка функции вознаграждения, обучение и валидация политики, проверка на отложенном периоде, стресс-тесты на волатильных участках. Этапы и сроки фиксируем вместе с критериями приёмки — при каком результате агент считаем готовым к ограниченному запуску.
Опишите задачу в свободной форме — вернёмся с оценкой задачи и планом работ по этапам.







