Блог им. 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

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


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

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


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

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

785 | ★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:
Фото
Газета «Коммерсант» выпустила тематическое приложение о страховом рынке
Много интересных материалов для тех, кто работает в отрасли и тех, кто так или иначе с ней связан. Полагаем, публикации могут быть интересны и...
Фото
🥳 В десяточку! Два выпуска на сумму более 10 млрд рублей
ГК «А101» завершила сбор книги заявок на два выпуска облигаций общим объемом 10,5 млрд рублей. Начало торгов состоится 26 декабря....
Выгодны ли кредит под залог криптовалюты
Зампредправления Сбера Анатолий Попов заявил, что со временем банк может предложить кредиты под залог криптовалют. Подробности о том, для какой...
Фото
Какая доходность среди облигаций с наивысшим рейтингом надежности и сроком погашения от 3 лет?

теги блога quantAIengineer

....все тэги



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