Files
dzentra_bot/docs/roadmap/master-roadmap.md

657 lines
31 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Master Roadmap — Dzentra Bot
## Цель проекта
Создать Telegram-бота для:
- ручной торговли;
- мониторинга рынка;
- автоторговли;
- аналитики;
- управления стратегиями.
---
# Stage 01 — Bootstrap / Foundation
✔ app bootstrap
✔ config layer
✔ logging
✔ router bootstrap
✔ DB bootstrap
✅ Статус: завершён
---
# Stage 02 — System / Diagnostics
✔ system screen
✔ exchange health
✔ DB health
✔ runtime info
✔ error rendering
✅ Статус: завершён
---
# Stage 03 — Exchange Integration
✔ mock exchange
✔ time handling
✔ exchangeInfo
✔ private auth
✔ account + portfolio
✔ market live polling
⚠ websocket research / fallback polling
✅ Статус: завершён (fallback mode)
---
# Stage 04 — Storage / Journal
✔ storage foundation
✔ event log
✔ repositories
✔ UI integration
✔ journal management
✅ Статус: завершён
---
# Stage 05 — Trading UI / Draft / Validation
✔ order draft flow
✔ interactive builder
✔ validation
✔ runtime mode helpers
✔ UI unification
✔ quantity normalization
✅ Статус: завершён
---
# Stage 06 — Journal / Navigation / Settings
✔ journal UI
✔ navigation improvements
✔ settings screen
✔ system info
✅ Статус: завершён
---
# Stage 07 — Auto Trading
## 07.1 — Skeleton UI
✔ экран автоторговли
✔ state machine
## 07.2 — Real settings
✔ стратегия
✔ риск
✔ символ
✔ leverage (default x2)
## 07.3 — Analysis Cycle
✔ run_cycle()
✔ mock signals
✔ live updates
### 07.3.1 — Background Runner
✔ asyncio loop
### 07.3.2 — Live Screens
✔ market
✔ portfolio
✔ journal
### 07.3.3 — Multi Live
✔ multi-screen
✔ duplicate protection
### 07.3.4 — Monitoring redesign
✔ новый экран мониторинга
### 07.3.5 — WebSocket probe
✔ ws skeleton
⚠ fallback REST polling
## 07.4 — Strategy Plugin Architecture
### 07.4.1
✔ BaseStrategy
✔ SignalResult
### 07.4.2
✔ Strategy Registry
### 07.4.3 — Trend Strategy
✔ signal generation
✔ repeat confirmation logic
✔ confidence scoring
✔ UI integration
#### 07.4.3.1 — UI Optimization ✅
✔ compact auto screen
✔ state-based rendering (OFF / RUNNING / OBSERVING)
✔ minimal trading layout
✔ duplicate info removal
#### 07.4.3.2 — Engine Decoupling (NEXT) ✅
✔ split analysis / UI refresh
✔ fast price polling (1s)
✔ slow UI updates (event-driven / 60s)
✔ anti-flood protection
#### 07.4.3.3 — Paper Position & Execution Engine ✅
- добавлен ExecutionEngine
- реализованы paper-позиции (LONG / SHORT)
- интеграция с AutoTradeService
- синхронизация с UI
- логирование paper execution
- EventBus события (paper_position_opened)
#### Stage 07.4.3.4 — Telegram Strong Signal Alerts ✅
- EventBus-driven уведомления
- Фильтрация READY сигналов
- Поддержка BUY / SELL
- Анти-спам (deduplication)
- Интеграция с Journal
- Runner полностью управляет Telegram-уведомлениями
#### Stage 07.4.3.5 — Debug Commands & Test Mode ✅
- DEBUG_ENABLED env flag
- debug_force_signal API
- instant EventBus processing
- Telegram debug commands
- state inspection (/debug_state)
- journal logging for debug actions
- full pipeline testing without market dependency
#### Stage 07.4.3.6 - Smart Alert Throttling ✅
- cooldown для Telegram сигналов
- suppression повторных BUY/SELL
- journal logging suppressed событий
- не влияет на execution pipeline
#### 07.4.3.7 — Alert priority & UX improvements ✅
- priority levels: HIGH / MEDIUM / LOW
- improved Telegram alert layout
- normalized symbol & leverage formatting
- compatible with cooldown & suppression
- extended debug_signal parameters
#### 07.4.3.8 — Telegram Execution Alerts ✅
- Telegram alerts for paper position opened
- Telegram alerts for paper position closed
- Entry / Exit / Size / PnL rendering
- readable USD formatting
- signal alerts separated from execution alerts
#### 07.4.3.9 — Position flip flow ✅
- instant LONG ↔ SHORT reversal (FLIP)
- new EventBus event: paper_position_flipped
- unified execution alert for flip
- improved execution realism (no idle gap)
#### 07.4.3.10 — Auto UI Refactor & Live Screen ✅
- разделение auto.py → main.py + ui.py
- единый render-пайплайн через AutoTradeRunner
- live-обновление экрана без дублирования сообщений
- компактный UI: Signal / Decision / Position / PnL
- отображение Position Risk и Est. Size
- унификация форматирования (USD / price / leverage)
- защита от лишних edit (message is not modified)
#### 07.4.3.11 — Risk Settings UI & UX ✅
- отдельный экран Risk Settings (SL / TP / Max Loss)
- FSM-ввод значений (проценты и USD)
- inline-редактирование (без новых сообщений)
- временные статусы (auto-clear через ~2.5 сек)
- защита от race condition (убран “скачок” экранов)
- reset risk controls (все параметры → off)
- интеграция в Auto screen (Controls строка)
- интеграция в Settings (Risk Controls summary)
- единая навигация: Auto ↔ Settings ↔ Risk
- UX-подсказки и валидация ввода
#### 07.4.3.12 — Real Risk Engine (execution-level) ✅
- risk checks внутри ExecutionEngine
- SL / TP / ML закрывают позицию
- forced close с risk_reason
- интеграция в основной цикл автоторговли
- Telegram execution alerts с причиной риска
- единая точка принятия решений (execution layer)
#### 07.4.3.13 — Risk-Based Position Sizing & Margin Protection ✅
- risk-based position sizing через SL distance
- размер позиции теперь рассчитывается от Risk %
- execution-level margin validation
- защита от oversized positions
- max reserved balance limit
- execution block reason state
- блокировка ENTRY / FLIP при превышении margin limit
- compact mobile UI redesign
- новый формат SL / TP / ML
- compact position rendering
- estimated margin preview
- max reserved preview
- execution blocked status в UI
- улучшенный mobile formatting
- SL стал обязательным для risk-engine sizing
- risk_percent теперь реально влияет на размер позиции
- flip теперь проходит через margin protection
#### 07.4.3.14 — Auto UI, Realistic Pricing & Debug Live Tools ✅
- redesigned RUNNING auto-trading UI
- HOLD / BUY / SELL / READY state separation
- compact signal rendering with real duration
- confidence hidden for HOLD state
- direction-aware LONG / SHORT UI blocks
- compact active position rendering
- removed zero-value UI noise without position
- realistic bid / ask pricing in auto UI
- realistic bid / ask execution pricing
- TREND strategy switched to mid-price analysis
- corrected own funds / margin calculations
- safer size rounding for margin protection
- signal_started_at support for real-time duration tracking
- improved auto screen refresh handling
- live UI refresh diagnostics in AutoTradeRunner
- new debug UI-state commands
- new paper execution debug commands
- automatic flip direction detection
- live paper execution monitoring commands
- integration testing flow for SL / TP / ML
- integration testing flow for execution alerts
- preparation for isolated debug runtime architecture
#### 07.4.3.15 — Isolated Debug Runtime & Debug Auto Screen ✅
- isolated DebugTradeState
- isolated DebugPositionState
- isolated DebugTradeService
- isolated DebugExecutionEngine
- isolated DebugTradeRunner
- separate `/debug_auto_screen`
- separate debug auto UI
- debug commands no longer mutate AutoTradeService
- debug execution no longer mutates ExecutionEngine._position
- debug runner no longer uses AutoTradeRunner
- `/debug_live` disabled as production-runtime injector
- legacy debug commands redirected to isolated debug runtime
- debug LONG / SHORT / FLIP / CLOSE sandbox flow
- debug Start / Stop / Reset controls
- debug PnL live refresh
- debug margin / reserved rendering
- debug bid / ask execution pricing
- fresh REST snapshot support for debug execution
- debug_auto router added
- ordinary 🤖 Автоторговля screen remains unchanged by debug commands
- preparation for production execution pricing layer
#### 07.4.3.16 — Production Execution Pricing Layer
- added isolated runtime market caches
- separated AUTO and DEBUG websocket pricing
- added execution snapshot layer
- added freshness-aware execution pricing
- implemented websocket-first market sourcing
- added REST fallback pricing pipeline
- fixed signal timer reset after START
- removed shared market cache collisions
- stabilized AUTO/DEBUG UI market rendering
#### 07.4.3.17 — Unified Active Screen Lifecycle
- внедрён единый lifecycle основных экранов
- реализовано автоматическое закрытие предыдущего экрана
- устранено накопление Telegram UI-экранов
- унифицировано поведение всех основных экранов
- разделены UI lifecycle и background runtime
- сохранена фоновая работа AutoTradeRunner
- сохранена фоновая работа DebugTradeRunner
- стабилизирована работа live-экранов
- подготовлена архитектура для Telegram push-уведомлений
- подготовлена база для runtime event notifications
#### 07.4.3.18.1 — Runtime Event Skeleton Architecture
- добавлен слой runtime_events
- добавлен слой notifications
- создана модель RuntimeEvent
- создана модель NotificationMessage
- добавлен RuntimeEventPublisher
- добавлен NotificationService skeleton
- добавлен TelegramNotificationChannel
- добавлен NotificationTargetRegistry
- добавлена базовая дедупликация уведомлений
- добавлены шаблоны signal/execution notifications
- зарегистрирован Telegram bot в notification target registry
- зарегистрирован default chat из AUTO/DEBUG runners
- исправлен circular import в package init файлах
- подготовлена архитектура для переноса strong signal alerts
#### 07.4.3.18.2 ✅ Runtime Notification Migration
- strong signal alerts migrated to RuntimeEvent pipeline
- execution alerts migrated to RuntimeEvent pipeline
- detached Telegram delivery
- centralized notification logging
- runtime notification dedupe
- live runtime validation on real paper execution
- auto screen independence from notifications
---
### 07.4.3.19 — Strategy Audit & Signal Quality Layer
- audit SCALP false flip behavior
- add position-aware signal handling
- prevent weak/medium signal flips
- add min hold time before flip
- add flip cooldown
- add spread/slippage buffer
- classify signals as ENTRY / HOLD / EXIT / FLIP
- tune SCALP thresholds
#### 07.4.3.19.1 - Position-aware Flip Protection
- добавлена проверка confidence перед flip
- добавлено подтверждение flip по количеству повторов сигнала
- добавлена минимальная длительность удержания позиции перед flip
- добавлена защита от flip в убыточной позиции без сильного сигнала
- реализована блокировка flip через RuntimeEvent logging
- добавлен dedupe для повторяющихся событий flip-блокировки через _last_flip_block_key
- синхронизировано execution-state после ENTRY / FLIP / CLOSE
- исправлена очистка ghost-позиций после forced exit
- стабилизирован lifecycle paper execution во время ночного runtime-тестирования
#### 07.4.3.19.2 — Journal Noise Reduction & Position-aware Signal Logg
Снижение шума журнала и position-aware signal logging ✅
- отключено журналирование auto_screen_refresh_skipped
- отключено журналирование auto_screen_refreshed
- сохранено журналирование ошибок refresh-цикла
- добавлено подавление сигналов, совпадающих с открытой позицией
- добавлен throttled summary auto_position_aligned_signal_suppressed
- снижено количество повторных strong signal уведомлений
- сохранена обработка противоположных сигналов как reversal / flip candidates
- подготовлена база для Signal Intent Layer в следующем этапе
#### 07.4.3.19.3 ✅ Strategy Noise Filter & Signal Intent Layer
- убрано журналирование одиночных BUY / SELL без серии
- HOLD-серии переведены с repeat-count на duration формат
- добавлен формат 🟡 HOLD 5м 36с завершён сигналом SELL
- добавлен signal_intent в payload сигналов
- добавлены intent-типы ENTRY_CANDIDATE, REVERSAL_CANDIDATE, REINFORCE_POSITION, HOLD_MARKET, NOISE
- добавлена position-aware интерпретация сигналов
- добавлено отдельное событие готового сигнала
- подготовлена база для стандартизации журнала в 07.4.3.19.4
#### 07.4.3.19.4 ✅ Journal Runtime Standardization & Export Layer
- унифицированы execution event_type
- удалены legacy paper_* события
- execution logging переведён в единый human-readable стиль
- унифицированы market runtime events
- стандартизирован export logging
- добавлены account-aware export filename
- добавлены [DEMO]/[LIVE] runtime prefixes
- унифицированы risk-control journal events
- централизован EVENT_TITLES mapping
- журнал подготовлен к filters/search layer
---
### 07.4.4
#### 07.4.4.1.1 ✅ Market State Human UI + HOLD Lifecycle Fix
- добавлено короткое human-readable отображение состояния рынка
- технические market_state значения скрыты из основного Auto UI
- убраны `trend=...` и `volatility=...` из Telegram-экрана
- убран timeframe анализа из основного UI как лишняя техническая деталь
- добавлены UI-состояния `📈 Рынок · Рост`, `📉 Рынок · Падение`, `🟰 Рынок · Флэт`, `⚠️ Рынок · Волатильность`, `⏳ Рынок · Анализ`
- подтверждена работа REST klines как основы аналитики рынка
- Market State Engine переведён на анализ свечей OHLCV
- добавлены EMA20 / EMA50 для определения направления тренда
- добавлен ATR для оценки волатильности рынка
- добавлен RSI в аналитический payload
- TREND-стратегия стала market-aware и использует состояние рынка как фильтр входа
- market analysis синхронизируется в AutoTradeState
- исправлен баг ложного завершения `HOLD → HOLD`
- HOLD summary теперь пишется только при реальной смене сигнала
- этап подготовил основу для Market State Journal Events и BTC/ETH Relative Strength Layer
#### 07.4.4.1.2 ✅ Market State Journal Events
- добавлено journal logging изменений состояния рынка
- реализован market-state transition tracking
- добавлены market_state_changed события
- добавлены market_trend_changed события
- добавлены market_volatility_changed события
- market-analysis интегрирован в auto runtime
- устранён spam logging market-analysis циклов
- реализовано logging только при реальной смене состояния
- добавлены human-readable market messages
- убраны raw enum/state значения из UI-журнала
- журнал переведён на explainable market-analysis стиль
- добавлена фиксация отсутствия выраженного направления рынка
- подготовлена база для market analytics layer
- подготовлена база для future AI market commentary
- журнал подготовлен к market filters/search layer
#### 07.4.4.1.3 ✅ Journal Runtime Cleanup & Event Titles Layer
- унифицирована модель журнала: event_type / заголовок / сообщение
- заголовки событий сокращены до понятных сущностей
- подготовлен общий EVENT_TITLES mapping для journal UI и export layer
- убрано дублирование market_state_changed и market_trend_changed
- market_trend_changed исключён из обычного журналирования
- market trend сохранён в payload для аналитики и debug
- market-analysis сообщения приведены к единому формату
- Auto UI wording уточнён: падение заменено на нисходящий тренд
- сообщения настроек автоторговли приведены к короткому стилю
- символы активов очищены в journal messages: BTC вместо BTC/USD_LEVERAGE
- risk-control logging стал показывать SL / TP / ML в одном сообщении
- notification logging унифицирован через notification_sent / notification_error
- из market runtime сообщений убран лишний [AUTO]
- CSV / XLSX export очищен от эмодзи
- журнал подготовлен к централизованному event_titles.py и future filters/search layer
#### 07.4.4.1.4 ✅ Entry Decision Diagnostics Layer
- добавлен диагностический слой причин не входа в позицию
- AutoTradeState расширен entry_block_reason и entry_block_message
- TrendStrategy начала передавать причины HOLD в payload
- добавлены entry_block_reason к market filter / live data / weak impulse сценариям
- AutoTradeService синхронизирует entry diagnostics в runtime state
- добавлено событие entry_blocked для журнала
- журнал пишет причины не входа только при изменении причины
- добавлена защита от spam logging одинаковых HOLD-причин
- Auto UI показывает строку Вход в позицию · причина
- strategy diagnostics отделены от execution diagnostics
- execution UI приведён к human-readable стилю
- добавлен EVENT_TITLES mapping для entry_blocked
- подготовлена база для анализа частоты причин отказа от входа
- подготовлена база для adaptive thresholds и настройки чувствительности стратегии
#### 07.4.4.1.5 ✅ Runtime Window Cleanup & Symbol Lifecycle Isolation
- внедрён lifecycle cleanup runtime-окон стратегий
- BaseStrategy расширен методом reset_runtime()
- TrendStrategy и ScalpStrategy получили runtime cleanup API
- StrategyRegistry получил reset_runtime() и reset_all_runtime()
- устранено смешивание _price_window между разными активами
- устранено смешивание runtime между TREND и SCALP
- runtime окна теперь изолированы по symbol lifecycle
- runtime окна теперь изолированы по strategy lifecycle
- при смене symbol очищается runtime старого и нового актива
- при смене strategy очищается runtime обеих стратегий
- устранены ложные BUY/SELL после переключения актива
- устранены ложные сигналы после смены стратегии
- AutoTradeService теперь полностью сбрасывает market diagnostics при reset
- очищаются market_state / market_trend / market_volatility
- очищаются market_analysis_interval / market_analysis_reason
- очищаются entry_block_reason / entry_block_message
- устранено визуальное залипание TREND_UP / TREND_DOWN в UI
- после смены актива UI возвращается в состояние “⏳ Идёт анализ”
- удалено дублирующее journal событие market_symbol_changed
- journal приведён к single-result event модели
- runtime lifecycle отделён от user-facing settings events
- подготовлена база для multi-symbol runtime engine
- подготовлена база для signal aging/reset system
- подготовлена база для adaptive runtime memory management
#### 07.4.4.1.6 ✅ Signal Aging & Runtime Expiration
- добавлены поля signal_updated_at и market_analysis_updated_at в AutoTradeState
- добавлены runtime_expired_reason и runtime_expired_message
- внедрён TTL для signal runtime
- внедрён TTL для market analysis runtime
- добавлен runtime expiration handler в AutoTradeService
- добавлено событие runtime_expired для журнала
- добавлена защита от spam logging одинаковых runtime expiration событий
- signal tracking теперь обновляет время последнего сигнала
- market analysis sync теперь обновляет время последней аналитики
- stale signal runtime сбрасывается при превышении TTL
- stale market diagnostics очищаются при превышении TTL
- TrendStrategy получила TTL для live price window
- ScalpStrategy получила отдельный TTL для live price window
- reset_runtime теперь очищает price window и timestamp window
- предотвращено использование старых цен после runtime-паузы
- HOLD timer сохранён как индикатор живого runtime цикла
- Telegram UI переведён на компактные market state labels
- entry diagnostics в UI разделены на Ожидание и Вход
- добавлен compact mapping для длинных entry_block_message
- подтверждена корректная работа runtime lifecycle на флэт-рынке
- выявлен uncovered HOLD diagnostic scenario для следующего этапа
- подготовлена база для advanced market diagnostics layer
- подготовлена база для adaptive thresholds
- подготовлена база для signal freshness-aware execution
#### 07.4.4.1.7 ✅ Live Market Runtime & Advanced Trend Diagnostics
- внедрён полноценный live market runtime pipeline
- добавлен websocket-based realtime market runtime
- добавлен REST fallback для market runtime
- внедрён runtime-aware MarketPriceCache
- cache переведён на isolation по runtime_key
- добавлен market snapshot layer в ExchangeService
- добавлены get_market_snapshot и get_execution_snapshot
- добавлен get_fresh_market_snapshot
- добавлен refresh_market_snapshot_cache
- внедрена модель ExecutionPriceSnapshot
- execution pipeline получил поддержку bid/ask
- execution pipeline получил freshness tracking
- execution pipeline получил source tracking
- MarketDataRunner теперь обновляет runtime cache
- websocket runtime теперь автоматически reconnect'ится
- websocket runtime теперь безопасно fallback'ится в REST
- TrendStrategy переведена на market snapshot analysis
- TrendStrategy теперь использует bid/ask mid-price
- добавлен _analysis_price для execution-aware анализа
- добавлен direction_ratio analysis layer
- добавлен live impulse confirmation layer
- TREND теперь требует подтверждение live momentum
- live impulse теперь анализируется через runtime price windows
- улучшена фильтрация noise movement
- снижено количество ложных BUY/SELL импульсов
- TrendStrategy получила расширенные HOLD diagnostics
- HOLD ветки теперь передают entry_block_reason
- HOLD ветки теперь передают entry_block_message
- Telegram UI теперь отображает причины HOLD
- Telegram UI теперь отображает compact market states
- HOLD runtime теперь визуально подтверждает живой цикл
- HOLD timer сохранён как runtime heartbeat indicator
- AutoTradeRunner получил protected execution loop
- исключения стратегии больше не убивают runtime
- исключения UI refresh больше не убивают runtime
- исключения event handler больше не убивают runtime
- runtime loop теперь логирует auto_run_cycle_error
- runtime loop теперь логирует auto_refresh_loop_error
- защищён asyncio lifecycle автоторговли
- исправлен critical runtime bug с TrendStrategy.analyze
- восстановлен realtime refresh автоторговли
- исправлен freeze Telegram UI
- исправлено зависание market state на “Идёт анализ”
- исправлено зависание HOLD timer
- исправлена race condition между screen register и runner.start
- стабилизирована смена инструмента во время runtime
- подтверждена корректная работа websocket runtime
- подтверждена корректная работа REST fallback
- подготовлена база для spread-aware execution
- подготовлена база для stale snapshot protection
- подготовлена база для adaptive execution engine
- подготовлена база для execution quality metrics
- подготовлена база для advanced market diagnostics
- подготовлена база для multi-timeframe analysis
#### 07.4.4.1.8 ✅ Execution Freshness & Market Quality Layer
- добавлен слой execution freshness diagnostics
- добавлен слой market quality diagnostics
- AutoTradeState расширен execution quality полями
- добавлены execution_quality и execution_quality_reason
- добавлены execution_quality_message, spread_percent и snapshot_age_seconds
- AutoTradeService начал синхронизировать execution quality в runtime state
- добавлена проверка наличия market snapshot
- добавлена диагностика SNAPSHOT_ERROR
- добавлена диагностика SNAPSHOT_UNAVAILABLE
- добавлена диагностика AGING_SNAPSHOT
- добавлена диагностика STALE_SNAPSHOT
- stale snapshot теперь блокирует вход
- aging snapshot теперь отображается как warning
- нормальный snapshot age больше не засоряет Telegram UI
- age отображается только для AGING_SNAPSHOT / STALE_SNAPSHOT сценариев
- добавлен расчёт bid/ask spread
- добавлен spread warning layer
- добавлен spread block layer
- высокий spread теперь блокирует вход
- повышенный spread теперь отображается как market warning
- execution diagnostics отделены от strategy entry diagnostics
- UI разделяет Условие, Рынок и Вход
- термин Исполнение заменён на более короткий Вход
- `нет market data` заменено на `нет данных рынка`
- Telegram UI получил строку market quality warning
- Telegram UI получил строку execution block по качеству рынка
- wide spread отображается компактно как `Рынок · spread ...`
- high spread отображается как `Вход · высокий spread ...`
- устранено дублирование age при нормальном snapshot
- добавлена база для spread-aware execution
- добавлена база для stale snapshot protection
- добавлена база для slippage protection
- добавлена база для execution quality analytics
- добавлена база для instrument quality scoring
- выявлена необходимость Spread Hysteresis Layer
- подготовлен следующий этап 07.4.4.1.8.1 Spread Hysteresis Layer
---
### 07.4.5
⏳ Scalping Strategy
### 07.3.6 — Signal Engine
⏳ реальные сигналы
### 07.3.7 — Execution Engine
⏳ исполнение ордеров
### 07.3.8 — Analytics
⏳ статистика торговли
🟡 Статус: в работе
---
# Stage 08 — Analytics / Reports
⏳ отчёты
⏳ pnl
⏳ winrate
⏳ drawdown
⚪ Статус: не начат
---
# Stage 09 — Production Readiness
⏳ deployment
⏳ monitoring
⏳ alerts
⏳ backups
⚪ Статус: не начат
---
## Текущий статус проекта
👉 Завершён: 07.4.3.1
👉 Следующий шаг: 07.4.3.2 — Engine Decoupling + Price Polling