quantAIengineer
quantAIengineer личный блог
16 августа 2025, 17:36

Reinforcement Learning агент для краткосрочной алгоритмической торговли на Binance Futures — архитектура, бэктест (+144%), результаты

Кривая баланса на бэктесте Динамика капитала на отложенных рыночных данных (период: 2025-03-01 — 2025-06-01), с учётом комиссий и проскальзываний.  Итоговое изменение баланса: +144.23%

🔹 Суть проекта

Реализован агент на основе обучения с подкреплением (Reinforcement Learning) для краткосрочной внутридневной торговли на Binance Futures.
Агент работает в режиме реального времени, принимает дискретные решения (LONG / SHORT / CLOSE / HOLD), учитывая комиссии и проскальзывания.

Это не академическая демонстрация, а полноценный исследовательский проект, архитектура и код которого полностью открыты.

🔹 Основные особенности

  • Учет комиссий, проскальзывания и риск-менеджмента

  • Отбор торговых сессий по критериям волатильности (импульсы ≥5% за 10 минут)

  • Дискретное пространство действий: LONG, SHORT, CLOSE, HOLD

  • Reward shaping для контроля поведения

  • Полные логи бэктеста и визуализации

  • Публикация сигналов в реальном времени (Telegram)

📊 Результаты бэктеста (март-июнь 2025)

  • Доходность: +144.23%

  • Sharpe: 1.85, Sortino: 2.05

  • Прибыльных дней: 78.57%

  • Сделок: 112 (~2 в день), включая SL/TP

  • Среднесуточная доходность: +1.61%

  • Точность сигналов: LONG — 69.9%, SHORT — 68.4%

Каждая сделка зафиксирована в журнале: время, цена входа/выхода, позиция, результат и значение Q-функции.

✅ Примеры прибыльных сделок:
  • +2562 USDT 
  • +1805 USDT 
Profitable Session 1
Profitable Session 2
❌ Примеры убыточных сделок:
  • –577 USDT 
  • –161 USDT 
Unprofitable Session 1
Unprofitable Session 2

⚙️ Архитектура и обучение

  • Dueling Double DQN (D3QN)

  • Prioritized Experience Replay (PER)

  • Подбор гиперпараметров с Optuna

  • Состояние включает рыночные данные, позицию, контекст и историю действий

🔹Данные и сессии

Обычные RL-модели обучаются на непрерывных рыночных данных, где шум подавляет сигнал.
В проекте используется отбор только высокосигнальных сессий:

  • Триггер: движение цены ≥5% за 10 минут

  • Контраст: 90 минут спокойного рынка до импульса

  • Сессия: 150 минут (90 мин контекста + 60 мин торговли)

  • Формат: матрица 150×7 (OHLC, VWAP, объём, сделки)

📊 Разбиение:

  • Train [2020-01-14 — 2024-08-31): 24 104 сессии

  • Validation ([2024-09-01 — 2024-12-01): 1 377 сессии

  • Test [2024-12-01 — 2025-03-01): 3 400 сессий

  • Backtest [2025-03-01 — 2025-06-01): 3 186 сессий

Агент учится только на рыночных импульсах, а не на шуме.

Примеры данных для всех четырех подвыборок: Train, Validation, Test, Backtest:
Train Example
Validation Example
Test Example
Backtest Example

🤖 Онлайн-режим

Агент работает в режиме реального времени: каждую минуту сканирует рынок Binance Futures, формирует прогноз (LONG/SHORT) и публикует сигнал в Telegram с последующей верификацией.

Live Signal + Prediction                 |                Verification Example

🔗 Материалы проекта


⚠️ Важное примечание: агент работает в экспериментальном режиме. Все решения, принимаемые пользователями на основе информации из канала, осуществляются под их личную ответственность.

Проект является исследовательским и предоставляется бесплатно исключительно в образовательных целях.


💬 Если вам интересны детали архитектуры и примеры работы — приглашаю изучить полную статью на Хабре.
Код, датасеты и онлайн-работа агента доступны для всех: вы можете изучать реализацию, запускать проект на своём компьютере, воспроизводить эксперименты и совершенствовать собственные стратегии.

Этот проект задуман как полноценная исследовательская лаборатория, цель которой — вдохновить вас на более глубокое изучение обучения с подкреплением в алгоритмической торговле.

17 Комментариев
  • Synthetic
    17 августа 2025, 02:10
    Этот проект задуман как полноценная исследовательская лаборатория, цель которой — вдохновить вас на более глубокое изучение обучения с подкреплением в алгоритмической торговле.

    Если в этой фразе последние три слова заменить на точку, будет гораздо честнее.
  • Again!
    17 августа 2025, 05:48
    Интересно.
  • Schwonder
    17 августа 2025, 11:11
    Дeнег не дам.
  • Replikant_mih
    17 августа 2025, 17:59

    >> цель которой — вдохновить вас на более глубокое изучение обучения с подкреплением в алгоритмической торговле


    А в отношении себя какая цель проекта? Не всё делается ради денег, понятно, обычно любая цель она как правило с тебя начинается. Можно хотеть вдохновить людей но для чего, почему? 

      • Replikant_mih
        18 августа 2025, 12:11
        quantAIengineer, Ну это тоже для кого-то, не понятно, что именно вам это даёт).
  • Просто трейдер
    18 августа 2025, 00:33
    Поразительно как ИИ может оформлять так, как будто это проект с давней историей.
  • Eth_algotrader
    18 августа 2025, 12:47
    Очень круто!

    Редкий случай, когда пайплан описан корректно и исчерпывающе. И сам подход тоже грамотный, а не как обычно «я засунул гигабайт ohlc в нейронку и получил оверфит». Спасибо за труд!

    Можно пару вопросов?
    • Test [2024-12-01 — 2025-03-01): 3 400 сессий

    • Backtest [2025-03-01 — 2025-06-01): 3 186 сессий


    1) В чем разница между периодами test и backtest?
    2) Насколько вижу, модель сошлась в основном к стратегиям «лонг в продолжение импульса» / «лонг падающего ножа». Шортов меньше в % соотношении? А отдельно рассмотреть их результат не пробовали? А разделить вышеуказанные 2 страты и рассмотреть их по отдельности? Вдруг все тащщит 1 лучшая страта, а остальные висят мертвым грузом / наоборот тормозят.
      • Eth_algotrader
        18 августа 2025, 16:28
        quantAIengineer, 
        Test vs Backtest
        А эквити теста покажите? Тоже вполне себе представляет интерес. 

        • лонги — ~93 сделки, точность ~70%;

        • шорты —-19 сделок, точность ~68%.

        Тут очень важно еще их средние сделки сравнивать. Из-за разницы средних результативность лонгов может быть далеко не на 2% выше.
  • Eth_algotrader
    18 августа 2025, 13:58
    PS: здесь очень специфическая аудитория, не смущайтесь. Люди регулярно торгуют теряют деньги, они тут многие такие. Но есть и достойные собеседники. Регулярное пополнение ЧС решает вопрос ;)
  • Sowelo
    18 августа 2025, 18:25

    У вас ошибка в коде в environment. 

    1)pnl_change -= exec_price * volume * self.transaction_fee

    2)self.balance += pnl_change #->обнуляем balance

    3)elif action == 3 and self.position != 0:
       volume = self.balance / self.entry_price #->он всегда ноль!

    Итого, после любой покупки баланс навсегда становится = 0, reward-ы не поступают.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн