Исследовательская торговая система BTC/USDT с асинхронной инфраструктурой, риск-менеджментом и ML-планом развития
Проект на Python — исследование торговых сигналов BTC/USDT в условиях меняющихся рыночных режимов.
Проект начинался как автономный торговый бот BTC/USDT, объединяющий:
- сканирование рынка Binance в реальном времени
- AI-анализ новостей и настроений
- многоуровневый риск-менеджмент
- исполнение и мониторинг в режиме paper trading
После перехода сканера с сырых тиков на закрытые 3-минутные свечи и добавления фильтров RSI, EMA-тренда и подтверждения по объёму, был проведён walk-forward backtest — проверка устойчивости основного Z-score сигнала.
Сигнал не показал стабильного преимущества на out-of-sample данных.
Этот результат изменил направление проекта: следующий этап — ML-пайплайн на основе размеченного датасета Binance и моделей последовательностей, таких как LSTM.
Текущее состояние репозитория:
- исследовательский проект алгоритмической торговли
- кастомная торговая система на Python без использования готовых trading-фреймворков
- переход от rule-based сигналов к поиску сигналов через ML
- основа для будущего продуктового слоя: дашборды, сигналы, подписочная доставка
Выполнено за последний период:
- сканер переведён с тиковых данных на закрытые 3-минутные свечи
- шумное определение микро-движений заменено на Z-score логику на основе свечей
- добавлены фильтры RSI, EMA-тренда и подтверждения по объёму
- добавлен мгновенный прогрев истории после переподключения — сканеру больше не нужно "разогреваться" 60 минут заново
- построен walk-forward backtest на исторических свечах Binance
- создан первый размеченный датасет для ML-этапа
- подтверждено, что текущий Z-score сигнал не показывает стабильного преимущества на out-of-sample данных
Главный вывод:
Инфраструктура уже устойчива, но текущий основной торговый сигнал пока недостаточно робастен в разных рыночных режимах.
Поэтому проект движется в сторону ML-моделирования сигналов.
Перед открытием позиции должны совпасть два независимых сигнала:
[Scanner] Сигнал по закрытой 3-минутной свече:
Z-score аномалия
фильтр RSI
фильтр EMA-тренда
подтверждение по объёму
[Research] Уверенность AI-сентимента > 0.70
Направление совпадает с сигналом сканера
оба условия совпадают
[Risk] Размер позиции по Kelly Criterion
проверки защиты капитала пройдены
вход разрешён
[Executor] Исполнение ордера в paper-trading
[Monitor] Отслеживание TP / SL / таймаута / обратного сигнала
Такая схема отсеивает слабые входы. Одной аномалии недостаточно — фильтры сканера и направление от research-модуля должны совпасть, прежде чем риск-менеджмент разрешит исполнение.
Binance_trading_bot/
|-- main.py # Асинхронный оркестратор - запускает параллельные задачи
|-- config.py # Все параметры в одном месте
|-- requirements.txt
|-- .env.example
|-- backtest_wf.py # Скрипт walk-forward валидации
|-- lstm_dataset.py # Подготовка датасета для ML-этапа
|-- risk_state.json # Сохранённое состояние риск-менеджера
|
|-- src/
| |-- scanner.py # Сканер Binance WebSocket на закрытых 3-минутных свечах
| |-- research.py # Агрегация новостей + анализ сентимента через Claude
| |-- risk.py # Kelly Criterion + защита капитала
| |-- executor.py # Исполнение ордеров в paper-trading режиме Binance
| |-- position_monitor.py # Логика выхода TP / SL / таймаут / обратный сигнал
| `-- telegram_bot.py # Уведомления в Telegram в реальном времени
|
`-- logs/
|-- main.log
|-- scanner.log
|-- research.log
`-- trades.xlsx # Полная история сделок с таймстампами
| Модуль | Функция | Ключевая технология |
|---|---|---|
scanner.py |
Сигнальный движок на закрытых свечах с Z-score, RSI, EMA и фильтром объёма | Binance WebSocket API |
research.py |
Новости каждые 5 минут, AI-оценка сентимента | Claude Haiku, CryptoPanic, RSS, Fear & Greed |
risk.py |
Сайзинг позиций и защита капитала | Kelly Criterion, персистентное состояние |
executor.py |
Размещение ордеров в paper-trading | Binance REST API |
position_monitor.py |
Проверки выхода TP / SL / таймаут / реверс | asyncio task |
telegram_bot.py |
Алерты по сделкам и статус | Telegram Bot API |
- стримит закрытые 3-минутные свечи BTC/USDT с Binance
- считает Z-score логарифмических доходностей на скользящем окне
- считает RSI, EMA-тренд и подтверждение объёма на каждой закрытой свече
- генерирует бычий или медвежий сигнал только когда все фильтры совпадают
- блокирует слабые аномалии и логирует причину отказа
Агрегация из 4 независимых источников каждые 5 минут:
| Источник | Тип | Обработка лимитов |
|---|---|---|
| CryptoPanic API | Агрегатор новостей + голоса сообщества | Авто-отключение при лимите 600/мес |
| CoinTelegraph RSS | Крипто-медиа | Без лимита |
| CoinDesk RSS | Крипто-медиа | Без лимита |
| Fear & Greed Index | Индекс настроения рынка (0-100) | Без лимита |
Все источники передаются в Claude Haiku для единой классификации сентимента: bullish / bearish / neutral с оценкой уверенности. Дальше пропускаются только сигналы с confidence >= 0.70.
Многоуровневая система защиты капитала, состояние сохраняется в risk_state.json:
| Параметр | Значение | Описание |
|---|---|---|
| Размер позиции | макс. 5% на сделку | Скорректировано по Kelly Criterion |
| Stop-loss | 8% | Жёсткий предел по позиции |
| Take-profit | 5% | Фиксированная цель выхода |
| Макс. открытых позиций | 10 (paper) / 3 (live) | Лимит концентрации |
| Дневной лимит убытка | 10% | Останавливает торговлю на день |
| Макс. просадка | 25% | Полная остановка системы |
| Кулдаун входа | 20 мин | Защита от overtrading |
| Мин. уверенность | 0.70 | Фильтр качества сигнала |
| Kelly fraction | 0.25 | Консервативная доля Kelly |
Логика выхода (position_monitor.py) проверяется каждые 3 секунды:
- Достигнут take-profit -> закрытие
- Достигнут stop-loss -> закрытие
- Обратный сигнал от research -> досрочное закрытие
- Истёк таймаут -> закрытие
Core Python 3.11, asyncio, Anaconda (botenv)
Exchange Binance WebSocket API, Binance REST API (testnet)
AI / NLP Anthropic Claude API (Haiku) для анализа сентимента
Data CryptoPanic API, CoinTelegraph RSS, CoinDesk RSS
Alternative.me Fear & Greed Index
Research Walk-forward backtesting, генерация размеченного ML-датасета
Alerts Telegram Bot API
Logging Excel trade log (openpyxl), файловые логи
Environment Anaconda, python-dotenv
Требуется Anaconda.
git clone https://github.com/Dn-Sn22/Binance_trading_bot.git
cd Binance_trading_bot
conda create -n botenv python=3.11 -y
conda activate botenv
conda install pandas numpy -y
pip install -r requirements.txt
cp .env.example .env
# Заполните свои API-ключи: Binance Testnet, Anthropic, CryptoPanic, TelegramНеобходимые API-ключи:
- Binance Testnet API key + secret
- Anthropic API key
- CryptoPanic API token
- Telegram Bot token + chat ID
conda activate botenv
cd Binance_trading_bot
# Удалить устаревшее состояние перед каждой сессией
del risk_state.json # Windows
# rm risk_state.json # Linux/Mac
python main.pyБот запускает параллельные задачи для сканера, research-модуля и мониторинга позиций. Активность логируется локально, важные события отправляются в Telegram.
- инфраструктура paper-trading: работает
- переход сканера на 3-минутные свечи: завершён
- walk-forward валидация: завершена
- текущий Z-score сигнал: нестабилен на out-of-sample
- подготовка ML-датасета: завершена
- baseline ML-модели: в планах
- первая модель LSTM: в планах
- Асинхронная архитектура торгового бота
- Сканер Binance на 3-минутных свечах
- Фильтры RSI / EMA / объём
- Прогрев истории после переподключения
- Walk-forward backtest
- Доказано отсутствие стабильного преимущества текущего сигнала
- Подготовка ML-датасета из свечей Binance
- Бенчмарк baseline-моделей
- Обучение первой модели LSTM
- Интеграция ML-инференса в paper trading
- Определение рыночного режима
- Более реалистичное исполнение: комиссии, slippage, задержки
- Расширенное управление через Telegram
- TUI / дашборд
- Веб-фронтенд для доставки сигналов
- Поддержка нескольких активов
- Несколько стратегий
- Продуктовый слой и подписочная доставка
- Публичный релиз ML-модели / датасета
Основной критерий — стабильный, риск-осознанный сигнальный движок, а не разовый результат бэктеста.
| Метрика | Цель |
|---|---|
| Win rate | > 55% |
| Sharpe Ratio | > 1.5 |
| Max Drawdown | < 15% |
| Месячная доходность | > 8% |
| Среднее R:R | > 1 : 1.5 |
TRADING_MODE = testnet— исполнение остаётся на Binance Testnet- API-ключи хранятся в
.envи никогда не коммитятся .env.exampleсодержит только placeholder-значения
MIT License — подробности в LICENSE.
Создано на Python, asyncio и с долгосрочным исследовательским подходом. Сейчас в исследовательской фазе — не является финансовой рекомендацией.