07.4.4.1.7 — Live Market Runtime & Advanced Trend Diagnostics

This commit is contained in:
2026-05-11 15:20:41 +03:00
parent fe33e0c026
commit ec9904f91d
7 changed files with 591 additions and 18 deletions

View File

@@ -0,0 +1,387 @@
# 07.4.4.1.7 — Live Market Runtime & Advanced Trend Diagnostics
## Цель этапа
Перевести автоторговлю с простой polling-модели в полноценный live runtime pipeline с realtime market snapshots, websocket runtime, устойчивым execution loop и прозрачной диагностикой причин HOLD.
Этап решает несколько критичных проблем:
- UI автоторговли визуально “замирал”;
- HOLD мог выглядеть как зависший;
- рынок отображался как “Идёт анализ” слишком долго;
- стратегии использовали только last price;
- runtime loop мог полностью остановиться после исключения стратегии;
- пользователь не видел причин отсутствия входа;
- live execution pipeline не был устойчив к websocket/runtime ошибкам.
---
# Что было до этапа
До внедрения нового runtime pipeline:
- стратегии использовали упрощённый get_price();
- live bid/ask не использовались;
- отсутствовал execution snapshot layer;
- runtime loop мог полностью упасть при exception внутри стратегии;
- websocket runtime не имел безопасного fallback поведения;
- UI не показывал диагностический контекст HOLD;
- market analysis был слабо связан с live market execution;
- Telegram UI не показывал причину отсутствия входа в позицию.
Из-за этого пользователь видел:
text ⏳ Рынок · Идёт анализ
даже когда runtime уже фактически остановился.
---
# Что внедрено
## 1. Live market runtime pipeline
Введён полноценный runtime pipeline:
text Exchange WS ↓ MarketDataRunner ↓ MarketPriceCache ↓ ExchangeService.get_market_snapshot() ↓ Strategy analyze() ↓ AutoTradeService ↓ Telegram UI
Теперь стратегии работают не с одиночной ценой, а с realtime market snapshot.
---
## 2. Market snapshot layer
В ExchangeService добавлены:
python get_market_snapshot() refresh_market_snapshot_cache() get_execution_snapshot() get_fresh_market_snapshot()
Теперь runtime может:
- получать bid/ask;
- понимать freshness snapshot;
- использовать cache/runtime isolation;
- безопасно fallback'иться на REST.
---
## 3. Execution snapshot model
Добавлена модель:
python ExecutionPriceSnapshot
Теперь execution pipeline знает:
- last price;
- bid price;
- ask price;
- freshness;
- возраст snapshot;
- источник snapshot.
Это подготовило основу для:
- execution quality scoring;
- spread analysis;
- slippage protection;
- stale execution protection.
---
## 4. MarketPriceCache runtime isolation
MarketPriceCache переведён на runtime-aware architecture:
python (runtime_key, symbol)
Теперь:
- AUTO runtime;
- DEBUG runtime;
- future paper/live runtimes
не конфликтуют между собой.
---
## 5. Websocket runtime
Внедрён live websocket runtime через:
python MarketDataRunner
Теперь runtime:
- держит live stream;
- обновляет cache;
- следит за runtime lifecycle;
- автоматически reconnect'ится;
- умеет fallback в REST.
---
## 6. REST fallback layer
Добавлен безопасный fallback:
python _rest_fallback_once()
Если websocket отключается:
text WS disconnect ↓ REST snapshot refresh ↓ runtime продолжает жить
Автоторговля больше не “умирает” полностью при потере websocket.
---
## 7. Runtime stability protection
AutoTradeRunner получил защищённый execution loop.
Теперь:
python service.run_cycle()
выполняется внутри protected try/except.
Даже если стратегия падает:
- UI остаётся жив;
- runtime остаётся жив;
- websocket продолжает работать;
- HOLD timer продолжает тикать;
- ошибка уходит в журнал.
---
## 8. Protected UI refresh loop
Защищены:
python _handle_important_event() _refresh_screen()
Теперь единичная ошибка Telegram/UI/runtime:
- не убивает asyncio task;
- не ломает live screen;
- не останавливает автоторговлю.
---
## 9. Runtime startup stabilization
Изменён порядок запуска:
Было:
text runner.start() ↓ screen.register()
Стало:
text screen.register() ↓ runner.start()
Это устранило race condition между:
- запуском runtime;
- регистрацией Telegram screen;
- первым refresh cycle.
---
# Улучшения аналитики
## 10. TrendStrategy переведена на market snapshot analysis
TrendStrategy теперь анализирует:
python bid_price ask_price last_price
а не только одиночный ticker price.
---
## 11. Mid-price analysis
Добавлен:
python _analysis_price()
Теперь стратегия использует:
python (bid + ask) / 2
как основную execution-aware цену анализа.
Это снижает шум:
- spread spikes;
- случайных last trades;
- микродвижений.
---
## 12. Live impulse confirmation
TREND больше не принимает решение только по market analysis.
Теперь требуется:
text market trend + live impulse + direction consistency
---
## 13. Direction ratio analysis
Добавлен:
python _direction_ratio()
Теперь стратегия оценивает:
- сколько движений были вверх;
- сколько вниз;
- насколько импульс последовательный.
Это защищает от:
text хаотического шума
и уменьшает ложные входы.
---
## 14. Runtime price windows
TREND и SCALP получили собственные live price windows.
Теперь анализируется:
python изменение цены во времени
а не только моментальный snapshot.
---
## 15. TREND impulse confirmation
TREND теперь требует:
python change_percent >= threshold direction_ratio >= min_ratio
Только после этого:
python BUY / SELL
становится валидным.
---
## 16. HOLD diagnostics layer
Практически все HOLD-сценарии получили diagnostics payload:
python entry_block_reason entry_block_message
Теперь UI знает:
- почему нет входа;
- почему HOLD продолжается;
- что именно заблокировало execution.
---
## 17. Market state visualization
Telegram UI теперь отображает:
text 📈 Тренд · Вверх 📉 Тренд · Вниз 🟰 Рынок · Флэт ⚠️ Рынок · Высокая волатильность
Вместо “чёрного ящика”.
---
## 18. HOLD explanation layer
Теперь пользователь видит:
text Ожидание · слабый импульс Ожидание · мало данных Ожидание · волатильность
Это резко повысило прозрачность runtime.
---
## 19. Live HOLD timer
HOLD timer сохранён намеренно:
text Сигнал 🟡 HOLD · 2м 05с
Теперь это индикатор:
- живого runtime;
- живого UI refresh;
- активного execution loop;
- актуального market cycle.
---
# Что было исправлено в процессе этапа
Во время интеграции был найден критичный runtime bug:
text TrendStrategy.analyze() оказалась вне класса
Из-за этого:
text AutoTradeRunner._worker() падал полностью
После исправления:
- runtime loop восстановлен;
- UI refresh восстановлен;
- HOLD timer снова realtime;
- market diagnostics снова обновляются.
---
# Проверка этапа
Проверено:
- websocket runtime работает;
- REST fallback работает;
- HOLD timer realtime;
- UI не замирает;
- market state обновляется;
- смена инструмента работает;
- runtime survives exceptions;
- Telegram refresh стабилен;
- snapshot runtime обновляется;
- HOLD diagnostics отображаются корректно.
---
# Что подготовлено для следующих этапов
Подготовлена база для:
text adaptive execution engine spread-aware execution advanced diagnostics market freshness scoring multi-timeframe analysis signal persistence scoring adaptive thresholds execution quality metrics
---
# Итог этапа
Этап 07.4.4.1.7 завершил переход автоторговли к:
text живому realtime market runtime
Теперь система:
- использует live market snapshots;
- имеет websocket runtime;
- имеет REST fallback;
- не умирает при exception;
- показывает причины HOLD;
- отображает состояние рынка;
- поддерживает execution-aware analysis;
- подготовлена к advanced execution engine.