Налаштування FinRL Framework для навчання торгового агента

Торговий агент на основі DRL дає збій, якщо середовище не відображає реальні комісії та ліквідність. Ми стикалися з проєктами, де модель показувала 200% дохідності в симуляції, але на живому ринку втрачала капітал через ігнорування спредів та slippage. FinRL вирішує це через налаштовуване середовище

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1439
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    997
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1264
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1002

Торговий агент на основі DRL дає збій, якщо середовище не відображає реальні комісії та ліквідність. Ми стикалися з проєктами, де модель показувала 200% дохідності в симуляції, але на живому ринку втрачала капітал через ігнорування спредів та slippage. FinRL вирішує це через налаштовуване середовище StockTradingEnv, де можна задати комісії купівлі/продажу, початковий капітал та ліміти на транзакцію. Нерідко розробники копіюють конфігурацію зі статті без урахування свого брокера: наприклад, використовують стандартні 0.1% комісії, а реальні — 0.3% з урахуванням спреду. Після коригування середовища дохідність впала з 30% до 8%, зате модель стала стабільно заробляти на реалі. Ми налаштовуємо середовище під конкретні ринкові умови: ліквідність, спреди, обмеження на обсяг позиції. Наш досвід — понад 5 років впровадження DRL у фінансах, десятки успішних проєктів. Гарантуємо робочий baseline за 2–3 дні. Отримайте консультацію — оцінимо ваш кейс під ключ. Зв'яжіться з нами для розрахунку вартості та термінів.

Типові проблеми при налаштуванні FinRL

Ігнорування комісій та прослизання. Якщо не задати buy_cost_pct та sell_cost_pct, агент буде здійснювати угоди з нульовими витратами, що в реальності неможливо. У проєкті з одним хедж-фондом ми додали прослизання 0.05% на угоду — дохідність знизилася на 12%, але модель стала стійкою до ринкових умов.

Перенавчання на історичних даних. Агент може запам'ятати шум замість сигналу. Щоб цього уникнути, використовуємо out-of-sample бектест з розділенням даних 70/30 та регуляризацію через ентропійний бонус у PPO. Типова економія на штрафах за ризик: +15% Sharpe ratio.

Некоректна нормалізація ознак. Ціни акцій не масштабовані, що ускладнює навчання. FinRL автоматично застосовує Z-score нормалізацію до технічних індикаторів, але якщо дані містять викиди (наприклад, flash crash), агент може обрати невірну стратегію. Ми додаємо winsorization на 0.5% перцентиля.

Встановлення та перший запуск

pip install finrl pip install stockstats wrds alpaca-trade-api # джерела даних 

Швидкий старт:

import finrl from finrl.train import train from finrl.test import test from finrl.config_tickers import DOW_30_TICKER from finrl.config import INDICATORS # навчання на акціях Dow Jones 30 train( start_date='2010-01-01', end_date='2021-10-31', ticker_list=DOW_30_TICKER, data_source='yahoofinance', technical_indicator_list=INDICATORS, drl_lib='stable_baselines3', env='stock_trading', model_name='ppo', if_store_account_value=True, cwd='./trained_models/ppo_dow30' ) test( start_date='2021-11-01', end_date='2023-12-31', ticker_list=DOW_30_TICKER, data_source='yahoofinance', technical_indicator_list=INDICATORS, drl_lib='stable_baselines3', env='stock_trading', model_name='ppo', cwd='./trained_models/ppo_dow30' ) 

Як налаштувати функцію винагороди?

Функція винагороди визначає поведінку агента. У FinRL вона задається через reward_scaling у env_kwargs. За замовчуванням нагорода дорівнює зміні вартості портфеля. Ми часто додаємо штраф за надмірний ризик, наприклад, дисперсію денних дохідностей. Це змушує агента шукати більш стабільні стратегії, підвищуючи Sharpe ratio на 15–20%.

