# 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
```
