Розробка 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
    1142