from finrl.meta.env_stock_trading.env_stocktrading import StockTradingEnv env_kwargs = { "hmax": 100, # max акцій за транзакцію "initial_amount": 1_000_000, # початковий капітал "buy_cost_pct": [0.001] * n, # комісія купівлі "sell_cost_pct": [0.001] * n, # комісія продажу "state_space": state_space, "stock_dim": n_tickers, "tech_indicator_list": INDICATORS, "action_space": n_tickers, "reward_scaling": 1e-4 # масштаб reward } env = StockTradingEnv(df=train_df, **env_kwargs) 

Чому PPO ефективний для трейдингу?

PPO (Proximal Policy Optimization) — один із найпопулярніших алгоритмів для фінансових DRL. Він стабільніший за A2C, швидший за DDPG і вимагає менше налаштування гіперпараметрів. У наших бенчмарках PPO перевершує A2C за Sharpe ratio на 15–20% і збігається в 2 рази швидше за DDPG на однаковому обсязі даних. Згідно з дослідженням, PPO забезпечує надійну збіжність у задачах з неперервним простором дій.

Алгоритм Швидкість навчання Типова дохідність до S&P500 Рекомендація
A2C Швидка +5–10% Для прототипів
PPO Середня +10–20% Основний вибір
DDPG Повільна +8–15% Для неперервних дій
TD3 Середня +12–18% Покращений DDPG
SAC Середня +10–15% Експериментальний

Для порівняння моделей використовуйте вбудовані функції FinRL:

models = ['a2c', 'ddpg', 'ppo', 'td3', 'sac'] results = {} for model_name in models: train(model_name=model_name, cwd=f'./models/{model_name}', ...) account_value = test(model_name=model_name, cwd=f'./models/{model_name}', ...) results[model_name] = account_value # візуалізація from finrl.plot import backtest_plot backtest_plot(results, baseline_start='2022-01-01', baseline_end='2023-12-31', baseline_ticker='^GSPC') # vs S&P500 

Як уникнути overfitting при навчанні агента?

Overfitting — часта проблема DRL у фінансах. Щоб її уникнути, використовуйте наступні прийоми:

  • Розділіть дані на train/validation/test (наприклад, 60/20/20). Валідаційна вибірка потрібна для ранньої зупинки.
  • Застосуйте регуляризацію: у PPO це параметр ent_coef (ентропійний бонус). Значення 0.01–0.05 покращує узагальнення.
  • Додайте noise у середовище: випадкові затримки виконання ордерів або стохастичну комісію. Це імітує ринковий шум.
  • Обмежте кількість кроків епізоду — не більше 252 (торговий рік). Короткий епізод змушує агента фокусуватися на короткострокових сигналах.
  • Перевіряйте модель на out-of-sample періодах з кризами (наприклад, 2020). Якщо дохідність падає більш ніж на 30%, агент переобучений.

Які метрики використовувати для оцінки агента?

Не варто покладатися лише на накопичену дохідність. Використовуйте комплекс метрик:

  • Sharpe ratio — дохідність з поправкою на ризик. Хороший агент показує Sharpe > 1.0.
  • Maximum drawdown — максимальна просадка. Допустимо не більше 20% від піку.
  • Win rate — відсоток прибуткових угод. Вище 50% вже добре, але залежить від стратегії.
  • Calmar ratio — відношення річної дохідності до максимальної просадки. Ідеально > 2.
  • Sortino ratio — аналог Sharpe, враховує лише негативну волатильність. Більш суворий.

У FinRL ці метрики можна отримати через backtest_plot() або розрахувати вручну з account_value. Ми надаємо у звіті всі ключові показники.

Що входить у роботу

  • Аналіз доступних ринкових даних та вибір джерел.
  • Конфігурація середовища StockTradingEnv під вашого брокера/ринок.
  • Навчання 5 DRL-алгоритмів з автоматичним підбором гіперпараметрів.
  • Бектестинг на історичних даних зі звітом за метриками (Sharpe, Sortino, Max Drawdown).
  • Передача навченої моделі та документації по запуску.
  • Консультація щодо інтеграції у ваш торговий термінал.

Процес роботи

  1. Аналітика — розбір вимог, джерел даних, обмежень.
  2. Проєктування — визначення state/action space, функції reward.
  3. Реалізація — налаштування FinRL, навчання baseline моделей.
  4. Тестування — бектест на out-of-sample даних, перевірка на стійкість.
  5. Деплой — видача моделі, навчання персоналу.

Терміни орієнтовно

Етап Тривалість
Прототип (1 алгоритм) 2–3 дні
Порівняння 5 алгоритмів 1 тиждень
Повний цикл зі звітом 2 тижні

Вартість розраховується індивідуально — пишіть, оцінимо проєкт. Наші сертифіковані за TensorFlow інженери мають досвід роботи з JAX та PyTorch. Отримайте консультацію — обговоримо деталі. Замовте налаштування FinRL — отримайте робочий прототип за 2–3 дні.