Разработка Reinforcement Learning агента для торговли (FinRL)

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1566 услуг
Разработка Reinforcement Learning агента для торговли (FinRL)
Сложный
~2-4 недели
Часто задаваемые вопросы

Направления AI-разработки

Этапы разработки AI-решения

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1288
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1198
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    902
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1123
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    590
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    860

Разработка торговых агентов на основе RL с FinRL

FinRL — open-source фреймворк для Deep Reinforcement Learning в финансовых задачах. Унифицированный интерфейс: данные из Yahoo Finance/Alpaca/CCXT → gym-совместимая торговая среда → обучение DRL агентов (PPO/SAC/TD3/A2C) → бэктест → деплой. Разработан Columbia University.

Архитектура FinRL

Три слоя:

  1. Data layer: FinRL DataProcessor — загрузка OHLCV из Yahoo Finance, Alpaca, Binance, CCXT. Вычисление технических индикаторов (MACD, RSI, Bollinger, CCI) через stockstats. Нормализация feature engineering.

  2. Environment layer: Gym-совместимые среды — StockTradingEnv, StockPortfolioEnv, CryptoEnv. State space: цены + индикаторы + портфель. Action space: buy/sell/hold для каждого актива.

  3. Agent layer: DRLAgent — wrapper над Stable Baselines3. Унифицированный API для PPO, A2C, DDPG, TD3, SAC.

from finrl.train import train
from finrl.test import test
from finrl.config import INDICATORS

# обучение
train(
    start_date='2015-01-01',
    end_date='2022-12-31',
    ticker_list=["AAPL", "MSFT", "GOOGL", "AMZN", "TSLA"],
    data_source='yahoofinance',
    technical_indicator_list=INDICATORS,
    drl_lib='stable_baselines3',
    env='stock_trading',
    model_name='ppo',
    cwd='./ppo-portfolio',
    total_timesteps=100000
)

# тест
test(
    start_date='2023-01-01',
    end_date='2024-12-31',
    ...
)

Торговая среда

State vector (для N активов):

[cash_balance, shares_held_1..N, close_1..N, MACD_1..N, RSI_1..N, CCI_1..N, ADX_1..N]

Размерность: 1 + N + N × (1 + num_indicators).

Action vector: Непрерывный: [-1, 1]^N, где -1 = max sell, +1 = max buy для каждого актива.

Дискретный: [0, 1, 2]^N (sell/hold/buy). Зависит от алгоритма.

Reward:

reward = portfolio_value[t+1] - portfolio_value[t]
# или
reward = log(portfolio_value[t+1] / portfolio_value[t])  # log-return

Transaction costs:

buy_cost_pct = 0.001   # 0.1% комиссия
sell_cost_pct = 0.001
slippage_pct = 0.0005  # проскальзывание

Особенности финансовых RL-сред

Non-stationarity: цены — нестационарный процесс. Решение: нормализация на скользящем окне, или обучение на returns вместо цен.

Temporal leakage: feature engineering нельзя использовать "будущие" данные. FinRL автоматически формирует lookback window правильно.

Sparse rewards: прибыль/убыток виден только при закрытии позиции. Intermediate rewards (unrealized PnL) ускоряют обучение но вносят bias.

Overfitting к историческим данным: train/val/test split по времени (не random). Walk-forward validation: обучение на [t0, t1] → тест на [t1, t2] → сдвиг окна.

Метрики оценки

from finrl.plot import backtest_stats

stats = backtest_stats(account_value=test_results)
# Annualized Return, Annualized Volatility
# Sharpe Ratio, Calmar Ratio, Max Drawdown
# Win Rate, Profit Factor

Сравнение с бенчмарком:

  • Buy & Hold S&P500 — минимальный бенчмарк
  • MVO (Mean-Variance Optimization) — классический портфельный подход
  • Equal weight — 1/N allocation

Если агент не бьёт Buy & Hold — переобучение или неверная структура среды.

Избегание распространённых ошибок

Look-ahead bias: самая частая ошибка. Индикатор рассчитан на включение данных следующего дня → нереалистичные результаты. FinRL DataProcessor корректен в этом плане, но кастомные фичи требуют осторожности.

Survivorship bias: тестирование только на существующих сейчас акциях. Решение: использовать исторический состав индекса.

Нереалистичные транзакционные издержки: backtesting без commissions → реальная торговля с -30% к результатам.

Сроки: 8–16 недель

Базовый агент на 5–10 активах — 4 недели. Multi-asset портфель с feature engineering, walk-forward validation, интеграция с брокерским API — 12–16 недель.