Skip to content

Latest commit

 

History

History
908 lines (723 loc) · 64.8 KB

File metadata and controls

908 lines (723 loc) · 64.8 KB

Roadmap

Детальный план разработки по этапам. Обновляй по мере прохождения.

Этап 1 — Инфраструктура ✅ ЗАКРЫТ

Цель: поднять окружение, бот пишет "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 startmake migratemake logs-bot показывает "I'm alive" каждые 60 секунд.

Этап 2 — Сбор данных ✅ ЗАКРЫТ

  • 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 — Анализ и event detection ✅ ЗАКРЫТ

  • 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 — Claude-агенты ✅ ЗАКРЫТ

  • 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 — Paper trading ✅ ЗАКРЫТ

  • 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 — Дашборд и алерты ✅ ЗАКРЫТ

  • 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 (опционально, отложено)

Этап 6.5 — Reliability и тестирование ✅ ЗАКРЫТ

Цель: закрыть слабые места, найденные в 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

Этап 6.7 — Backtesting + улучшения стратегии ✅ ЗАКРЫТ

Цель: валидировать стратегию на исторических данных перед переходом на 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=unknown only (bear убран — там работают B5/B3)
    • ATR в backtest — флаги --atr-stops --confidence-sizing
    • Unit-тесты: 14 новых тестов для ATR-stops и confidence-sizing
  • Прогон backtest с улучшениями (730 дней) → ожидаемые метрики:
    • WR 36% → 42-45%
    • Drawdown 24% → 12-15%
    • Чистый PnL: +$50-80/год на $300 (16-26% годовых)

Что НЕ симулируется (ограничения):

  • Claude (дорого + результаты исторические без качества reasoning)
  • Whale aggTrade события (нет исторических данных за 365 дней)
  • Telegram-новости (нет исторических данных)
  • Slippage и комиссии (можно добавить позже)

2026-05-05: 💱 v1.18.21 — Inverse Funding Arbitrage (Phase D Variant K) в production

Четвёртая параллельная стратегия после 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×

Backtest validation (365 days)

Метрика Значение
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 → executor
  • funding_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.

Размер $500 — обоснование

$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 без статистического подтверждения.

Stop conditions (90 дней forward test)

Сценарий Действие
✅ 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 стратегии

2026-05-02 (утро): 🏁 v1.16 Phase B полностью завершена — paper-perp на demo.binance.com

5 sub-фаз (B1+B2+B3+B4+B5) реализованы за 2-3 дня. Параллельная perp-инфраструктура поверх spot, без касания spot-кода.

Что было до Phase B

После 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).

Что сделано в каждой sub-фазе

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 строк нового кода

Метрика успеха paper-perp

За 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

2026-05-01 (вечер): 🎨 v1.15 — Vision API для B5/B3 + News Clustering

Phase 1+2 для усиления edge через современные технологии.

Vision API для reversal-сетапов

Новый модуль 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 через отсев "ловли ножа".

News Clustering через embeddings

Новый модуль 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 модифицированных

Метрика успеха (за 2 недели после деплоя)

  • WR (vision+clustering) ≥ WR (без них) + 3pp
  • duplicates_skipped ≥ 30% от news_raw
  • Vision-cost ≤ $5/мес

Если не достигнуто — отключаем feature-флагами без отката кода.


2026-05-01 (утро): 📈 v1.14 — Multi-position paper для ускорения сбора статистики

После 30 часов paper заметили что в один 8-часовой период могут совпасть 2 reversal-сетапа на разных парах (BNB и ATOM). Один отвергался RiskManager'ом из-за MAX_OPEN_POSITIONS=1. На 9 парах backtest даёт ~1 reversal/неделя, но реальный flow показал кластеризацию.

Что изменилось (paper-режим)

  • MAX_OPEN_POSITIONS=1 → 5
  • MAX_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-stopper CLI

% метрики стратегии (WR, avg win/loss, Sharpe, MaxDD) инвариантны к депозиту, поэтому статистика собирается ×5 быстрее без изменения validity.

Backtest-валидация v1.14 (3 года, 9 пар, B5+B3 only)

Конфиг 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 убыточных недель и редкие положительные «прорывы».

⚠️ Чек-лист перед LIVE (Этап 7)

  • 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.


2026-04-29 (поздний вечер): 🛡 v1.13e — production-ужесточение + Telegram-расширение

Триггер: 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 на None
    • Trader._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».

2026-04-29 (вечер): 🎯🎯 Walk-forward на 9 парах — B5 + B3 оба ROBUST, +92% / +90% за 3 года

Триггер: первый 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».

2026-04-29: 🎯 Walk-forward по эпохам — B5 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
  • Главная находка: в 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».

2026-04-28 (вечер): 🔧 v1.13d — Цепочка фиксов после v1.13c rollout

