07.4.4.1.5 — Runtime Window Cleanup & Symbol Lifecycle Isolation

This commit is contained in:
2026-05-11 12:06:00 +03:00
parent 363719cc8e
commit e17f847603
10 changed files with 323 additions and 14 deletions

View File

@@ -0,0 +1,180 @@
# 07.4.4.1.5 — Runtime Window Cleanup & Symbol Lifecycle Isolation
## Цель этапа
Устранить смешивание runtime-состояния между:
- разными активами,
- разными стратегиями,
- разными lifecycle-сессиями автоторговли.
Этап стабилизирует:
- `_price_window`,
- signal tracking,
- market diagnostics,
- runtime memory.
---
# Проблема до внедрения
До этапа `07.4.4.1.5` runtime-окна стратегий жили бесконечно:
```python
_price_window: dict[str, list[float]]
```
Из-за этого возникали проблемы:
## 1. Смешивание активов
```text
BTC → накопилось 8 цен
переключение на ETH
TREND уже имеет готовое окно
ложный BUY/SELL
```
## 2. Смешивание стратегий
```text
TREND накопил runtime
SCALP получил старый runtime
моментальный сигнал
```
## 3. Залипание market state
После смены актива UI мог показывать:
```text
📉 Тренд · Нисходящий
```
хотя новый актив ещё не анализировался.
## 4. Дублирование journal-событий
Одно изменение актива вызывало:
- runtime market event,
- user settings event.
Журнал становился шумным.
---
# Что внедрено
## 1. Runtime lifecycle API стратегий
Добавлен lifecycle hook:
```python
def reset_runtime(self, symbol: str | None = None) -> None
```
## 2. Runtime cleanup в TREND и SCALP
Теперь стратегии умеют:
- очищать live runtime,
- сбрасывать окна,
- изолировать symbol runtime.
## 3. Runtime cleanup registry
В `StrategyRegistry` добавлены:
```python
reset_runtime(...)
reset_all_runtime()
```
## 4. Symbol lifecycle isolation
При смене symbol:
```python
StrategyRegistry.reset_runtime(previous_symbol)
StrategyRegistry.reset_runtime(new_symbol)
```
### Результат
```text
BTC runtime уничтожается
ETH runtime стартует с нуля
```
## 5. Strategy lifecycle isolation
При смене стратегии:
```python
StrategyRegistry.reset_runtime(previous_strategy)
StrategyRegistry.reset_runtime(new_strategy)
```
### Результат
- не наследуются старые окна,
- не переносятся старые сигналы,
- не переносится momentum.
## 6. Signal lifecycle cleanup
Теперь очищаются:
```python
market_state
market_trend
market_volatility
market_analysis_interval
market_analysis_reason
entry_block_reason
entry_block_message
```
### Результат
После смены актива UI показывает:
```text
⏳ Рынок · Идёт анализ
```
## 7. Journal cleanup
Удалено runtime событие:
```text
market_symbol_changed
```
Пользователю остаётся только итоговое событие:
```text
Автоторговля | Актив изменён: ETH
```
---
# Итог архитектуры
## До этапа
```text
Strategy runtime = бесконечная память
```
## После этапа
```text
Runtime привязан к:
- symbol
- strategy
- lifecycle session
```