Claude / DeepSeek / OpenAI / Groq / Gemini · SAC (RL) · Amazon Chronos · 10+ рыночных сигналов в реальном времени
BitbotBY сканирует рынок Bybit, сводит сигналы AI-модели, SAC-нейросети и 16 классических стратегий с рыночным контекстом (funding, ликвидации, Fear & Greed, ордербук, деривативы, сентимент соцсетей) и торгует perpetual-фьючерсами long/short — с квант-риск-менеджментом (Kelly, CVaR, Almgren-Chriss) и полным управлением через Telegram.
Три рыночных профиля под разную волатильность: Bluechip (топ-20), Altcoin (топ-100), Meme (топ-200, памп-стратегии + Twitter/Telegram сентимент).
⚠️ Торговля с реальными деньгами. Всегда начинайте сPAPER_TRADING=trueи пройдите чек-лист перед реальной торговлей.
- Как это работает
- Архитектура
- Возможности
- Быстрый старт
- Конфигурация
- Справочник .env — все переменные
- Управление через Telegram
- Мониторинг
- Обучение SAC-модели
- Бэктест и валидация альфы
- Makefile команды
- Тесты
- FAQ
- Перед реальной торговлей
Цикл адаптируется к состоянию портфеля: полный скан рынка, когда есть свободные слоты, и лёгкий режим мониторинга, когда все позиции заняты (экономия AI-токенов в 5–33×).
flowchart LR
subgraph FULL["🔍 Полный скан — есть свободные слоты"]
direction TB
A1["Скан Bybit\nbluechip 20 / altcoin 100 / meme 200"] --> A2["Prescore-фильтр\nтоп-30 по RSI/объёму/ATR/тренду"]
A2 --> A3["OHLCV + индикаторы\n+ рыночный контекст (13 сигналов)"]
A3 --> A4["SeasonDetector\nBTC-доминация → сезон рынка"]
A4 --> A5["Сигналы: 16 стратегий\n+ AI + SAC [+ Chronos]"]
A5 --> A6["Composite score\nconfidence × TP × объём × режим"]
A6 --> A7["Открытие позиции\ndynamic leverage + SL/TP на бирже"]
end
subgraph MON["👁 Режим мониторинга — все слоты заняты"]
direction TB
B1["Скан только открытых\nпозиций + BTC/ETH барометр"] --> B2["AI только по ним\nэкономия токенов"]
B2 --> B3["Динамические выходы:\nразворот тренда, funding squeeze, F&G"]
end
A7 -.slot freed.-> FULL
MON -->|каждые 5с| C["Position Monitor\ntrailing · partial TP · SL/TP"]
A7 --> C
C -->|закрытие| D["OnlineLearner\nдообучение SAC"]
style FULL fill:#0d3b2e,stroke:#2ecc71,color:#fff
style MON fill:#2b2340,stroke:#9b6bff,color:#fff
style C fill:#3a2c14,stroke:#f39c12,color:#fff
style D fill:#1c2c4c,stroke:#4a90e2,color:#fff
Полная цепочка принятия решения — 14 шагов с формулами (развернуть)
| # | Шаг | Что делает |
|---|---|---|
| 1 | Снэпшоты (cycle.py) | OHLCV → индикаторы (RSI/MACD/BB/ATR/тренд) + новостной сентимент на монету |
| 2 | Prescore | score = vol×0.35 + rsi×0.30 + atr×0.20 + regime_bonus×0.15 → топ-30 в AI |
| 3 | Рыночный контекст (market_context.py) | 13 сигналов: funding, OI+ликвидации, F&G, basis, orderbook, Deribit PCR/IV, Google Trends, Glassnode, ETF flows, Reddit (CryptoBERT), stablecoin supply |
| 4 | SignalCombiner (signal_combiner.py) | local / ai / dqn / hybrid (SAC+AI согласие, вес зависит от режима: trending 50/50, ranging 40/60) / hybrid+Chronos (±0.05…0.15 модификатор) |
| 5 | Контекстный фильтр | Каждый из 13 сигналов двигает confidence на ±0.05…0.15 (напр. F&G ≤15 + каскад ликвидаций → confidence = 0) |
| 6 | Прямые контекстные сигналы | Экстремумы (funding overheated, squeeze, imbalance >0.4, F&G ≤10/≥92) генерируют отдельные сигналы |
| 7 | Локальный fallback | Если сигналов нет — индикаторная стратегия, TP шире в тренде, уже в боковике |
| 8 | Приоритизация | composite_score = confidence × (1+tp_bonus) × (1+volume_bonus) × regime_mult |
| 9 | Portfolio allocation | CVaR/Markowitz (portfolio_optimizer.py) при ≥2 сигналах, cap ×3 |
| 10 | Execution guards (order_executor.py) | macro blackout → слоты/cooldown → торговые часы → дубликат символа → correlation guard → подтверждение в Telegram → liquidity filter → валидация SL/TP → Kelly sizing → drawdown scaling → Almgren-Chriss → dynamic leverage → ордер |
| 11 | После открытия | PositionMonitor каждые 5с: те же 13 сигналов контекста управляют выходом (force_close / tighten_sl) |
Что реально отличается по профилям (не только параметры): Meme — единственный профиль с
Twitter/Telegram сентиментом как входом и стратегиями momentum_burst/pump_exit/sentiment.
BTC ETF flows применяются только к BTC/USDT. Остальная логика (contrarian funding/PCR/FNG, Kelly,
correlation guard, Almgren-Chriss) идентична во всех профилях — различаются только цифры.
flowchart TB
SUP["supervisor.py\nrestart on crash · SIGTERM"] --> BOT["TradingBot\nsrc/trading_bot.py"]
subgraph DATA["Данные и сигналы"]
SCAN["MarketScanner"]
DL["DataLoader\nccxt async · CSV cache 24ч"]
REGIME["RegimeDetector\nGaussianHMM"]
CTX["MarketContext\n10+ источников, TTL 5–240мин"]
NEWS["NewsAnalyzer\nNewsAPI + RSS + VADER"]
TW["TwitterAnalyzer\nMeme профиль"]
TG["TelegramSentiment\nTelethon MTProto"]
POLL["SentimentPoller\nasyncio → Redis"]
end
subgraph BRAIN["Принятие решений"]
COMBINER["SignalCombiner\nSAC + AI [+Chronos]"]
CHRONOS["ChronosAnalyzer\namazon/chronos-t5-small"]
CRYPTOBERT["CryptoSentimentAnalyzer\nElKulako/cryptobert"]
PORT["PortfolioOptimizer\nCVaR / Markowitz"]
CORR["CorrelationFilter"]
MACRO["MacroCalendar\nFOMC/CPI/NFP blackout"]
ARB["FundingArbDetector"]
end
subgraph EXEC["Исполнение"]
OE["OrderExecutor\nKelly → CVaR → Almgren-Chriss"]
PM["PositionMonitor\nSL/TP · trailing · partial TP"]
API["BybitAPI\nccxt async, linear+spot"]
LEARN["OnlineLearner\nSAC auto-retrain"]
end
subgraph OUT["Наблюдаемость"]
NOTIFY["TelegramNotifier"]
HIST["TradeHistory\nSQLite"]
HEALTH["HealthServer\n/health /metrics"]
end
BOT --> SCAN & DL & REGIME & CTX
CTX --> NEWS & TW & TG & POLL
BOT --> COMBINER
COMBINER --> CHRONOS & CRYPTOBERT
BOT --> PORT & CORR & MACRO & ARB
BOT --> OE --> API
OE --> PM --> LEARN
BOT --> NOTIFY & HIST & HEALTH
style SUP fill:#1c1c1c,stroke:#888,color:#fff
style BOT fill:#0d3b2e,stroke:#2ecc71,color:#fff
style DATA fill:#16213e,stroke:#4a90e2,color:#fff
style BRAIN fill:#2b2340,stroke:#9b6bff,color:#fff
style EXEC fill:#3a2c14,stroke:#f39c12,color:#fff
style OUT fill:#3a1414,stroke:#e74c3c,color:#fff
RL / бэктест:
reinforcement_learning/
├── rl_env.py — TradingEnv (Gymnasium), OBS_DIM=21, exec по open[i+1]
├── train_sac.py — SAC: 80/20 split, Optuna, walk-forward, online finetune
└── tune_sac.py — Optuna hyperparameter search
backtest.py — walk-forward с holdout 20%, overfit ratio
dashboard.py — FastAPI :8080 (баланс, позиции, история)
| Источник | Логика | Профиль |
|---|---|---|
| Funding Rate (Bybit) | >0.1% = лонги перегреты → SHORT contrarian | все |
| Open Interest + цена | OI↓ + цена↓ → ликвидация лонгов | все |
| Fear & Greed | ≤15 контрарный BUY (если нет каскада), ≥85 гасит BUY | все |
| Orderbook Imbalance | ask/bid > 1.4 → SELL | все |
| Basis (futures-spot) | >2% премия = жадность → SELL | все |
| Deribit PCR + IV Skew | PCR <0.5 = all-in calls → SELL | все |
| ETF Flows (farside.co.uk) | Outflow < −$100M → SELL, Inflow > $150M → BUY | только BTC |
| Google Trends | >75 = retail FOMO пик → SELL | все |
| Reddit / CryptoBERT | NLP-классификация постов r/CryptoCurrency | все |
| News sentiment | NewsAPI/RSS + Claude/DeepSeek/VADER | все |
| Twitter/X | VADER, Basic API ~10K твитов/мес | только Meme |
| Telegram памп-каналы | Telethon MTProto, вес 2× в score | только Meme |
| Stablecoin Supply | USDT market cap ↓ → риск оттока | фильтр |
Все источники кэшированы (5 мин — 4 часа) и gracefully degradируют при недоступности.
- 10 базовых стратегий: EMA crossover, RSI, MACD, Bollinger Bands, Scalping, Swing, Breakout, Mean Reversion, Trend Following, Volume Spike
- 6 профильных стратегий: активируются автоматически при смене профиля (
momentum_burst,pump_exit,sentiment— Meme; и др.) - AI-анализ: Claude / DeepSeek / OpenAI / Groq / Gemini с fallback-цепочкой
- SAC (Soft Actor-Critic) — RL-модель, обучается на истории, дообучается онлайн после каждой сделки
- Amazon Chronos — предобученная time-series модель, мягкий модификатор confidence в hybrid-режиме
| Инструмент | Где применяется |
|---|---|
| Kelly Criterion (half-Kelly) | Sizing позиции по live win-rate/EV стратегии |
| CVaR / Markowitz | Portfolio allocation при нескольких одновременных сигналах |
| Almgren-Chriss | Поправка entry-цены на market impact от размера ордера |
| GaussianHMM | Определение режима рынка (trending/ranging) per-symbol |
| Correlation guard | Блокирует новую позицию, коррелирующую с открытой |
Macro blackout (FOMC/CPI/NFP) · Correlation filter · Liquidity filter (spread/объём) · Circuit breaker и дневной лимит убытков · Hard drawdown halt (закрытие убыточных, SL в breakeven на прибыльных, блокировка входов) · ATR spike protection (закрытие всех позиций, пауза 1ч) · Dynamic leverage (fixed/volatility/full, ATR-based) · Trailing stop + partial TP.
Python 3.11 · Docker + Docker Compose (рекомендуется) · API-ключи Bybit · один AI-провайдер · Telegram-бот
git clone https://github.com/deuteriumZzz/BitbotBY.git
cd BitbotBY
cp .env.example .env # заполнить ключи — см. раздел «Конфигурация»
make setup # первый запуск: сборка, htpasswd, docker compose uppython -m venv venv && source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
cp .env.example .env
python supervisor.pyBYBIT_API_KEY=...
BYBIT_API_SECRET=...
BYBIT_TESTNET=false
MARKET_TYPE=linear
AI_PROVIDER=deepseek # или claude / openai / groq / gemini
DEEPSEEK_API_KEY=...
TELEGRAM_BOT_TOKEN=...
TELEGRAM_CHAT_ID=... # числовой ID из @userinfobot, не username
PAPER_TRADING=true
AUTO_EXECUTE=false
MODE=hybridПолный список переменных с описанием — в .env.example (комментарии на русском ко
всем секциям: Bybit API, AI-провайдер, режим торговли, Telegram, торговые параметры, управление
позициями, риск-менеджмент, macro blackout, онлайн-обучение SAC, внешние сигналы, мониторинг).
| Категория | Ключевые переменные |
|---|---|
| Биржа | BYBIT_API_KEY/SECRET, MARKET_TYPE, BYBIT_TESTNET |
| AI | AI_PROVIDER, <PROVIDER>_API_KEY, AI_DAILY_BUDGET, AI_MAX_SYMBOLS |
| Режим | MODE (local/ai/dqn/hybrid), PAPER_TRADING, AUTO_EXECUTE |
| Профиль | MARKET_PROFILE (bluechip/altcoin/meme) |
| Позиции | MAX_POSITIONS (1–20), RISK_PER_TRADE, LEVERAGE, LEVERAGE_MODE |
| Риск | DAILY_LOSS_LIMIT, DRAWDOWN_HALT_HOURS, MAX_CORRELATION, MAX_SPREAD_PCT |
| Telegram | TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID, TELEGRAM_CONFIRM_TIMEOUT |
| Инфра | REDIS_HOST/PASSWORD, DASHBOARD_USER/PASSWORD |
Большинство параметров (режим, стратегии, риск-профиль, часы торговли, число позиций) меняются прямо из Telegram-меню без перезапуска — хранятся в Redis с AOF-персистентностью.
Построчное описание каждой переменной. Разворачивай нужную категорию.
🔑 Bybit API
BYBIT_API_KEY= # Получить: bybit.com → Account → API Management
BYBIT_API_SECRET= # ⚠ Никогда не публиковать, не коммитить в git
TESTNET=false # true → торговать на testnet.bybit.com (без реальных денег)
# Ключи testnet создаются отдельно от production!
MARKET_TYPE=linear # linear → perpetual futures (РЕКОМЕНДУЕТСЯ, дефолт при старте)
# + Умеет открывать SHORT позиции
# + Есть funding rate (дополнительный сигнал)
# + Плечо до 100x (мы ставим max=3)
# spot → только LONG, нет шорта, нет плеча
# Это только стартовое значение при первом запуске —
# дальше режим переключается на лету через Telegram
# (💱 Рынок в Настройках), без правки .env и рестарта.
LEVERAGE=3 # МАКСИМАЛЬНОЕ плечо. Бот рассчитывает динамически от 1 до LEVERAGE.
# Рекомендуется: 2–3 для старта. Не ставить >5 пока нет статистики.
# LEVERAGE=1 = торговля без плеча (как спот, но на фьючерсах)Права API ключей: для futures —
Contract — OrdersиContract — Positions. Если планируете когда-либо переключаться на spot через Telegram — включите такжеSpot — Tradeсразу, оба права спокойно живут на одном ключе. Право на вывод средств — НЕ включать.
🧠 AI-провайдер
AI_PROVIDER=auto # auto → пробует Claude → OpenAI → DeepSeek → Groq → Gemini → локальные стратегии
# anthropic → только Claude
# deepseek → только DeepSeek
# groq → только Groq (Llama 3.3 70B, самый быстрый)
# openai → только ChatGPT
# gemini → только Google Gemini Flash
# ── Groq — БЕСПЛАТНЫЙ тир, 100k токенов/день, Llama 3.3 70B ──
# console.groq.com → API Keys → Create
GROQ_API_KEY=gsk_...
GROQ_MODEL=llama-3.3-70b-versatile
# ── Google Gemini Flash — БЕСПЛАТНЫЙ тир, 1500 запросов/день ──
# aistudio.google.com → Get API Key (бесплатно, без карты)
GEMINI_API_KEY=...
GEMINI_MODEL=gemini-2.0-flash-lite
# ── DeepSeek — САМЫЙ ДЕШЁВЫЙ (~$0.002 за запрос) ──
# platform.deepseek.com → API Keys → Create
DEEPSEEK_API_KEY=sk-...
DEEPSEEK_MODEL=deepseek-chat
# ── Claude (Anthropic) — лучшее качество анализа ──
# console.anthropic.com → API Keys → Create Key
ANTHROPIC_API_KEY=sk-ant-...
AI_MODEL=claude-sonnet-4-6
# ── ChatGPT (OpenAI) ──
# platform.openai.com → API Keys
OPENAI_API_KEY=sk-...
OPENAI_MODEL=gpt-4o-mini
AI_DAILY_BUDGET=500 # Лимит AI-вызовов в сутки (UTC). Сверх лимита → локальные стратегии.
# Bluechip: 96 запросов/день. Altcoin: 288 запросов/день.Совет для старта (бесплатно): добавь Groq + Gemini — хватает на весь день для обоих профилей. Для лучшего качества дополнительно пополни DeepSeek на $5 (~9–26 дней торговли).
Цепочка надёжности — бот не останавливается никогда:
Claude (Anthropic) — лучшее качество, платный
↓ нет баланса → уведомление в Telegram
OpenAI GPT-4o-mini — хорошее качество, платный
↓ нет баланса → уведомление в Telegram
DeepSeek — хорошее качество, самый дешёвый, ~$5 на 9–26 дней
↓ нет баланса → уведомление в Telegram
Groq + Gemini — бесплатные, хватает на весь день
↓ исчерпались к концу дня → уведомление с обратным отсчётом до сброса
Локальные стратегии — 10 базовых + до 4 профильных стратегий без AI, всегда работают
Настроены только те провайдеры, у которых есть ключ в .env. Реальный порядок и статус каждого —
в Telegram: ⚙️ Настройки → 🤖 AI-провайдер.
| Провайдер | Стоимость | Качество | Лимит |
|---|---|---|---|
| DeepSeek | ~$5 на 9–26 дней | Хорошее | по балансу |
| Groq (Llama 3.3 70B) | бесплатно | Хорошее | 100k токенов/день |
| Gemini 2.0 Flash | бесплатно | Хорошее | 1500 запросов/день |
| Claude Sonnet | ~$0.01/запрос | Отличное | по балансу |
| OpenAI GPT-4o-mini | ~$0.003/запрос | Хорошее | по балансу |
🔀 Режим торговли
MODE=ai # ai → AI анализирует каждую монету и генерирует сигнал
# local → только базовые стратегии (10+профильные), без AI (бесплатно)
# dqn → только SAC нейросеть (нужна обученная модель)
# hybrid → SAC + AI должны согласиться (самый консервативный)
AUTO_EXECUTE=false # false → бот присылает сигнал с кнопками и таймером.
# Авто-исполнение по истечении таймаута.
# Нажми Skip чтобы отменить конкретную сделку.
# true → бот торгует сразу, без диалога. Приходит уведомление о факте.
# Рекомендуется: начать с false (2 недели), потом включить true
PAPER_TRADING=true # true → симуляция, реальных ордеров НЕТ (для старта)
# false → реальная торговля (только после проверки сигналов!)
# Переключение в реальном времени через Telegram:
# ⚙️ Настройки → 📄 Режим: PAPER → Live (требует кодовое слово)
TRADING_MODE_PIN= # Кодовое слово для переключения Paper ↔ Live через Telegram.
# Оставить пустым — кнопка переключения не показывается.
# Пример: TRADING_MODE_PIN=mysecret2024
# После ввода слова бот отправляет уведомление 🚨 ВАЖНО!
SCAN_TOP_N=20 # Сколько монет сканировать (топ по объёму за 24ч).
# Больше = больше возможностей, но больше API-запросов.
MAX_POSITIONS=3 # Начальное значение (1–20). Меняется в реальном времени
# через Telegram: ⚖️ Риск-профиль → ➖ / ➕.
# В paper режиме рекомендуется 10–15 для быстрого обучения SAC.💬 Telegram
TELEGRAM_BOT_TOKEN= # Шаг 1: написать @BotFather → /newbot → скопировать токен
# Формат: 1234567890:ABCdefGHI...
TELEGRAM_CHAT_ID= # Шаг 2: написать @userinfobot → скопировать "Your ID"
# ⚠ ВАЖНО: это ВАШ числовой ID, не ID бота.
# Формат: 123456789 (только цифры, без @)
TELEGRAM_CONFIRM_TIMEOUT=60 # Секунд ждать ответа на кнопки Trade/Skip (при AUTO_EXECUTE=false).
# По истечении → авто-исполняет сделку.
# Менять без перезапуска: ⚙️ Настройки → ⏱ Таймаут подтверждения
SILENT_DEATH_HOURS=6.0 # Алерт в Telegram если нет ни одной сделки за N часов.
# Помогает вовремя заметить зависание бота. 0 = выключен.📈 Торговые параметры
TIMEFRAME=15m # Таймфрейм свечей для стратегий.
# 15m — хороший баланс. Варианты: 1m (шумно), 5m, 15m, 1h, 4h.
INITIAL_BALANCE=10000.0 # Начальный баланс для paper trading (для расчётов и отображения).
# В реальной торговле бот берёт баланс с биржи автоматически.
RISK_PER_TRADE=0.02 # Риск на одну сделку как доля баланса.
# 0.02 = 2% баланса. При $10k → рискуем $200 на сделку.
# Рекомендуется: 0.01 для старта, потом 0.02.
MIN_SIGNAL_CONFIDENCE=0.75 # Минимальная уверенность сигнала в live режиме (0–1).
# Повысить до 0.80–0.85 для более консервативной торговли.
MIN_SIGNAL_CONFIDENCE_PAPER=0.60 # Порог для paper режима — ниже, чтобы накопить больше
# сделок для обучения SAC. Меняется через Telegram без
# перезапуска: ⚖️ Риск-профиль → 🎯 Paper ▼/▲.
TRADING_INTERVAL=60 # Fallback-интервал цикла в секундах (без профиля).
# При активном профиле используется интервал из профиля:
# bluechip → 900с (15 мин), altcoin → 300с (5 мин).🎯 Управление позициями
# ── Частичная фиксация прибыли ──────────────────────────────────────────
PARTIAL_TP_ENABLED=true # При достижении 60% пути до TP:
# 1. Закрывает 50% позиции (фиксирует часть прибыли)
# 2. Переносит SL на breakeven (остаток торгуется без риска)
PARTIAL_TP_TRIGGER=0.6 # Доля пути entry→TP для срабатывания. 0.6 = 60%.
PARTIAL_TP_FRACTION=0.5 # Какую долю позиции закрыть. 0.5 = 50%.
# ── Trailing stop ────────────────────────────────────────────────────────
TRAILING_STOP_ATR_MULT=1.0 # SL подтягивается за ценой с шагом 1×ATR.
# 0.5 = тесный стоп (больше срабатываний).
# 1.5 = широкий стоп (меньше срабатываний, больше просадка).
# ── Drawdown scaling ─────────────────────────────────────────────────────
DRAWDOWN_SCALE_ENABLED=true # При просадке от пика — уменьшить размер позиций.
DRAWDOWN_SCALE_THRESHOLD=0.10 # Порог: 0.10 = при просадке >10% от пика баланса.
DRAWDOWN_SCALE_FACTOR=0.5 # Множитель размера при просадке: 0.5 = торговать вдвое меньше.
# Пример: баланс был $10k, упал до $9k → позиции ×0.5.
# ── Фильтр ликвидности ───────────────────────────────────────────────────
MIN_VOLUME_USDT=1000000 # Минимальный объём монеты за 24ч в USDT.
# $1M = только ликвидные монеты. Ниже → риск манипуляций.
MAX_SPREAD_PCT=0.3 # Максимальный спред bid/ask в %.
# 0.3% = на входе и выходе теряем не более 0.3%.
# ── Cooldown (защита от оверtrading) ─────────────────────────────────────
SYMBOL_COOLDOWN_HOURS=3 # Не переоткрывать один и тот же символ N часов после закрытия.
# Защищает от ситуации когда бот многократно заходит в один токен
# после быстрых SL (например 7 раз в TAC/USDT за один день).
# 0 = выключен. Рекомендуется: 2–4 часа.
# ── Торговые часы ────────────────────────────────────────────────────────
TRADING_HOURS= # Пусто = торговать круглосуточно (РЕКОМЕНДУЕТСЯ для крипты).
# "8-22" = только с 8:00 до 22:00 UTC.
# Не рекомендуется: крипта активна 24/7, ночные движения реальные.🛡 Риск-менеджмент
DAILY_LOSS_LIMIT=0.05 # Дневной лимит убытка: 0.05 = 5% баланса.
# При превышении → все позиции закрываются, торговля до UTC-дня.
# Рекомендуется: 0.03 для старта, потом 0.05.
# ── Black swan / аварийные стоп-краны ────────────────────────────────────
MAX_DRAWDOWN_PERCENT=0.20 # Hard drawdown halt: просадка equity от пика ≥ 20%.
# Equity = баланс + unrealized PnL (точнее чем free USDT).
# При срабатывании: все позиции закрыть → пауза N часов.
DRAWDOWN_HALT_HOURS=4 # Пауза в часах после срабатывания hard drawdown halt.
DRAWDOWN_CONFIRM_CYCLES=3 # Flash-защита: halt только после N подтверждений подряд.
# 1 цикл ≈ 30с. 3 = сработает через ~90с устойчивой просадки.
# Flash crash (восстановился за секунды) не триггернёт.
# Меняется без перезапуска: Telegram → ⚖️ Риск-профиль → 🛡 Flash-защита ±
ATR_SPIKE_MULT=3.0 # ATR spike: текущий ATR в N× выше среднего → закрыть позиции.
# 3.0 = только экстремальная волатильность (война, крах).
ATR_SPIKE_LOOKBACK=20 # Окно для расчёта среднего ATR (в свечах).
CIRCUIT_BREAKER_LOSSES=3 # Автостоп после N убыточных сделок подряд.
# 3 = три стопа подряд → бот останавливается до ручного перезапуска.
# 0 = выключен. Рекомендуется: 3–5.
MAX_CORRELATION=0.7 # Блокировать сигнал если |корреляция| с открытой позицией ≥ порога.
# 0.7 = не откроем ETH long если уже держим BTC long.
# 0.0 = фильтр выключен. Рекомендуется: 0.7.
MAX_CORRELATION_PAPER=0.85 # Порог корреляции для paper режима.
# В боковом рынке крипто коррелирует на 0.70–0.77 —
# порог 0.7 блокировал бы почти все входы.
# 0.85 позволяет накопить больше сделок для SAC.
CORRELATION_WINDOW=50 # Окно расчёта корреляции в барах (50 × 15m = 12.5 часов).📅 Macro blackout
FINNHUB_API_KEY= # Ключ Finnhub (бесплатный тир): finnhub.io → Dashboard → API Key
# Если не задан — macro blackout отключается автоматически.
MACRO_BLACKOUT_ENABLED=true # Блокировать новые позиции за 30 мин до/после:
# FOMC (ставка ФРС), CPI (инфляция), NFP (занятость), GDP, PCE.
# Эти события вызывают резкие движения — лучше переждать.🎓 Онлайн-обучение SAC
ONLINE_LEARNING_MODE=periodic # disabled → выключено (SAC не обучается автоматически)
# online → gradient steps после КАЖДОЙ сделки
# ⚠ РИСКОВАННО: серия убытков может испортить модель
# periodic → переобучение каждые N сделок в фоне [РЕКОМЕНДУЕТСЯ]
# hybrid → periodic + динамические веса стратегий в реальном времени
ONLINE_LEARNING_TRIGGER=50 # Переобучение каждые 50 закрытых сделок (для periodic/hybrid).
# 3 позиции × 10 сделок/день ≈ переобучение каждые ~17 часов.
ONLINE_LEARNING_GRADIENT_STEPS=50 # Шагов градиента за один online-апдейт.
# Только для режима online. Рекомендуется ≤ 50.
TRAIN_TOP_N=20 # Сколько топ-монет по объёму брать для обучения SAC.
# Менять не перезапуская — команда Telegram: /trainn 15
# При активном профиле переопределяется автоматически:
# bluechip → 20 монет (15m), altcoin → 50 монет (5m)
TRAIN_MIN_CANDLES=2880 # Минимум свечей для символа при обучении SAC.
# 2880 = ~1 месяц 15m-данных. Символы с меньшим количеством
# пропускаются — слишком мало истории для обучения.
TOTAL_TIMESTEPS=500000 # Шагов обучения SAC (переопределяется env при make train).
# 500k ≈ 60 мин на CPU. 1M = более качественная модель (~2ч).
SAC_MODEL_PATH=models/sac_model.zip # Путь к файлу SAC-модели.
# Переопределяется профилем:
# bluechip → models/sac_model.zip
# altcoin → models/sac_model_altcoin.zip🌐 Внешние сигналы (опционально)
Все ключи опциональны. Без них бот работает, просто без этих источников сигналов.
# Twitter/X sentiment — VADER по твитам монет (активен только при профиле Meme)
# Тариф Basic: $100/мес, ~10 000 твитов/мес. Free-тир READ не поддерживает.
# developer.twitter.com → Projects & Apps → Keys and Tokens → Bearer Token
# Если не задан — TwitterAnalyzer молча возвращает 0.0
TWITTER_BEARER_TOKEN=
TWITTER_MAX_RESULTS=10 # Твитов на запрос (10 = экономия лимита Basic)
# Telegram sentiment — мониторинг публичных памп-каналов (только профиль Meme)
# Бесплатно через Telethon MTProto. Получить: my.telegram.org → API development tools
# Если не задан — TelegramSentiment молча возвращает 0.0
TELEGRAM_SENTIMENT_API_ID=
TELEGRAM_SENTIMENT_API_HASH=
TELEGRAM_SENTIMENT_PHONE=+375291234567 # Формат с кодом страны
TELEGRAM_SENTIMENT_CHANNELS=CryptoMoonAlerts,pumpsignalscrypto,memecoinsnews
# Параметры опросчика (SentimentPoller, активен только при профиле Meme)
SENTIMENT_POLL_INTERVAL=300 # Интервал опроса в секундах (каждые 5 мин)
SENTIMENT_CACHE_TTL=600 # TTL кэша в Redis (10 мин)
SENTIMENT_BUY_THRESHOLD=0.4 # Score ≥0.4 → buy-сигнал
SENTIMENT_SELL_THRESHOLD=-0.4 # Score ≤-0.4 → sell-сигнал
# Reddit sentiment — r/CryptoCurrency
# reddit.com/prefs/apps → create app (тип: script)
REDDIT_CLIENT_ID=
REDDIT_CLIENT_SECRET=
REDDIT_USER_AGENT=BitbotBY/1.0
# Glassnode — on-chain метрики (stablecoin supply и др.)
# glassnode.com → Account → API Access
GLASSNODE_API_KEY=
# NewsAPI — новостной sentiment (CoinDesk, CoinTelegraph)
# newsapi.org → Get API Key (бесплатно)
NEWS_API_KEY=
NEWS_UPDATE_INTERVAL=900 # Обновлять новости каждые 15 минут🖥 Мониторинг и инфраструктура
HEALTH_PORT=8080 # Порт HTTP health-сервера:
# GET /health → JSON статус бота
# GET /metrics → Prometheus метрики
# 0 = выключен
DASHBOARD_API_KEY= # Опциональный ключ для веб-дашборда.
# Если задан → все запросы требуют заголовок: X-API-Key: значение
GRAFANA_PASSWORD=admin # Пароль Grafana (http://localhost:3000, логин: admin)
REDIS_HOST=localhost # В Docker автоматически переопределяется на "redis".
REDIS_PORT=6379
REDIS_PASSWORD= # Рекомендуется задать в production.При запуске бот присылает клавиатуру с быстрым доступом к:
- 🌐 Профиль рынка — переключение Bluechip / Altcoin / Meme
- ⚙️ Режим — Local / AI / DQN / Hybrid (+ Chronos)
- ⚖️ Риск-профиль — пороги confidence, флэш-защита (ATR spike / drawdown halt)
- 🎯 Позиции — количество слотов, risk per trade, leverage
- 🧠 Обучение SAC — запуск дообучения, прогресс, метрики
- 📊 Статистика — win rate, EV, история сделок
Подтверждение каждой сделки (если AUTO_EXECUTE=false) приходит с live win-rate/EV стратегии и
бэктест-статистикой, таймаут — TELEGRAM_CONFIRM_TIMEOUT.
| Сервис | URL | Назначение |
|---|---|---|
| Веб-дашборд | http://localhost:8080 | Баланс, открытые позиции, история сделок |
| Grafana | http://localhost:3000 | Дашборды по метрикам бота |
| Prometheus | http://localhost:9090 | Сырые метрики |
| Health check | http://localhost:8080/health | Статус для supervisor/оркестрации |
| Telegram | — | Сигналы, Trade/Skip, silent death, arb-алерты |
Дашборд закрыт через nginx (HTTP basic auth, DASHBOARD_USER/DASHBOARD_PASSWORD), не доступен напрямую.
make train # локальное обучение (Optuna + walk-forward)
make train-docker # то же самое в Docker (~60 мин)
make tune # только hyperparameter searchДо завершения обучения используйте MODE=ai; переключение на dqn/hybrid доступно из Telegram без
перезапуска сразу после того, как обучение завершится. OnlineLearner дообучает модель автоматически
после каждой закрытой сделки (periodic/hybrid/online режимы).
Порядок важен — каждый шаг проверяет то, что предыдущий не может:
make backtest # walk-forward, holdout 20%, overfit ratio (должен быть <2×)
make alpha-report # bootstrap Sharpe + Wilcoxon — значима ли альфа статистически
make live-divergence # проскальзывание/задержка исполнения live vs бэктест
make ai-isolation # даёт ли AI-слой edge поверх голых индикаторов (жжёт AI-квоту)alpha-report требует минимум 30–50 сделок на группу, иначе INSUFFICIENT DATA — это сигнал
наблюдать дольше, а не считать проверку пройденной.
Полный список (развернуть)
| Команда | Назначение |
|---|---|
make setup |
Первый запуск: сборка + htpasswd + docker compose up |
make up / make down |
Старт / остановка контейнеров |
make rebuild |
Полная пересборка (сброс Redis) |
make logs |
Логи бота (./logs.sh) |
make train / make train-long / make train-docker |
Обучение SAC |
make tune / make tune-bluechip / make tune-altcoin |
Optuna hyperparameter search |
make retrain |
Дообучение на новых данных |
make backtest / make backtest-eth |
Walk-forward бэктест |
make alpha-report |
Статистическая значимость альфы |
make live-divergence |
Сравнение live vs backtest исполнения |
make ai-isolation |
Изоляция вклада AI-слоя |
make paper / make paper-ai |
Paper trading (local / AI режим) |
make live |
Live-торговля |
make test / make lint / make fmt |
pytest / ruff / форматирование |
make htpasswd |
Генерация пароля для nginx basic auth |
make test
# pytest tests/ -v --cov=src --cov-fail-under=501242 unit-теста — индикаторы, стратегии, риск-менеджмент, CVaR, Kelly, Almgren-Chriss, корреляция, SAC-инференс, dynamic leverage, partial TP, drawdown scaling, liquidity filter, dynamic exits, position monitor, online learner, runtime config, e2e торговый цикл. Coverage: 69%.
Бот пишет "Top 0 by volume" и не торгует
Убедиться что MARKET_TYPE=linear в .env. Bybit при linear возвращает символы как BTC/USDT:USDT —
бот нормализует автоматически. Если ошибка остаётся — проверить BYBIT_API_KEY.
Telegram не получает сообщения
TELEGRAM_CHAT_ID должен быть вашим числовым ID из @userinfobot, а не ID бота. Написать боту
любое сообщение для активации чата.
MODE=dqn или hybrid падает с ошибкой о модели
Сначала обучить: make train или make train-docker (~60 мин). До завершения — MODE=ai.
Почему бот иногда не торгует часами
Нормально — защита от overtrading. Live ждёт confidence ≥ MIN_SIGNAL_CONFIDENCE (0.65), в боковике
локальные стратегии дают ~0.60. Порог настраивается в Telegram: ⚖️ Риск-профиль.
Что происходит при hard drawdown halt / ATR spike
Drawdown halt: убыточные позиции закрываются, прибыльные получают SL в breakeven, новые входы
блокируются на DRAWDOWN_HALT_HOURS. ATR spike: все позиции закрываются, пауза 1 час. В paper
режиме — только уведомление, торговля продолжается.
Что такое Chronos и нужно ли его обучать
Предобученная модель Amazon для time-series. Обучение не нужно, скачивается автоматически (~400MB) при первом включении. Работает как мягкий модификатор confidence в hybrid-режиме, не жёсткое условие.
Бот перезапустился и потерял настройки из Telegram
Не должен — настройки в Redis с AOF-персистентностью (сброс на диск каждую секунду). Полный сброс
только через docker compose down -v или make rebuild.
Порядок важен — каждый шаг проверяет то, что предыдущий не может:
- ✅ Заполнить
.env— Bybit API, AI-ключ, Telegram,REDIS_PASSWORD,DASHBOARD_PASSWORD - ✅
make setup - ✅ Обучить SAC (кнопка в Telegram при первом запуске, или
make train-docker) - ✅
make backtest— overfit ratio <2×, иначе сначала разбираться со стратегиями - ✅ Минимум 2 недели paper trading (
PAPER_TRADING=true,AUTO_EXECUTE=false) - ✅
make alpha-report— альфа значима статистически, не просто "выглядит неплохо" - ✅
make live-divergence— если есть подозрение на проскальзывание/задержку - ⬜ (опционально)
make ai-isolation— не блокирует переход, жжёт AI-квоту - ✅ Начать консервативно:
RISK_PER_TRADE=0.01,MAX_POSITIONS=2,LEVERAGE=2 - ✅
DAILY_LOSS_LIMIT=0.03на первое время - ✅
PAPER_TRADING=falseтолько после того, как шаг 6 показал значимую альфу
Проект распространяется под лицензией MIT.
Торговля криптовалютой сопряжена с высоким риском потери средств. Этот бот не является финансовым
советником. Используйте на свой риск. Всегда начинайте с бумажной торговли (PAPER_TRADING=true).