Триггер: на дашборде увидели «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).

2026-04-28 (день): ⭐ v1.13c — Reversal-стратегии B5/B3 в production + dormant fix

Триггер: 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_PROMPT Opus
    • 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

Тестов: 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).

2026-04-28 (утро): 🎯 v1.13a — Исключение XRP и AVAX

Триггер: после 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.

2026-04-27 (вечер): 🛡 v1.12 — 6 production-фиксов перед Этапом 7

Триггер: полный ресерч проекта по 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)×confscaling = 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».

2026-04-27 (вечер): 🚀 v1.11 — Per-pair фильтр + 5 новых пар (AGGRESSIVE)

Триггер: пользователь поднял вопрос о медленности тестирования — стратегия с глобальным 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 пар».

2026-04-26 (вечер): 🎯 Расширение контекста — Funding rates + Macro

После разбора 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, НЕ триггер событий
  • 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».

2026-04-26: 🎉 Pipeline новостей ЗАРАБОТАЛ end-to-end

Найден и пофикшен критический баг: Telegram push-handler не срабатывал для каналов (Telethon events.NewMessage(chats=...) нестабилен с каналами). За 2.5 часа в БД было 0 news_raw хотя каналы постили активно.

Фикс: переход на poll-режим (iter_messages каждые 60с) с дедупом через Redis. См. docs/decisions.md секцию "Telegram push-handler не работал".

Pipeline проверен полностью:

  1. ✅ Telegram parser сохранил 5 свежих постов как news_raw
  2. ✅ NewsFilter (Haiku) обработал — 2 признал релевантными
  3. ✅ EventAnalyzer (Opus 4.7) проанализировал high-impact news
  4. ✅ DECISION SKIP (правильно для CHOP-режима) с confidence 0.72
  5. ✅ Reasoning впечатляет: учёл EMA-200, регим, RSI/MACD, whales, position, weekly digest

Cost цикла: $0.155 (15% дневного лимита $1).

Это первый раз когда мы видим живую работу AI-фильтра в production. Технически проект готов к 2-4 неделям наблюдения.

⏳ Текущая фаза (с 5 мая 2026): 4 параллельных стратегии в paper

После v1.18.21 работают четыре независимые подсистемы:

Spot reversal (paper, депозит $2000)

  • Только long, без плеча
  • Стратегии: trend (8 типов триггеров) + reversal long (B5/B3)
  • Цель: 30+ сделок, WR ≥45%, PF ≥1.2, MaxDD ≤25% → переход на live $300 (Этап 7)

Perp shorts (paper-only на demo.binance.com, депозит $1000 виртуальных)

  • 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

Trend-Following (paper, депозит $600)

  • 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%

Funding Arbitrage (paper, депозит $500) — NEW v1.18.21

  • 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

Чек-лист наблюдения (общее для всех 4 стратегий)

  • Минимум 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

Аллокация капитала (виртуальная, paper)

Стратегия Депозит Allocation
Spot reversal $2000 Главная
Perp shorts (demo) $1000 Зеркало B5/B3
Trend-following $600 1d Donchian BTC
Funding Arb $500 Forward test
Total $4100 (на разных балансах)

Инструменты CLI для наблюдения

Команда Что показывает
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",)

Критерии общей надёжности (для перехода на любые real money)

  • ✅ Бот ни разу не упал самостоятельно за 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 во всех эпохах

Этап 7 — Реальные $300 на spot (после 2-4 недель успешного paper-spot)

  • Переключение 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

Phase C — Реальные деньги на perp (после 2-3 месяцев успешного paper-perp)

НЕ раньше чем через 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

v1.17 — Donchian Trend-Following (третья параллельная стратегия) ✅ ЗАКРЫТ

Цель: добавить категориально другой 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.

Метрики успеха (через 60 дней paper)

  • 1-3 закрытых сделки в expected range (+/- 5pp от backtest предсказания) → keep
  • Если за 90 дней 0 сделок (нет breakout) — keep, ждём bull-фазы (это норма для D55)
  • Если за 180 дней 5+ сделок и WR <25% или MaxDD >40% — soft-disable через TREND_ENABLED=False

Критерии для расширения (после 2-3 закрытых сделок)

  • Расширить TREND_PAIRS до BTCUSDT + ETHUSDT (combined backtest 4/5 окон positive)
  • Возможно попробовать multi-period AND vote (donchian20+55) если single-period даёт мало сигналов

Этап 8 — Самообучение

  • Adaptive-OPRO (эволюция промптов)
  • Shadow mode (A/B тест промптов)
  • Pattern memory
  • Lesson logger
  • Включается после накопления 30-50+ закрытых сделок (нужна выборка) — на любой подсистеме (spot reversal, perp shorts, или trend-following)