Детальный план разработки по этапам. Обновляй по мере прохождения.
Цель: поднять окружение, бот пишет "I'm alive" в логи.
- Структура проекта
- Docker + docker-compose (PostgreSQL + TimescaleDB, Redis, bot)
- Dockerfile для Python 3.12
- pyproject.toml с зависимостями
- Конфиг через pydantic-settings (bot/config.py)
- Логирование через loguru (bot/utils/logger.py)
- ORM-модели и сессии (bot/database/)
- Alembic + первая миграция (включая hypertable)
- bot/main.py с health-check и heartbeat-циклом
- Makefile со всеми командами
- install_docker.sh для Ubuntu 24
- kill_switch.py (заглушка, только Redis-флаг)
- README.md
- Smoke-тесты
Критерий готовности: make start → make migrate → make logs-bot показывает "I'm alive" каждые 60 секунд.
- Binance REST + backfill свечей (90 дней × 6 пар × 3 ТФ = 16 740 свечей)
- Binance WebSocket: live свечи + aggTrade детектор китов
- WHALE_THRESHOLD_USD конфигурируется через .env, observer для калибровки
-
Whale Alert API— заменён на Binance aggTrade (платный стал) - Fear & Greed Index (alternative.me, без ключа, дедуп через Redis)
- CoinGecko (Demo API: глобал + наши 6 пар, кеш в Redis)
- Telegram-парсер (telethon, 2 стартовых канала: binance_announcements, WhaleAlert)
- APScheduler — отложен до Этапа 3+ (текущие async-loop'ы работают)
-
Etherscan— пропущен (мало пользы для свинг-стратегии на споте)
- 3.1 Технические индикаторы (
bot/analysis/indicators.py)- pandas-ta: EMA-200, EMA-50, RSI(14), MACD, BBands, volume ratio, support/resistance
- Раз в 5 минут пересчёт всех 6 пар × 3 ТФ, кеш в Redis
- Готовые сигналы: above_ema_200, rsi_zone, macd_cross, bb_zone, volume_above_avg_2x
- 3.2 Market Regime classifier (
bot/analysis/market_regime.py)- 4 фактора: BTC vs EMA-200 1d (45%), BTC slope 7d (25%), F&G (15%), BTC в 50d-канале (15%)
- Регимы: bull (≥0.65), chop (≥0.35), bear (<0.35), unknown
- Главный switch: на bear/unknown бот не торгует
- 3.3 Event Detector (
bot/analysis/event_detector.py)- 6 типов триггеров: price_dump_1h, rsi_oversold, volume_spike, whale_buy_cluster, confluence_setup, regime_change
- Учёт регима: на bear/unknown processed=True (экономим токены Claude)
- Дедуп через Redis NX+EX
- 3.4 Binance new listings detector (
bot/data_sources/binance_listings.py)- REST polling /api/v3/exchangeInfo раз в 5 мин
- Diff-логика: новые пары →
new_listing(CRITICAL), удалённые →delisting - Заменяет ненадёжный @binance_announcements
- 4.1
claude_client.py— async обёртка Anthropic SDK- call_haiku() / call_opus() каскадные методы
- Учёт особенностей Opus 4.7: НЕ temperature/budget_tokens
- Top-level cache_control для prompt caching
- JSON schema через output_config.format
- Автоматический санитайзер несовместимых полей схемы
- Метрики в Redis (claude:stats, claude:cost_usd)
- 4.2
news_filter.py— фильтр телеграм-каналов через Haiku- System prompt ~4132 токена для caching
- Polling каждую минуту, batch 10 событий
- Создаёт news_filtered события для Opus
- 4.3
event_analyzer.py— главный мозг на Opus 4.7- System prompt ~4215 токенов (caching работает)
- adaptive thinking + effort=high
- Учёт регима: bear/unknown → пропускаем без вызова Opus
- Полный контекст: индикаторы 3 ТФ + регим + киты + новости + F&G
- Записывает решения в bot_decisions с reasoning
- JSON output: decision/symbol/SL/TP/size/confidence/reasoning
- 5.1
bot/trading/risk_manager.py— все жёсткие лимиты- MAX_POSITION_SIZE_PCT, MAX_OPEN_POSITIONS, SL/TP допуски
- Дневной/недельный/месячный лимит убытков (запрос в БД)
- Kill-switch проверка перед каждой сделкой
- Депозит из Redis, обновляется PositionTracker'ом после закрытия
- 5.2
bot/trading/order_executor.py- paper-mode: виртуальные сделки, цена из последней 1h-свечи
- live-mode: market BUY + OCO SELL (TP+SL атомарно)
- При неудаче OCO — автоматическое закрытие по market
- Поддержка Binance testnet (BINANCE_TESTNET=true) и production
- 5.3
bot/trading/position_tracker.py- paper: симуляция исполнения SL/TP по текущей цене
- live: проверка статуса OCO, реконсиляция при исчезновении
- Trailing stop: при +3% подтягиваем SL в безубыток
- Time stop: > 72ч принудительное закрытие
- Daily/weekly/monthly loss limits → автоматический kill-switch
- 5.4
bot/trading/trader.py- Слушает bot_decisions с decision='proceed' AND executed=False
- Парсит [PROPOSED] из claude_reasoning (entry/SL/TP/size)
- Передаёт в RiskManager → OrderExecutor
- Stale-фильтр: решения старше 10 мин не исполняются
- CLI: make positions, make trades, make balance, make kill-switch
- Расширенный kill_switch.py: cancel orders + force close + Redis flag
- 6.1
bot/notifications/telegram_notifier.py— Telegram Bot API- Алерты: open/close позиций, regime_change, confluence, new_listing, kill_switch, loss_limit, decisions (proceed/abort)
- Дедуп через Redis (10 мин TTL)
- Rate limit: min 2 сек между сообщениями
- HTML-форматирование, эмодзи
- Singleton get_notifier() для использования из любого модуля
- Если ключи не настроены — молча skipped (не падает)
- 6.2
dashboard/app.py— Streamlit на порту 8501- Главная: статус, регим, F&G, рынок, открытые позиции
- Графики: свечи + EMA-200 + Bollinger + маркеры открытых сделок
- События: фильтрация по типу/символу/времени
- Решения Opus: список с reasoning (раскрываемые expanders)
- Сделки: open + closed history + cumulative PnL chart
- Метрики Claude: токены, кеш, стоимость
- Auto-refresh настраивается (0-120 сек)
- Sidebar: режим, депозит, регим, kill-switch indicator
- Grafana (опционально, отложено)
Цель: закрыть слабые места, найденные в peer-review (Kimi/Grok/Qwen) перед 2-4 неделями paper trading.
- TaskSupervisor в
bot/main.py— auto-restart 15 параллельных задач (было 12 в v1.6, +1 dormant_controller в v1.8, +2 macro/funding в v1.10)- Exponential backoff: [0, 5, 15, 30, 60, 120, 300] секунд
- Сброс счётчика после 10 минут стабильной работы
- Telegram-алерт при краше с дедупом 10 минут
- Heartbeat в Redis (
bot:heartbeat, TTL 5 мин) для внешнего watchdog
- External watchdog (
bot/watchdog.py) как отдельный Docker-сервис- Независимо проверяет heartbeat в Redis раз в минуту
- Алерт «БОТ МОЛЧИТ» если heartbeat устарел >5 мин или отсутствует
- Recovery-алерт когда heartbeat возобновляется
- Дедуп через
bot:watchdog:alerted(TTL 30 мин) - Startup grace period 120 секунд (избегает false positive при старте)
- Healthy-лог раз в 10 проверок (~10 мин) для видимого pulse
- Cost cap для Claude API в
bot/agents/claude_client.py- Дневной бюджет: $1 для paper, $5 для live
- Pre-flight
ClaudeBudgetExceededErrorблокирует вызовы при превышении - Warning в Telegram при 80%, blocked-алерт при 100%
- Дедуп:
claude:budget:alerted:{warning|blocked}:{date}(TTL 2 дня) - Сброс счётчика по дате в Redis (
claude:cost:daily:YYYY-MM-DD, TTL 7 дней)
- 53 unit-теста покрывают critical-path
- RiskManager (16): kill-switch, whitelist, граничные SL/TP, лимиты убытков
- OrderExecutor (10): paper, live OCO, критический force-close на отказе OCO
- PositionTracker (12): time/trailing/SL/TP stops, daily loss → kill-switch, PnL math
- Smoke (3): импорты config/models/logger
- In-memory моки: FakeAsyncRedis, MockAsyncSession, AsyncMock для Binance
- Запуск:
make test(5 секунд)
- Общий Docker-образ для bot/dashboard/watchdog (экономия 3 ГБ)
- Чанкование backfill под лимит PostgreSQL 65535 bind-параметров
- Маунт tests/ + pyproject.toml в bot-контейнер для pytest
Цель: валидировать стратегию на исторических данных перед переходом на live.
-
scripts/backtest.py— stand-alone synchronous engine- Загрузка свечей из БД через synchronous SQLAlchemy
- Pre-compute индикаторов (RSI, MACD, EMA, BB, volume_ratio) — те же формулы что в production
- Market regime classifier (тот же weighted score, F&G дефолтное 50)
- Event detector: 3 триггера (price_dump, rsi_oversold, volume_spike) + confluence
- Decision proxy (без Claude — простое правило с теми же фильтрами)
- Симулятор execution с TP/SL/trailing/time-stop по правилам PositionTracker
- Дедуп триггеров через TTL (как в production)
- Метрики: win rate, profit factor, Sharpe-like, max drawdown
- Walk-forward анализ окнами по 30 дней
- Makefile targets:
make backtest,make backtest-30d,make backtest-walk - Прогон 365 → 730 дней: захвачена реальная bull-фаза апр-окт 2025
- Strict mode: 0 сделок (CHOP стратегия требует confluence — слишком жёстко)
- Lenient mode 365 дней: WR 31%, PF 1.22, +2.11% (marginal)
- Lenient mode 730 дней: WR 35.66%, PF 0.976, −2.06% (mixed bull+bear)
- В bull-окнах изолированно: WR ~44%, +3.1%/мес, 4 из 5 окон позитивные ✅
- Улучшения стратегии для повышения edge:
- ATR-based dynamic stops — SL/TP адаптивные к волатильности пары
- BTCUSDT: 1.5×ATR SL / 3.0×ATR TP (R:R 1:2)
- AVAXUSDT: 2.5×ATR SL / 5.0×ATR TP
- Жёсткие границы: SL в [-6%, -1%], TP в [+1.5%, +12%]
- Реализовано:
RiskManager.calc_sl_price_atr(),_validate_sl_atr()
- Confidence-scaled position sizing
- Размер: 25%-50% депозита в зависимости от confidence Opus (0.5-1.0)
- Линейная шкала: floor=50%, ceiling=100%
- Реализовано:
RiskManager.scale_position_size_by_confidence()
- Dormant mode — авто-отключение Claude при bear/unknown >24h
- Новый сервис
DormantController(13-я задача под supervisor в v1.8) - NewsFilter и EventAnalyzer skip-ают вызовы при bot:dormant_mode=true
- Telegram-алерты при переходе dormant ⇄ active
- Экономия: ~$56/год на $300
- Изменено в v1.13c: триггер сужен до
regime=unknownonly (bear убран — там работают B5/B3)
- Новый сервис
- ATR в backtest — флаги
--atr-stops --confidence-sizing - Unit-тесты: 14 новых тестов для ATR-stops и confidence-sizing
- ATR-based dynamic stops — SL/TP адаптивные к волатильности пары
- Прогон backtest с улучшениями (730 дней) → ожидаемые метрики:
- WR 36% → 42-45%
- Drawdown 24% → 12-15%
- Чистый PnL: +$50-80/год на $300 (16-26% годовых)
Что НЕ симулируется (ограничения):
- Claude (дорого + результаты исторические без качества reasoning)
- Whale aggTrade события (нет исторических данных за 365 дней)
- Telegram-новости (нет исторических данных)
- Slippage и комиссии (можно добавить позже)
Четвёртая параллельная стратегия после spot reversal, perp shorts, trend. Самая высокая P(profit) среди всех тестированных через Bootstrap+DSR pipeline.
После 30+ дней эмпирического тестирования всех стратегий через Bootstrap+DSR ни одна не прошла Deflated Sharpe Ratio. Inverse funding arb на small-caps — единственная стратегия с P(profit) > 85%, но Sharpe CI [-0.08, +0.27] пересекает 0. По решению пользователя — forward test на $500 paper для финальной валидации перед закрытием/upgrade.
LONG perp на small-caps (INJ/JUP/WIF/TIA/SEI) когда funding rate ≤ -0.05%/8h.
- Edge: funding income (shorts overcrowded → платят longs) + потенциальный squeeze
- Entry: rate ≤ -0.0005, Exit: TP +5% / SL -3.5% / max_hold 7d / funding > -0.00005
- Position: 30% × $500 = $150 на сделку, max 3 одновременно, leverage 1×
| Метрика | Значение |
|---|---|
| Trades | 80 |
| Win Rate | 51.25% |
| Net PnL | +$36.77 (+49%) |
| Sharpe | 0.103 |
| Bootstrap CI 95% Sharpe | [-0.080, +0.274] |
| P(profit > 0) | 86.9% |
| DSR | 0.0% (после Bonferroni correction) |
Новый каталог bot/funding_arb/ (~2200 строк, 5 модулей):
inverse_strategy.py— pure logic с Decimal (41 unit-тестов)funding_arb_risk_manager.py— отдельные Redis keys, 23 unit-тестовfunding_monitor.py— polling /fapi/v1/premiumIndex каждые 5 минfunding_arb_trader.py— координатор signal → risk → executorfunding_arb_position_tracker.py— price exits + funding apply каждую минуту
БД через Alembic 0004:
trades_funding_arb(mirror TradePerp + funding-specific)funding_payments(audit log с UNIQUE constraint)funding_rates_live(TimescaleDB hypertable)
TaskSupervisor: 19 → 22 задач (+3 funding_arb).
Изоляция: spot/perp/trend модули НЕ затронуты, отдельные Redis namespaces,
отдельный kill-switch, default FUNDING_ARB_ENABLED=false.
| $50 | $500 | $1000 | |
|---|---|---|---|
| Notional | $15 | $150 | $300 |
| Funding income/cycle | $0.0075 | $0.075 | $0.15 |
| Fees per round trip | $0.012 | $0.12 | $0.24 |
| Signal/noise ratio | 0.6× | 7.5× | 15× |
$500 — sweet spot между signal-to-noise и risk без статистического подтверждения.
| Сценарий | Действие |
|---|---|
| ✅ N≥30 trades И WR≥45% И Net>+$30 | Upgrade $500 → $1000 |
| ✅ N≥50 trades И WR≥50% И Net>+$80 | Upgrade $1000 → $3000 |
| 🟡 N<30 за 90 дней | Продлить 90 дней (рынок спокойный) |
| ❌ N≥30 И (WR<40% или Net<-$50) | DROP TABLE + git revert |
| ❌ MaxDD > 30% | Немедленный kill-switch |
- 22 параллельных задач (15 spot + 2 perp + 2 trend + 3 funding_arb)
- 544+ unit-тестов (+41 inverse_strategy + 23 risk_manager)
- 16 файлов изменено, 4364 строк добавлено
- 1 миграция (0004), 5 production модулей, 4 Telegram-нотификации, 7 Makefile целей
- Equity formula:
start + Σ(realized) + Σ(floating) + Σ(funding_income_open) - Funding share of Net PnL — % прибыли от funding vs price movement
- Avg funding events per trade — ожидаем 6-12 (avg hold 2-4 дня)
Полностью обратимо. См. docs/rollback.md секция "Откат v1.18.21":
- Soft-disable через
FUNDING_ARB_ENABLED=falseбез отката кода - Полный откат: DROP TABLE + git revert + clean Redis namespace
- НЕ затрагивает spot/perp/trend стратегии
5 sub-фаз (B1+B2+B3+B4+B5) реализованы за 2-3 дня. Параллельная perp-инфраструктура поверх spot, без касания spot-кода.
После v1.15 (Vision API + News Clustering) сделали Phase A — comparative backtest spot vs perpetual futures на 1095 днях:
| Конфиг | Net 3 года | PF | MaxDD |
|---|---|---|---|
| spot 1× | +179% | 1.35 | 18% |
| perp 1× long only | +89% | 1.21 | 16% |
| perp 2× long only | +654% | 1.30 | 31% |
| shorts only B5+B3 | +153% | 1.27 | 22% |
| combined long+short 2× | +3146% | 1.41 | 38% |
Пользователь принял решение полностью реализовать paper-perp: 9 пар, leverage 2×, long+short, депозит $1000 виртуальных, на demo.binance.com (EU-доступно через demo endpoint, тестовый testnet.binancefuture.com geo-blocked).
B1 (фундамент) — TradePerp модель + Alembic миграция 0002, PerpRiskManager (10 проверок: side, leverage cap, margin/free_balance, per-symbol/global лимиты, daily/weekly/monthly losses, kill_switch), PerpOrderExecutor с futures_create_order и эмерджентным закрытием при ошибке SL/TP placement. Коммит c94fe69 + 466fb15 (demo endpoint).
B2 (мониторинг) — PerpPositionTracker (~640 строк) — 16-я задача под TaskSupervisor, polling 30s. Funding payments каждые 8h через futures_income_history, liquidation warning при <10% от entry, trailing breakeven при +3%, exit detection через futures_position_information. PnL для short = (entry - exit) × qty (зеркально long), funding отдельно. 4 perp Telegram-метода. Коммит 01a1738.
B3 (детекторы) — _check_upper_bb_rejection_4h (B5_short: high ≥ BB_upper + красная свеча) и _check_bb_squeeze_breakdown_4h (B3_short: squeeze + close < BB_lower + volume) в production event_detector. DECISION_JSON_SCHEMA: новое поле side: "long" | "short". SYSTEM_PROMPT расширен short-семантикой (SL +2.5% выше entry, TP −5% ниже). Коммит 4c78ee4.
B4 (координатор) — PerpTrader (~430 строк) — 17-я задача, зеркало spot Trader. Парсит [PROPOSED] с side, проверяет event_type ∈ PERP_SHORT_TRIGGERS, валидирует через PerpRiskManager, открывает на demo, INSERT TradePerp, mark executed. Spot Trader изменён: при side='short' ставит Redis-флаг (TTL 24h) + return БЕЗ executed=True (PerpTrader подхватит). Pending tracker через Redis. Коммит d776702 + 598a22f (test fix).
B5 (дашборд) — Streamlit вкладка "📐 Perp": Баланс, Открытые позиции с liquidation distance, Закрытые с PF/WR/funding, Сравнение Spot vs Perp. Sidebar секция "📐 Perp (demo)". Коммит 2f6bf17.
- 17 параллельных задач (15 spot + 2 perp)
- 423+ unit-тестов (+27 от B1+B2, +16 от B3, +19 от B4)
- 6 коммитов Phase B + 1 fix-коммит
- ~2200 строк нового кода
За 1-3 месяца наблюдения параллельно с paper-spot:
- ≥10 закрытых perp-сделок в первый месяц
- WR ≥40%, PF ≥1.2, MaxDD ≤25%
- 0 liquidation events
- Avg funding cost / сделку ≤$1
Точка решения через 30 perp-сделок:
- WR ≥45% → Phase C (live perp на $300-500 real money)
- WR 35-45% → переписать SYSTEM_PROMPT для shorts
- WR <35% → отключить shorts через
PERP_ALLOWED_SIDES=("long",)
Phase B полностью обратима. См. docs/rollback.md:
- Откат отдельной sub-фазы (B5 безопаснее всего — только дашборд)
- Полный откат Phase B: DROP TABLE trades_perp + git revert 7 коммитов
- Soft-disable:
PERP_ENABLED=Falseв config.py → весь perp-код в idle
Phase 1+2 для усиления edge через современные технологии.
Новый модуль bot/agents/chart_renderer.py рендерит свечной график 4h × 50 баров с overlay BB + EMA через mplfinance → PNG bytes. На срабатывании B5/B3 Opus получает картинку через Vision API дополнительно к цифрам.
SYSTEM_PROMPT расширен секцией «📊 Анализ графика» — Opus должен явно указать в reasoning что увидел, совпало ли с цифрами, какой сигнал перевесил.
Стоимость: ~$0.01/image × 3-5 reversal/неделя = $2/мес. Latency: +1.5-2 сек на reversal-decision. Цель: +3-7pp WR через отсев "ловли ножа".
Новый модуль bot/agents/news_clusterer.py с OpenAI text-embedding-3-small ($0.02/1M токенов). При создании news_raw считаем embedding, сравниваем с recent window 200 эмбеддингов в Redis (TTL 24h) через cosine similarity. При sim > 0.85 — скипаем без вызова Haiku (4 канала часто пишут одну новость → ×4 экономия).
Pass-through режим если нет OPENAI_API_KEY (graceful degradation). Цель: экономия $5-10/мес на Claude API.
- Тестов: 212 → 226+ (+5 chart_renderer + 14 news_clusterer)
- Файлы: pyproject.toml (mplfinance, openai), bot/config.py, 2 новых модуля, 3 модифицированных
- WR (vision+clustering) ≥ WR (без них) + 3pp
- duplicates_skipped ≥ 30% от news_raw
- Vision-cost ≤ $5/мес
Если не достигнуто — отключаем feature-флагами без отката кода.
После 30 часов paper заметили что в один 8-часовой период могут совпасть 2 reversal-сетапа на разных парах (BNB и ATOM). Один отвергался RiskManager'ом из-за MAX_OPEN_POSITIONS=1. На 9 парах backtest даёт ~1 reversal/неделя, но реальный flow показал кластеризацию.
MAX_OPEN_POSITIONS=1 → 5MAX_POSITIONS_PER_SYMBOL=1(новая константа — защита от двойной ставки на пару)- Депозит paper $300 → $2000 — иначе 5 × 35% = 175% невозможно физически
- Dashboard переделан: real-time equity (start + realized + floating), free_balance с учётом locked margin
- Backtest engine расширен:
--max-open,--deposit,--max-per-symbol,--reversal-mode,--disable-btc-stopperCLI
% метрики стратегии (WR, avg win/loss, Sharpe, MaxDD) инвариантны к депозиту, поэтому статистика собирается ×5 быстрее без изменения validity.
| Конфиг | Net | WR | PF | MaxDD |
|---|---|---|---|---|
| MAX=1/$300 | +178% | 38.7% | 1.35 | 18.3% |
| MAX=5/$2000 | +308% | 35.3% | 1.29 | 18.9% |
Вывод: multi-position усиливает абсолютный результат через compound, но не улучшает per-trade edge (WR/PF ниже на 0.03-3.4pp). Walk-forward 90-day: 10 из 11 окон убыточны (avg окно −31%) — стратегия выживает за счёт sequence + bull-фаз.
Это означает: paper будет шумным, ожидаем ~9/11 убыточных недель и редкие положительные «прорывы».
bot/config.py: вернутьMAX_OPEN_POSITIONS = 1(или 2)- Redis:
SET trading:deposit_usd 300 .env:BINANCE_TESTNET=false,TRADING_MODE=live- Restart bot, проверить что в логах
mode=liveиДепозит: $300
Полная инструкция отката v1.14 → v1.13e — docs/rollback.md.
Триггер: walk-forward подтвердил B5/B3 robust + trend катастрофа. Сделали 3 production-улучшения одним блоком чтобы прийти к самой консервативной конфигурации перед Этапом 7.
- Fix 1: Squeeze-фильтр для B5 — ablation отвергнут
- Гипотеза: B5 в окне distribution даёт false positives при squeeze
- Метод: добавлен trigger
lower_bb_reversal_no_squeezeв backtest - Walk-forward на 9 парах: B5 vs B5_no_squeeze
- Результат: Σ −5.5pp за 3 года (в bear хуже на −10.4pp). Squeeze в bear часто = настоящая капитуляция, нужная для B5
- В production НЕ вносим. Backtest-код оставлен для будущего
- Fix 2: Дифференцированный confidence-floor
MIN_CONFIDENCE_FOR_TREND = 0.75(для всех trend-сетапов)MIN_CONFIDENCE_FOR_TRADE = 0.5(теперь только для reversal B5/B3)REVERSAL_EVENT_TYPES = {"lower_bb_reversal_4h", "bb_squeeze_breakout_4h"}event_typeпараметр вvalidate_entry, fail-closed на NoneTrader._fetch_event_typeчерез JOIN с Event- SYSTEM_PROMPT Opus обновлён (явное требование conf ≥ 0.75 для trend)
- +4 регрессионных теста
- Fix 3: Расширенные Telegram-уведомления
notify_decisionтеперь алертит все типы (proceed/skip/wait/abort) с conf- Новый
notify_high_priority_event— real-time алерты до Opus - Приоритетные типы: B5/B3, news high+, price_dump_1h, rsi_oversold
- Whale-кластеры и volume_spike НЕ алертим (флуд)
- Дедуп 5 мин для high_event, 1 мин для decisions
Тесты: 172 → 176 (+4). Все зелёные.
Эффект в production:
- Trend-сделки станут редкими (Opus должен быть очень уверен)
- Reversal (B5/B3) — без изменений (доказанный edge)
- В Telegram приходят все важные сигналы и решения
- Бот в самой консервативной конфигурации за всю историю проекта
Подробности — docs/decisions.md секция «v1.13e: MIN_CONFIDENCE_FOR_TREND + Telegram + ablation squeeze».
Триггер: первый walk-forward (BTC+ETH) показал что B5 robust, но B3 был partial (chop отрицательный, но всего 3 сделки = шум). Ограничение — у альтов v1.11 (LINK/ADA/DOT/ATOM/ARB) только 90 дней истории. Сделали backfill альтов до 1095 дней + повторили на 9 парах.
- Backfill 5 альтов (LINK, ADA, DOT, ATOM, ARB) до 1095 дней (~30 минут)
- Повторный walk_forward_epochs на 9 парах
- Драматическое улучшение цифр:
- B5 bull avg: +13.5% (на BTC+ETH) → +19.0% (на 9 парах)
- B5 bear avg: +3.4% → +14.2% (рост в 4.2x!)
- B3 bull avg: +3.4% → +20.5% (рост в 6x), 4/4 окон positive
- B3 chop: −2.9% → +0.3% (вышел из minus, теперь robust)
- Σ за 3 года: B5 +92.06%, B3 +90.40%
- Оба ROBUST — единственный прокол B5 в окне 2024 H1 (−0.42%, период distribution)
- H0 trend на альтах ещё хуже: Σ −84.47% за 4 bull-окна (vs −66.89% на BTC+ETH)
Что меняется в плане:
- ✅ Этап 7 готов с очень высокой уверенностью — proxy без Claude даёт +60% годовых
- ✅ Кандидат на squeeze-фильтр для B5 (вытащить окно 2024 H1)
⚠️ Trend стратегии — кандидат на отключение или ужесточениеMIN_CONFIDENCE_FOR_TRADEдо 0.85- ✅ Backfill альтов до 1095 дней зафиксирован — production бот теперь видит 9 пар × все паттерны (раньше у альтов только 90 дней истории, BB на 4h не «прогрелся»)
Подробности — docs/decisions.md секция «Walk-forward на 9 парах: B5 + B3 оба ROBUST».
Триггер: после rollout v1.13d у нас был positive 730-дневный backtest для B5 (+68%) и B3 (+22%), но один прогон на одном периоде не доказывает что edge не overfit. Главный риск: B5 — bull-beta (стратегия которая «работает» только из-за bull-доминантного 2023-2025).
- Backfill 3 года (1095 дней) для BTCUSDT и ETHUSDT (~50K свечей × 2 пары × 3 ТФ)
- Новый скрипт
scripts/walk_forward_epochs.py(376 строк, commit d27f037)- 6 окон × 180 дней на 3-летнем диапазоне
- Каждое окно классифицируется по
regime_distribution_hours(bull/bear/chop/mixed) - Stratified-агрегаты по эпохам отдельно
- Финальный вердикт: ROBUST / PARTIAL / не работает
- Прогон выполнен на сервере — результат критически важный:
- B5 ROBUST — положителен во всех 3 эпохах:
- 🟢 Bull-dominant (4 окна): avg +13.50% Net, 3/4 positive
- 🔴 Bear-dominant (1 окно, 2025-10→2026-04 после ATH): +3.36%
- 🟡 Chop-dominant (1 окно): +2.67%
- B3 PARTIAL: bull +3.37%, bear +6.04%, chop −2.92% (3 сделки = шум)
- H0 baseline (trend): avg −16.72% в bull-окне, Σ −66.89% за 4 bull-окна — мёртвая стратегия в proxy
- B5 ROBUST — положителен во всех 3 эпохах:
- Главная находка: в bear-окне 2025-10→2026-04 B5 +3.36%, H0 −4.60% — +8 процентных пунктов разницы в самой неблагоприятной фазе. Это ровно то ради чего v1.13c делался.
Что меняется в плане:
- ✅ B5 готов к live с высокой уверенностью (3 эпохи validated)
- ✅ Bull-фаза больше не блокер для Этапа 7 — мы уже в bear, B5 в proxy положителен
⚠️ Trend в proxy = мёртвая стратегия. Нужно +30-40пп к WR от Claude — нереалистично. Кандидат на следующий фикс:MIN_CONFIDENCE_FOR_TRADE = 0.7для trend (не reversal), фильтр для редких очень сильных сетапов- 🔍 Единственный прокол B5 — окно 2024 H1 (−1.81%): период после первого ETF-rally с distribution + сжатие BB-полос. Кандидат на фильтр «B5 не срабатывает в bb_squeeze» (proxy validation потом)
Ограничения:
- Только BTC+ETH (у альтов v1.11 нет 730+ дней истории)
- 6 полных окон (одно — no-data из-за <200 1d свечей в начале backfill, одно — 14 дней)
Подробности — docs/decisions.md секция «Walk-forward по эпохам подтвердил: B5 ROBUST».
Триггер: на дашборде увидели «Auto-skipped (без Opus)» при regime=bear, dormant=(nil). Цельный аудит выявил 5 проблем подряд которые без починки сделали бы 2-4 недели paper trading бесполезными.
- Fix 1:
_should_call_opusблокировал B5/B3 в bear- Старая логика «bear/unknown → return False» унаследована с v1.10
- Reversal-триггеры специально работают в bear, фильтр их убивал
- Решение: B5/B3 → всегда Opus в любом регими; bear + news_filtered с impact=high → Opus (катализатор reversal)
- +21 регрессионных теста в
tests/test_event_analyzer_should_call_opus.py
- Fix 2: Полный аудит на похожие пропуски
- Explore-агент с детальным заданием: regime-фильтры, event-типы, sizing, BTC stopper, NewsFilter, Telegram
- Других блокирующих багов не найдено
- Fix 3: BTC stopper режет B5 (ablation на 730 днях)
- Новый параметр
disable_btc_stopperвBacktestEngine - Скрипт
scripts/ablation_btc_stopper.pyсравнивает B5/B3 в двух режимах - Результат: B5 WITH=Net +68% / NO=Net +79.98%, ΔNet=+12% при ΔMaxDD=0.00%
- Stopper удалял прибыльные сделки, не снижая риск (WR без stopper ВЫШЕ: 46.3 vs 45.7)
- StopH = 80h за 17 520h (0.46% времени — редко, но в эти моменты максимальная цена)
- B3 нейтрален (0% разница) — редкий триггер, мало пересечений
- Новый параметр
- Fix 3 решение: SYSTEM_PROMPT exempt B5/B3 от stopper
- В секции REVERSAL: «нет BTC dump'а» перенесено из «Требуй» в «НЕ требуй» с обоснованием +12%
- В
_build_user_promptпри активном stopper: разные тексты для reversal vs trend - Reversal: «контр-аргумент, не stopper. Skip только при катастрофическом дампе (>−10%/4h)»
- Trend: старый «Сильный сигнал к SKIP»
- +3 регрессионных теста на новые правила в SYSTEM_PROMPT
- Fix 4: Размер reversal 30-40% устарел после v1.12 Fix 2
- Формула
scaling = confidenceозначает: Opus_size 35% × conf 0.7 = final 24.5% (не 30-40%) - SYSTEM_PROMPT теперь инструктирует ставить
position_size_pct: 50-60для reversal - После confidence-scaling: 33-45% что и хотели изначально
- CLAUDE.md разделы «⭐ Reversal-сетапы» и «Управление позицией» переписаны
- Формула
- Fix 5: Дашборд — гистограмма confidence + auto-refresh выкл
- На странице «Решения»: гистограмма по бинам 0.1, разделение trend vs reversal через JOIN с Event
- 4 метрики: всего, медиана общая, медиана trend, медиана reversal
- Идея от Qwen-ревью: median <0.6 = промпт не работает (early signal)
- Auto-refresh default 30s → 0 (ломал скролл и expander'ы)
- Кнопка «🔄 Обновить сейчас» остаётся
Тесты: 147 → 172 (+25). Все зелёные.
Главный урок: Fix 1 — это пропуск в моём предыдущем rollout v1.13c. Я обновил детекторы, SYSTEM_PROMPT, dormant_controller, но не обновил _should_call_opus. Без e2e-теста его легко пропустить. Будем добавлять интеграционные тесты в будущие итерации.
Подробности — docs/decisions.md секция «v1.13d: Цепочка фиксов» и CLAUDE.md changelog (v1.13d).
Триггер: backtest без Claude в proxy убыточен (Net −23% на 730 днях). Решили искать стратегии с положительным EV в proxy — чтобы Claude улучшал хорошее, а не вытягивал плохое.
- Эксперимент: 8 reversal/contrarian гипотез (B1-B8) + B9 combo на 730 днях
- Williams %R, RSI(2), Z-score, BB squeeze, Mayer Multiple, return_24h как новые индикаторы
decide_reversal_proxy()— отдельная логика (не требует bull, не требует above_ema_200)--reversal-modeфлаг в backtest engine
- Победители:
- B5 lower_bb_reversal_4h: Net +67.6%, WR 45.7%, 105 сделок
- B3 bb_squeeze_breakout_4h: Net +22.6%, PF 1.72, 27 сделок
- Walk-forward 8 окон × 90 дней:
- B5: 6 из 7 окон positive (83%), ни одно ниже −5%
- B3: 5 из 6 окон positive (83%)
- Production rollout:
- Новые индикаторы
bb_width,bb_squeeze,bb_width_p25_60вbot/analysis/indicators.py - Детекторы
_check_lower_bb_reversal_4h(B5) и_check_bb_squeeze_breakout_4h(B3) вevent_detector.py - Добавлены в
DEDUP_TTL(4h = одна свеча) иTRIGGER_SEVERITY(high) ANALYZABLE_EVENT_TYPESиEVENT_PRIORITYрасширены (priority=70)- Большая новая секция ⭐ REVERSAL SETUPS в
SYSTEM_PROMPTOpus - Reversal-сетапы НЕ требуют
<пара> > EMA-200 1dи НЕ требуют bull-регима - Размер 30-40% (меньше trend), hold 48-72h, conf 0.6-0.75
- Новые индикаторы
- 13 новых тестов
tests/test_event_detector_reversal.py- 5 для B5: trigger при low+green, без trigger на red, low > BB_lower, без indicators, без bb_lower
- 5 для B3: trigger при squeeze+breakout+volume, без squeeze, close ≤ bb_upper, low volume, volume_ratio=None passes
- 3 sanity: TTL содержит новые типы, severity указано, SYSTEM_PROMPT содержит «REVERSAL SETUPS»
- Dormant mode фикс под reversal:
- Старая логика (v1.8):
bear OR unknown >24h→ отключаем Claude - Проблема: B5/B3 работают именно в bear, dormant их убивает
- Новая логика (v1.13c):
DORMANT_TRIGGER_REGIMES = ("unknown",),ACTIVE_REGIMES = ("bull", "chop", "bear") - Dormant остался как защита от сломанного regime classifier, но не от bear-фазы
- Telegram-алерт переписан с новым смыслом
- Trade-off: −$7/мес экономии, +потенциальная прибыль reversal
- Старая логика (v1.8):
Тестов: 134 → 147 (+13 reversal).
Это первая стратегия с positive expected value в proxy без Claude. Теперь у нас есть позитивный baseline для измерения delta улучшений Opus в paper trading. Если Claude поднимет WR с 45.7% (B5 proxy) до 50%+ — сильный edge.
Подробности — docs/decisions.md секция «v1.13c: Reversal-стратегии B5 и B3 в production» и CLAUDE.md changelog (v1.13c).
Триггер: после 6 production-фиксов v1.12 запустили 10 стратегий через grid_compare.py + walk-forward + ablation для проверки overfitting.
- 10 стратегий (
scripts/grid_compare.py): H0 baseline + H1-H9 гипотезы - Walk-forward (
scripts/walk_forward_compare.py): 8 окон × 90 дней - Ablation: 4 варианта H9 combo минус один компонент
- Главная находка: единственный реально консистентный паттерн — AVAX и XRP структурно убыточны (AVAX 0% WR за 8 сделок, XRP 25.9% WR за 27 сделок)
- Ablation подтвердила: возврат XRP/AVAX в combo ухудшил Net на −4.35% — самый значимый эффект
- В production: только убрал XRPUSDT и AVAXUSDT из
ALLOWED_PAIRS(11 → 9 пар) - Обновлены SYSTEM_PROMPT'ы Haiku и Opus (упоминания XRP/AVAX удалены)
- Тесты
test_smokeобновлены под 9 пар + 2 явные негативные проверки
НЕ внесено (хрупкие компоненты, проваливаются в walk-forward):
bull_only(combo проигрывал baseline в bull-окнах на −12.6%)time_stop 120hв combo вреден (без него combo лучше на +5.7%)R:R 1:1.5в combo вреден (без него +3.71%)
Главный позитив: A2 (combo без time_stop 120h) показал GROSS +3.69% — впервые positive gross без Claude в proxy. Это направление развивали в v1.13c.
Подробности — docs/decisions.md секция «v1.13a: Исключение XRP и AVAX» и CLAUDE.md changelog.
Триггер: полный ресерч проекта по 10-балльной шкале выявил 6 критичных мест где код не соответствовал заявленному поведению или мог дать неожиданное поведение в production.
- Fix 1 — Fail-closed на Redis-fail в
_get_current_deposit- Было: при ConnectionError возвращал дефолт $300 (fail-open) — позволял торговать с фантомным депозитом
- Стало: возвращает None →
validate_entry()REJECT-ит с понятным reason
- Fix 2 — Подключить confidence-sizing в
validate_entry- Было:
scale_position_size_by_confidence()существовал и тестировался, но нигде не вызывался в production - Стало: добавлен параметр
confidenceв цепочку Trader → RiskManager, при confidence < 0.5 — REJECT - Заодно исправлена формула:
floor + (1-floor)×conf→scaling = confidence(как обещано в CLAUDE.md)
- Было:
- Fix 3 — Trailing stop без race condition (live)
- Было: cancel old OCO → create new OCO; между ними позиция голая
- Стало: retry на create (1 попытка), fallback на восстановление оригинального OCO, критический Telegram-алерт если и это не сработало
- Pending-флаг
trailing_pending:{trade.id}для будущего recovery
- Fix 4 — Gap risk в paper-симуляции SL/TP
- Было: использовал только
current_price(close 1h) — gap'ы между свечами игнорировались - Стало: low/high из 1h-свечи, асимметричный slippage (SL=worst-case, TP=limit semantics)
- Цена: paper результаты ухудшатся на 0.5-1.5% за сделку — это правильное приближение к реалу
- Было: использовал только
- Fix 5 — Комиссии и slippage в backtest
- Было: backtest не учитывал расходы — результаты завышены на 30-50%
- Стало:
COMMISSION_PCT = 0.1(Binance taker × 2),SLIPPAGE_PCT = 0.05, асимметрия (TP без, market exits — да) - CLI:
--commission,--slippage,--no-fees - SimulatedTrade хранит
gross_pnl_usd,fees_usd,slippage_cost_usd - print_report показывает разбивку gross→net
- Fix 6 — Pending orders recovery
- Было: при краше между market BUY и DB INSERT позиция терялась (на бирже без записи в БД)
- Стало: pending tracker через Redis
pending_trade:{decision_id}, ставится ДО BUY, удаляется ПОСЛЕ DB INSERT - На старте
Trader.run()—_recover_pending_trades()сканирует ключи и шлёт критический Telegram-алерт - Auto-recovery в БД НЕ делаем (слишком рискованно без тестирования на testnet)
Тестов: 103 → 130 (+27 новых).
Backtest-эксперименты после фиксов (внутри той же сессии):
- Синхронизировали backtest с v1.11 per-pair → проверили в proxy: Net −37% (хуже глобального BTC −23%)
- Hybrid (per-pair + soft BTC penalty) — почти идентичен v1.11 (Net −36%)
- Главный вывод: проблема не в фильтре, а в самой стратегии без Claude — EV = −0.5%/сделку
- Внесено: BTC correlation stopper с новыми порогами (−3%/1h ИЛИ −5% rolling 4h)
event_detector._check_btc_correlation_stopper()ставит Redis-флагbot:btc_dump_stopper_active(TTL=4h)event_analyzer._build_user_promptрендерит секцию «🛑 BTC КОРРЕЛЯЦИОННЫЙ STOPPER» в промпт Opus- +6 unit-тестов
- НЕ внесено: hybrid soft confidence penalty (бесполезен в proxy), hard блок в RiskManager (оставили Opus решать)
Тестов после v1.12 ext: 130 → 134.
Подробности — docs/decisions.md секции «v1.12: 6 production-фиксов» и «v1.12 ext: Backtest эксперименты + BTC correlation stopper».
Триггер: пользователь поднял вопрос о медленности тестирования —
стратегия с глобальным BTC > EMA-200 фильтром ждёт bull-фазы неделями.
Решение — переход на per-pair логику.
- Расширение ALLOWED_PAIRS: 6 → 11 пар
- +LINKUSDT (Chainlink, oracles/RWA нарратив)
- +ADAUSDT (Cardano, L1)
- +DOTUSDT (Polkadot)
- +ATOMUSDT (Cosmos)
- +ARBUSDT (Arbitrum L2)
- Per-pair фильтр в SYSTEM_PROMPT:
- Удалён обязательный
BTC > EMA-200 1d - Введён
<целевой символ> > EMA-200 1d— каждая пара по своему тренду - Pure aggressive — без soft BTC filter (по выбору пользователя)
- Удалён обязательный
- Защита от корреляционного риска (новые stoppers):
- Свежий
price_dump_1h на BTCUSDT→ SKIP BTC.D растёт >+1% за час→ SKIP
- Свежий
- CoinGecko mapping для новых пар (chainlink/cardano/polkadot/cosmos/arbitrum)
- SYSTEM_PROMPT переработан: новый Сценарий A2 (win-кейс per-pair), обновлены секции корреляций, примеры reasoning
- Backfill 90 дней для новых пар (по 2790 свечей на каждую)
- Тесты: 101 → 103 (test_coingecko_mapping_covers_all_pairs, test_system_prompt_per_pair_filter_v1_11)
- WebSocket автоматически расширился: 18 → 33 стрима
- Funding rates автоматически подхватили новые пары через ALLOWED_PAIRS
- Документ rollback.md — на случай если стратегия не показывает результата
Ожидание: 5-10× больше шансов на PROCEED от Opus (раньше confluence ловился только на BTC). Реальная проверка — следующие 2-4 недели paper trading.
Не делали backtest перед деплоем — он бесполезен для оценки нашей системы (использует proxy-правила без Claude). Реальная ценность — только в live paper.
Подробности — в docs/decisions.md секция «Per-pair фильтр + расширение до 11 пар».
После разбора 9 предложений от Qwen AI выбрали для внедрения 2:
- Funding rates (
bot/data_sources/funding_rates.py)- Binance Futures
/fapi/v1/premiumIndexдля 6 пар - Раз в 15 мин, кеш
funding:current - Классификация neutral / hot / extreme bias
- Только КОНТЕКСТ для Opus, НЕ триггер событий
- Binance Futures
- Macro TradFi (
bot/data_sources/macro.py)- Прошли 3 источника: Yahoo (блок IP) → Stooq (новый captcha-API) → FRED
- FRED API: DTWEXBGS (USD-idx), DGS10 (US10Y), SP500 (SPX)
- Раз в час, кеш
macro:current - DXY переименован в
usd_idx(на FRED не ICE DXY ~100, а Broad TWI ~118) - Без FRED_API_KEY компонент в idle, бот не падает
- EventAnalyzer рендерит секции МАКРО + FUNDING в промпт Opus
- Снимки сохраняются в
bot_decisions.market_contextдля будущего анализа - Supervisor: 13 → 15 задач
- +22 unit-теста (FRED парсинг + funding parser)
- Обновлён
.env.exampleс FRED_API_KEY
Подробности и уроки — в docs/decisions.md секция «Расширение контекста для Opus».
Найден и пофикшен критический баг: Telegram push-handler не срабатывал для каналов (Telethon events.NewMessage(chats=...) нестабилен с каналами). За 2.5 часа в БД было 0 news_raw хотя каналы постили активно.
Фикс: переход на poll-режим (iter_messages каждые 60с) с дедупом через Redis. См. docs/decisions.md секцию "Telegram push-handler не работал".
Pipeline проверен полностью:
- ✅ Telegram parser сохранил 5 свежих постов как
news_raw - ✅ NewsFilter (Haiku) обработал — 2 признал релевантными
- ✅ EventAnalyzer (Opus 4.7) проанализировал high-impact news
- ✅ DECISION SKIP (правильно для CHOP-режима) с confidence 0.72
- ✅ Reasoning впечатляет: учёл EMA-200, регим, RSI/MACD, whales, position, weekly digest
Cost цикла: $0.155 (15% дневного лимита $1).
Это первый раз когда мы видим живую работу AI-фильтра в production. Технически проект готов к 2-4 неделям наблюдения.
После v1.18.21 работают четыре независимые подсистемы:
- Только long, без плеча
- Стратегии: trend (8 типов триггеров) + reversal long (B5/B3)
- Цель: 30+ сделок, WR ≥45%, PF ≥1.2, MaxDD ≤25% → переход на live $300 (Этап 7)
- Long + short, leverage 2×
- Стратегии: только reversal short (B5_short/B3_short)
- Funding payments каждые 8h учитываются автоматически
- Цель: 30+ сделок, WR ≥40%, PF ≥1.2, 0 liquidations → Phase C live perp
- Long only spot, без leverage, без TP/SL
- Стратегия: Donchian D55 BTC + EMA-200 macro filter
- Hold 7-60+ дней, exit по signal change
- Цель: 1-3 закрытых сделок за 60 дней; WR 35-45%, MaxDD ≤30%
- LONG perp на small-caps (INJ/JUP/WIF/TIA/SEI), leverage 1×
- Entry: funding rate ≤ -0.05%/8h
- TP +5% / SL -3.5% / max_hold 7d
- 90-day forward test — единственная стратегия с P(profit)>85% в backtest
- Stop: ✅ N≥30 И WR≥45% И Net>+$30 → upgrade $500→$1000
- Минимум 30 календарных дней без перерывов
- Ежедневная проверка
make status+ 4 dashboard вкладки (💼 Сделки, 📐 Perp, 📈 Trend, 💱 Funding Arb) -
make squeeze-mapкаждые 4-8 часов — карта BB squeeze (B3/B3_short candidates) -
make funding-arb-ratesкаждые 4 часа — есть ли extreme negative funding -
make trend-signalраз в день после 00:05 UTC — Donchian state - Раз в 3 дня — обзор Opus reasoning (особенно
[PROPOSED]: side=...) - Контроль расходов на Claude через
make claude-budget(бюджет $1/день paper) - Отдельная статистика по 4 стратегиям: spot reversal long vs perp shorts vs trend vs funding arb
- Лог наблюдений в
docs/decisions.md
| Стратегия | Депозит | Allocation |
|---|---|---|
| Spot reversal | $2000 | Главная |
| Perp shorts (demo) | $1000 | Зеркало B5/B3 |
| Trend-following | $600 | 1d Donchian BTC |
| Funding Arb | $500 | Forward test |
| Total | $4100 | (на разных балансах) |
| Команда | Что показывает |
|---|---|
make squeeze-map |
BB squeeze по 9 парам с близостью к BB-границам, цветовая индикация. Главный инструмент в Phase B |
make regime |
Текущий market regime (bull/bear/chop) + 4 фактора |
make indicators-4h |
Все индикаторы на 4h-таймфрейме (главный для swing) |
make triggers |
Последние сработавшие триггеры (24h) |
make decisions |
Решения Opus с reasoning |
make positions |
Открытые spot-позиции |
make claude-stats |
Расходы Claude API за день/неделю |
make trend-status |
Trend-following: open + closed сделки |
make trend-signal |
Live Donchian signal на BTCUSDT |
make funding-arb-status |
Funding arb: open + closed сделки |
make funding-arb-rates |
Cached funding rates по small-caps |
make funding-arb-payments |
Audit log funding payments |
Через 30+ spot-сделок:
- WR ≥45% + Net Return ≥+20% → Этап 7 (live $300, MAX=1)
- WR 35-45% → продолжить paper ещё 4 недели
- WR <35% → переписать стратегию (R:R, новые триггеры)
Через 30+ perp-сделок:
- WR ≥45% → обсуждаем Phase C (live perp на $300-500)
- WR 35-45% → переписать SYSTEM_PROMPT для shorts
- WR <35% → отключить shorts через
PERP_ALLOWED_SIDES=("long",)
- ✅ Бот ни разу не упал самостоятельно за 30 дней (TaskSupervisor мог рестартить, но не до полного отказа)
- ✅ Watchdog ни разу не присылал false positive
- ✅ Pipeline новостей работает (Telegram→Haiku→Opus end-to-end, подтверждено 26 апр)
- ✅ Reversal pipeline работает (хотя бы 2-3 B5/B3 события за 14 дней)
- ✅ Vision API работает (рендер chart для Opus, v1.15)
- ✅ News clustering работает (дедуп 30%+, v1.15)
- ✅ Ни одного случая когда бот «думал» что закрыл позицию, но реально она открыта
- ✅ Дневной лимит Claude ни разу не достигнут в нормальной работе
- ✅ 0 liquidation events на perp (для demo тоже — это индикатор risk management)
- ✅ Bull-фаза НЕ обязательна — B5/B3 robust во всех эпохах
- Переключение
BINANCE_TESTNET=falseв .env - Реальные ключи Binance (только spot trading, без withdrawals)
- Перевод $300 на спот-кошелёк
- Вернуть MAX_OPEN_POSITIONS = 1 (paper было 5)
- Установить депозит в Redis:
redis-cli SET trading:deposit_usd 300.00 - Включение
TRADING_MODE=live(поднимает cost cap Claude до $5/день) - Bull-фаза не нужна — B5/B3 robust в bear/chop
- Первые 3 дня: ручной мониторинг каждые 2 часа
- Stop-rule: при drawdown >15% ($45) — kill-switch и review
НЕ раньше чем через 2-3 месяца успешной работы на demo.binance.com.
- Минимум 30 закрытых perp-сделок
- WR ≥40%, PF ≥1.2, MaxDD ≤25%
- 0 liquidation events на demo (если хоть одна — нет смысла в live)
- Funding cost / сделку ≤$1 (если выше — leverage 2× слишком дорого)
- Перевод $300-500 на Binance Futures (отдельно от spot)
-
BINANCE_FUTURES_MODE=liveв .env - Реальные ключи Binance Futures (НЕ demo)
- Установить депозит:
redis-cli SET perp:trading_deposit_usd 300 - Первая неделя: ручной мониторинг каждые 4 часа
- Stop-rule: при drawdown >20% — kill-switch + review
Цель: добавить категориально другой edge (momentum на 1d) к Phase B (reversal на 4h) для portfolio diversification.
- Новый модуль
bot/trend_following/(5 файлов, ~1400 строк) -
donchian_strategy.py— pure logic (compute_donchian_signal/exit, parse_variant, EMA-200 macro filter) -
trend_risk_manager.py— TrendRiskManager + TrendRiskValidation -
trend_trader.py— автономный координатор (00:05 UTC daily check) -
trend_position_tracker.py— exit signal monitoring (раз в час) -
TradeTrendмодель + миграция0003_trades_trend_table.py - TaskSupervisor 17 → 19 задач
- Telegram-нотификации (
notify_trend_position_opened/closedс emoji 📈) - Dashboard вкладка "📈 Trend" + sidebar секция
- 6 Make targets (
trend-status,trend-deposit,trend-signal,trend-kill-switch,trend-kill-switch-reset,trend-set-deposit) - 19 unit-тестов в
tests/test_trend_following.py - Документация: CLAUDE.md, README.md, docs/decisions.md, docs/rollback.md
Параметры production: donchian55 + EMA-200 filter, BTCUSDT only, position 60%, default deposit $600.
- 1-3 закрытых сделки в expected range (+/- 5pp от backtest предсказания) → keep
- Если за 90 дней 0 сделок (нет breakout) — keep, ждём bull-фазы (это норма для D55)
- Если за 180 дней 5+ сделок и WR <25% или MaxDD >40% — soft-disable через
TREND_ENABLED=False
- Расширить
TREND_PAIRSдо BTCUSDT + ETHUSDT (combined backtest 4/5 окон positive) - Возможно попробовать multi-period AND vote (
donchian20+55) если single-period даёт мало сигналов
- Adaptive-OPRO (эволюция промптов)
- Shadow mode (A/B тест промптов)
- Pattern memory
- Lesson logger
- Включается после накопления 30-50+ закрытых сделок (нужна выборка) — на любой подсистеме (spot reversal, perp shorts, или trend-following)