Проєктування та розробка торгового 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