Блог им. quantAIengineer

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

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


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

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


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

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

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

Если в этой фразе последние три слова заменить на точку, будет гораздо честнее.
avatar

Synthetic, 

Я сторонник аргументированной дискуссии и всегда рад объективному мнению со стороны — это ценно для развития проекта. Но ваш аргумент про «точку» скорее свидетельствует о компетенциях в области пунктуации и правописания, нежели в алгоритмической торговле с применением искусственного интеллекта.
В любом случае благодарю за комментарий. Надеюсь, что подобные исследовательские проекты будут служить противовесом невежеству и поверхностным репликам.

avatar
Интересно.
avatar

Again!, 

Спасибо за интерес!
Архитектура, код и датасеты доступны в открытом доступе — каждый может воспроизвести эксперименты и поработать с гиперпараметрами.
Для тех, кто хочет погрузиться глубже, ссылка на статью на Хабре приведена в посте: там подробно описаны все детали.

avatar
Дeнег не дам.
avatar

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


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

avatar

Replikant_mih, 

Личная цель — сократить разрыв между розничными и институциональными участниками через открытую и воспроизводимую RL-платформу. Публикую код, данные и метрики, чтобы любой мог проверить и развивать решения.

Проект исследовательский, не коммерциализируется и не является торговой рекомендацией.

avatar
quantAIengineer, Ну это тоже для кого-то, не понятно, что именно вам это даёт).
avatar
Поразительно как ИИ может оформлять так, как будто это проект с давней историей.
avatar

Просто трейдер, 

Спасибо за отзыв. Публикация свежая, но разработку проекта веду около года.
Проект исследовательский, некоммерческий. Если будут конкретные технические вопросы — с радостью отвечу.

avatar
Очень круто!

Редкий случай, когда пайплан описан корректно и исчерпывающе. И сам подход тоже грамотный, а не как обычно «я засунул гигабайт 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 лучшая страта, а остальные висят мертвым грузом / наоборот тормозят.
avatar

Eth_algotrader, 

Спасибо за вопросы.

  1. Test vs Backtest
    Тестовый набор (3 400 сессий) использовался строго для финальной проверки после обучения/валидации, без оптимизаций.
    Бэктест (3 186 сессий) — это отдельный период, максимально приближённый к реальной торговле: с комиссиями, проскальзыванием, логированием сделок и риск-менеджментом. То есть test — чистая оценка обобщающей способности, а backtest — имитация реальной эксплуатации.

  2. Распределение стратегий
    Да, модель чаще открывает лонги, что логично для крипторынка с ярко выраженным ап-трендом. В бэктесте:

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

  • шорты —-19 сделок, точность ~68%.
    Обе стороны в плюсе, хотя вклад лонгов выше. Разделение сценариев (импульсный вход vs «падающий нож») уже видно на визуализациях в статье: часть сессий тянет именно continuation-логика, часть — отскоки. Более детальный анализ стратегий — следующий шаг, но уже сейчас видно, что прибыль не сводится к одной «лучшей» схеме.

avatar
quantAIengineer, 
Test vs Backtest
А эквити теста покажите? Тоже вполне себе представляет интерес. 

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

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

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

Eth_algotrader, 

Понял, спасибо, надеюсь ЧС это крайняя мера, стараюсь верить в людей :). Я здесь именно за содержательной дискуссией, поэтому нормальная критика и вопросы только приветствуются. Остальное — действительно проще фильтровать.

avatar

У вас ошибка в коде в 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-ы не поступают.

avatar

Sowelo,

Итог заранее: вы не правы. Баланс нигде не обнуляется.


1. Про self.balance += pnl_change
Это прибавление дельты, а не присваивание. На входе в позицию pnl_change = -fee, баланс становится balance = balance — fee. Ноль тут взять неоткуда.


2. Про “объём всегда ноль”
В коде при закрытии используется:
volume = self.balance / self.entry_price
После входа баланс положительный (чуть меньше из-за комиссии).
Значит, volume > 0.
Заявление “всегда ноль” — ошибка чтения.


3. Про “реворды не поступают”
Награда считается так:
reward = (pnl_change / initial_balance) — inaction_penalty
pnl_change
появляется при списании комиссии и при закрытии позиции (прибыль/убыток минус комиссия). Следовательно, реворды не нулевые по определению.

Мини-калькуляция (чтобы закрыть вопрос окончательно)

initial_balance = 10_000, fee = 0.04%.


Вход LONG по 10:

volume_open = 10_000 / 10 = 1_000
fee_open = 10 * 1_000 * 0.0004 = 4
balance = 10_000 — 4 = 9_996 (не ноль!)


Закрытие по 11:

volume_close = balance / entry_price = 9_996 / 10 = 999.6
trade_pnl = (11 — 10) * 999.6 = 999.6
fee_close = 11 * 999.6 * 0.0004 ≈ 4.39824
pnl_change ≈ 999.6 — 4.39824 = 995.20176
balance_new ≈ 9_996 + 995.20176 = 10_991.20176
reward ≈ 995.20176 / 10_000 ≈ 0.0995 (точно не 0)


Вывод:
в указанных строках нет описанной вами ошибки. Баланс не обнуляется, объём при закрытии не равен нулю, реворды есть. Ваше замечание — результат неправильной интерпретации кода.

avatar

Читайте на SMART-LAB:
Фото
📈 Выручка Группы МГКЛ за 11 месяцев — 27 млрд рублей (x3,6 к АППГ)
К концу 2025 года подходим с рекордными прогнозными показателями: ✅ Прогноз по выручке — 27 млрд рублей, что в 3,6 раза выше, чем за...
Фото
IR-команда «Озон Фармацевтика» встретилась с аналитиком СберИнвестиций Софией Кирсановой
Мы поделились нашими планами и достижениями, а также ответили на вопросы. Поговорили о включении в индекс Мосбиржи, росте...
Фото
🎭 За кулисами ноября: итоги
В прошлом месяце вложения физлиц в ценные бумаги выросли на 36% . В облигации было инвестировано 115,6 млрд , в паи фондов — 31,1 млрд....

теги блога quantAIengineer

....все тэги



UPDONW
Новый дизайн