Чому торгівля з Reinforcement Learning провалюється на живому ринку
Навчання з підкріпленням для крипто гарно виглядає на історії: агент виходить у плюс, крива дохідності рівна, просадка тримається в заданих межах.
Ламається все на переході до живих угод, бо ринок нестаціонарний: змінюються ліквідність, волатильність і склад учасників, а середовище, на якому агент навчався, залишилося в минулому.
Перше вузьке місце — перенавчання на історичних даних. Коли нагорода заохочує прибуток на кожному кроці, агент завчає мікроструктуру конкретних періодів: точні рівні, характер відскоків, таймінг входів.
Ці залежності не відтворюються, тому агент втрачає дохідність на реальному ринку не через слабку ідею, а тому що оптимізувався під шум, якого в реальних даних уже немає.
Друге — просадка при зміні режиму ринку. Стратегія поведінки, стійка у флеті, розвалюється в тренді або на різкому русі.
Штраф за ризик і ліміт на розмір позиції допомагають лише частково: якщо зміна режимів у навчальному наборі траплялася рідко, агент просто не відпрацював реакцію на неї.
Третє — нестабільне виконання угод. Прослизання, комісії, часткове виконання й затримка між сигналом і угодою на історії ідеалізовані, а в реальності з'їдають перевагу повністю.
Розбираємо нижче, як це закривається: від дизайну нагороди й перевірки на відкладених періодах до контурів контролю ризику на живому рахунку.
Що дає навчений агент: ефект у вимірюваних величинах
Агент для торгівлі — не «чорний ящик», а політика з набором вимірюваних характеристик.
Ефект знімаємо в тому самому середовищі, де відбувалося навчання, і порівнюємо з базовою стратегією: частка часу в ринку, глибина просадки, затримка реакції на волатильність, дотримання лімітів. Середовище описуємо через Gymnasium, тому метрики відтворювані на будь-якому історичному відрізку.
- Стійкість до режимів ринку. Тренування й валідація йдуть окремо на відрізках із трендом, флетом і високою волатильністю. Політика, перенавчена на одному режимі, відсіюється на перевірці, а не на реальному рахунку.
- Зниження просадки. Штраф за просадку вбудовано у функцію нагороди і він зростає нелінійно. На валідації це дає просадку в 1,5–2 раза менше базової за зіставної дохідності.
- Управління ризиком у реальному часі. Розмір позиції та стоп перераховуються на кожному кроці з поточної волатильності. Шар виконання перевіряє ліміти, обсяг і ціну до відправлення заявки — збій моделі не перетворюється на незаплановану позицію.
- Моніторинг і журналювання рішень. Кожна дія пишеться разом зі станом, нагородою й причиною спрацювання обмеження. За журналом відновлюється, чому агент увійшов або вийшов.
Деградацію видно за метриками раніше, ніж вона стане збитком: розходження поточних показників із валідаційними запускає перенавчання за регламентом, а не за фактом втрат.
Порівняння підходів: навчання з підкріпленням і ручні стратегії
Вибір між навчанням з підкріпленням і ручними правилами — це не питання смаку, а питання того, як формалізовано мету і скільки даних є на вході.
Навчання з підкріпленням вимагає середовища, у якому агент може проганяти епізоди й отримувати нагороду; навчання на розмічених даних працює там, де завдання зводиться до передбачення; підбір параметрів правил потрібен, коли логіка вже описана, але не налаштована. Нижче — чотири варіанти, між якими реально обирають, та їхні інженерні межі.
Чотири варіанти та їхні межі
| Варіант | Коли доречний | Чим обмежений |
|---|---|---|
| Навчання з підкріпленням | Мета виражається через нагороду, є середовище для прогону епізодів і запас даних під різні режими ринку | Агент знаходить лазівки у функції нагороди; політика погано пояснювана, поведінка розходиться з історією при зміні режиму |
| Навчання на розмічених даних | Завдання зводиться до передбачення: ймовірність руху, класифікація стану ринку, фільтр входів | Розмітка фіксує минулий розподіл; модель не враховує комісії та вплив власних заявок |
| Підбір параметрів правил | Логіка входу й виходу вже описана, параметрів небагато, потрібна стійкість, а не максимум на історії | Перенавчання: на підгонці результат зростає, на відкладених даних падає |
| Ручні правила та індикатори | Мало інструментів, рішення рідкі, важлива прозорість кожного входу | Дисципліна й швидкість реакції; не масштабується на десятки інструментів |
На практиці найчастіше виграє гібридний підхід до стратегії: навчання з підкріпленням відповідає за вибір моменту й розміру позиції, а ручні правила та індикатори задають жорсткі межі ризику, заборони на торгівлю в окремих станах і ліміти на серію збитків.
Перевіряємо такі зв'язки ковзною перевіркою на послідовних відрізках і порівнянням із простим еталоном — якщо агент не обходить його на відкладених даних, у продакшн він не йде.
Етапи роботи: від постановки завдання до передачі агента
У проєктах Reinforcement Learning для торгівлі робота починається не з коду, а з розбору завдання: які інструменти і на якому горизонті торгуємо, який ризик неприйнятний.
На цьому ж кроці фіксуємо метрики — дохідність із поправкою на просадку, частку прибуткових угод, максимальну просадку. Без формальних метрик навчання нічим зупинити, а результат не можна прийняти.
- Розбір завдання й метрик. Узгоджуємо горизонт, набір інструментів і обмеження за ризиком; метрики стають критерієм зупинки навчання та приймання агента.
- Підготовка історичних даних. Збираємо котирування та книгу заявок із відкритих джерел (Binance), прибираємо розриви й викиди, приводимо ряди до єдиної частоти — інакше агент вивчить шум замість закономірностей.
- Проєктування середовища навчання. Відтворюємо логіку біржі: комісії, прослизання, часткове виконання заявок. На ідеальних умовах агент показує прибуток, якого в реальності немає.
- Налаштування функції винагороди. Балансуємо прибуток і штраф за ризик: при зміщених вагах агент або йде в бездіяльність, або в надмірну торгівлю, де комісія з'їдає результат.
- Перевірка перед реальним запуском. Прогін на відкладеному відрізку історії та в симуляції на аномальних ринкових періодах, порівняння з базовою стратегією.
- Передача й супровід агента. Віддаємо код, конфігурації середовища, навчену модель і документацію за метриками; залишаємося на зв'язку після запуску.
Кожен крок закривається перевірюваним артефактом: звітом за даними, конфігурацією середовища, кривою навчання, протоколом перевірки. Повернутися на крок назад дешевше, ніж розбирати збитки на живому рахунку.
Політики ризику, конфігурації та документація агента
Навчений агент без експлуатаційного контуру марний: його не можна відтворити, перевірити або безпечно зупинити. Тому разом із моделлю замовник отримує весь набір артефактів — від конфігурацій запуску до інструкцій для чергової команди.
- Конфігурації запуску: параметри середовища, склад інструментів, горизонт рішення й початкові умови. Той самий набір даних з однією конфігурацією відтворює поведінку агента.
- Політики обмеження ризику: межа просадки за сесію, денний стоп, максимальний розмір позиції та частота угод. При спрацюванні агент переходить у режим закриття, а не продовжує набирати позицію.
- Схеми інтеграції з біржею: потоки ордерів, котирувань і стану рахунку із зазначенням точок відмови, таймаутів і порядку повторного відправлення запиту.
- Журнали та звітність: за кожним рішенням зберігаються спостереження, дія, нагорода й фактичний результат виконання — з них збирається звіт за дохідністю та ризиком.
- Інструкції для команди: порядок запуску, зупинки й відкату версії політики, дії при розходженні стану рахунку з очікуваним.
- Регламент донавчання: на яких даних оновлюється політика, які метрики вважаються пороговими і коли версія відкочується до попередньої.
- Набір перевірок перед випуском: прогін на історичних даних, симуляція затримок виконання й поведінка при обриві зв'язку з біржею.
Кожен пункт — це файл, схема або документ, який залишається у вашому репозиторії й читається без нашої участі. Передача закрита, коли ваша команда сама запускає, зупиняє й відкочує агента, а журнали підтверджують, що політики ризику спрацювали.
Кейс: агент, стійкий до зміни режиму торгівлі
Що було до
Першу версію агента навчали на історії одного року, узятої з Binance, і на навчальному відрізку вона виглядала рівно: просадка 12%, стабільний приріст.
На зміні режиму з тренду на боковик поведінка розвалилася — модель продовжувала набирати позиції за інерцією, просадка зросла до 38%, а частка прибуткових торгових днів упала нижче половини.
Помилка була не в архітектурі, а в даних: агент бачив один стан ринку й не мав ознак, за якими відрізняє його від іншого.
Що змінили
Історію розмітили за режимами — тренд вгору, тренд вниз, боковик, підвищена волатильність — і додали ці ознаки в спостереження агента.
Навчання перезібрали так, щоб епізоди чергувалися між режимами, а нагорода штрафувала за концентрацію в одному сценарії: вигравати за рахунок одного вдалого періоду стало невигідно.
На етапі роботи додали обмежувач, який знижує розмір позиції при зміні режиму, поки агент не набере статистику за новими умовами.
Що стало
На тому самому контрольному відрізку, що й раніше, просадка становила 14% замість 38%, частка прибуткових днів зросла з 54% до 66%, відношення дохідності до ризику — з 0.7 до 1.8.
Важливіше за цифри змінилася поведінка: агент сам скорочує експозицію в незнайомому режимі й повертається до звичайного розміру позиції, коли розподіл дохідностей знову збігається з навчальним. Ручних перемикань між стратегіями більше немає.
Що робити, якщо вже розгорнуто готовий торговий алгоритм
Відповідь залежить від того, скільки рішень у поточній системі описується явними правилами, а скільки — ринковим шумом. Від цього залежить подальша доля готового алгоритмічного робота: надбудувати навчання зверху, перенести логіку на навчання або замінити контур цілком.
Перший сценарій — залишити правила й додати навчання зверху. Робот торгує за попередніми умовами, а агент підбирає лише параметри виконання: розмір позиції, пороги входу, фільтри волатильності.
Сумісність із поточними налаштуваннями тут максимальна — контур не чіпаємо, навчання працює у вузькому просторі дій.
Другий сценарій — перенесення логіки на навчання. Попередні правила перетворюються на середовище: функція нагороди штрафує за небажані дії, обмеження на дію задають рамки ризику.
Доробка наявного агента йде ітеративно — на історії, потім на потоці, де поведінку порівнюють з еталоном зі старих правил. Перенесення виправдане, коли правила суперечать одне одному і налаштування порогів не сходиться.
Третій сценарій — замінити контур цілком. Його беруть, коли правила збиткові самі по собі або їх занадто багато, щоб утримати в голові. Тоді важливіший зовнішній контроль ризиків: ліміти, стоп-умови й журнал рішень живуть поза агентом — навчена політика не пояснює кожен крок.
Сценарій обираємо за одним заміром: яка частка рішень описується явними правилами. Багато — надбудовуємо навчання, мало — переносимо й перенавчаємо. У будь-якому варіанті потрібен відтворюваний симулятор і журнал угод, інакше ефект навчання не відділити від зміни ринку.
Технічні сумніви: перенавчання, відгук, стійкість
Головне заперечення до навчання з підкріпленням — що зростання на історії не переноситься на живий ринок. Найчастіше причина не в самій ідеї, а у витоку майбутнього в ознаки та підгонці під один режим волатильності: агент завчає конкретний відрізок замість поведінки ринку.
Ми розводимо перевірку за часом: навчання на одному вікні, налаштування на наступному, фінальна оцінка — на відкладеному відрізку, якого агент не бачив. Модель зобов'язана пройти однакові пороги на всіх трьох етапах, інакше в роботу не йде.
Як відрізнити перенавчання агента від зміни ринку?
Дивимося на розрив між результатом на навчанні та на відкладеному відрізку — він і є ознакою перенавчання. Додатково звіряємо розподіл ознак і режим волатильності: якщо змістився ринок, потрібна перепідготовка моделі, а не перегляд правил.
Що відбувається з відкритими позиціями під час перепідготовки моделі?
Перепідготовка йде на копії моделі, торговий контур продовжує працювати на поточній версії. Нова вступає в роботу лише після проходження порогів і прогріву на живих даних; при розходженні повертаємося до попередньої без паузи в торгівлі.
Яку затримку ухвалення рішення вважаємо допустимою?
Бюджет рахуємо від надходження ринкових даних до підтвердження заявки, із запасом на мережу й біржу. Якщо рішення не вкладається в затримку ухвалення рішення, заявка не відправляється: пропущений вхід дешевший за виконання за ціною, якої вже немає.
На чому тримається захист капіталу в нестабільному ринку?
На обмежувачах, а не на точності прогнозу: ліміт на розмір позиції, денний стоп за просадкою, автоматичне зниження ризику при розширенні спреду. Вони спрацьовують незалежно від того, права модель в окремій угоді чи ні.
Обговоримо завдання: повернемося з оцінкою та планом робіт
Надсилайте вступні за завданням — цього достатньо, щоб повернутися з оцінкою та планом робіт, а не з уточнювальними питаннями.
Навчання з підкріпленням чутливе до якості історії та до того, як формалізовано мету агента, тому конкретика на вході напряму скорочує строки й визначає склад команди.
Що корисно надіслати:
- опис торгової ідеї: інструменти, горизонт утримання позиції, що вважаєте хорошим результатом;
- історію котирувань або угод у будь-якому читабельному форматі — вивантаження з термінала, CSV, архів з біржі;
- обмеження за ризиком: допустима просадка, ліміт на угоду, правила аварійної зупинки;
- контур запуску — тестовий рахунок, пісочниця біржі або реальний рахунок з обмеженим обсягом;
- хто залишається на вашому боці після передачі: аналітик, розробник, чергова зміна;
- де зберігатимуться дані й рахуватиметься модель — ваші потужності чи наш контур.
Розбір проходить в один захід: дивимося дані, перевіряємо, чи відтворюване середовище, і де в навчанні витік майбутнього.
У відповідь повертаємо оцінку, план робіт і етапи: підготовка даних, середовище симуляції, навчання агента, перевірка на періоді поза навчальним вікном, передача результату з документацією та запуском у вас.
Склад команди розписуємо за ролями із завантаженням на кожному етапі, щоб ви бачили, хто і за що відповідає. Перша відповідь за вступними — протягом одного-двох робочих днів, оцінка та план робіт — протягом трьох-п’яти робочих днів після розбору. Якщо дані сирі, скажемо про це відразу й перелічимо, що потрібно дозібрати до старту.







