# 07.4.4.1.9.1 Market Semantic Runtime Layer

## Что сделано

Добавлен Market Semantic Runtime Layer — слой, который переводит технические состояния market analytics в понятные конечные semantic-состояния для UI и дальнейших runtime-фильтров.

До этого этапа система уже умела рассчитывать расширенную диагностику рынка:

- market_state
- market_trend
- market_volatility
- market_trend_strength
- market_trend_quality
- market_phase
- market_trend_gap_percent
- market_trend_consistency

Но UI отображал эти признаки раздельно:

- Тренд · Вверх
- Фаза · коррекция
- Качество · шум
- Сила · слабая

Это было информативно, но могло путать, потому что одно и то же состояние рынка раскладывалось на несколько строк.

На этом этапе добавлен semantic layer, который собирает runtime-признаки в одну итоговую смысловую строку.

Теперь вместо набора технических признаков экран показывает одно конечное состояние рынка:

```text
⚡ Рынок · сильный рост
```

или:

```text
↘️ Рынок · коррекция
```

или:

```text
⚠️ Рынок · шумный рост
```

## Главная цель этапа

Цель этапа — сделать market analytics не просто технической диагностикой, а понятным semantic runtime-состоянием.

Система теперь отвечает не только на вопрос:

```text
Какие технические признаки у рынка?
```

но и на вопрос:

```text
Что это состояние рынка значит для автоторговли прямо сейчас?
```

## Что изменилось в аналитике

### 1. Добавлена semantic-нормализация market state

Ранее MarketAnalysisService и TrendStrategy передавали в UI набор независимых признаков:

```text
TREND_UP
STRONG
CLEAN
IMPULSE
```

Теперь UI получает возможность интерпретировать эту комбинацию как единое смысловое состояние:

```text
⚡ Рынок · сильный рост
```

То есть слой не заменяет аналитику, а делает её результат удобным для принятия решения.

### 2. Введена единая строка состояния рынка

В Telegram UI добавлена функция:

```python
_market_semantic_line(state)
```

Она заменяет старую пару строк:

```python
_market_state_line(state)
_market_diagnostics_line(state)
```

Теперь вместо двух раздельных строк формируется одна semantic-строка.

Было:

```text
📈 Тренд · Вверх
⚡ Импульс · сильный
```

Стало:

```text
⚡ Рынок · сильный рост
```

Было:

```text
📈 Тренд · Вверх
↘️ Фаза · коррекция
```

Стало:

```text
↘️ Рынок · коррекция
```

Было:

```text
📉 Тренд · Вниз
⚠️ Качество · шум
```

Стало:

```text
⚠️ Рынок · шумное снижение
```

### 3. Убрано дублирование смыслов в UI

До этапа состояние рынка могло одновременно отображаться как:

```text
📈 Тренд · Вверх
↘️ Фаза · коррекция
```

или:

```text
🟰 Рынок · Флэт
```

и это смешивало уровни анализа:

- направление
- фазу
- качество
- силу
- применимость для входа

После внедрения semantic layer UI показывает итоговую интерпретацию, а не набор технических слоёв.

### 4. Добавлена приоритетность market semantics

При формировании semantic-состояния используется приоритет:

1. UNKNOWN
2. HIGH_VOLATILITY
3. LOW_VOLATILITY / SQUEEZE
4. RANGE
5. PULLBACK
6. NOISY
7. WEAK
8. STRONG IMPULSE
9. NORMAL IMPULSE
10. fallback по направлению тренда

Это важно, потому что одно состояние может содержать несколько признаков одновременно.

Например:

```text
TREND_UP + NOISY + PULLBACK
```

В этом случае важнее показать:

```text
↘️ Рынок · коррекция
```

а не просто:

```text
⚠️ Рынок · шумный рост
```

Потому что pullback сильнее влияет на вход TREND-стратегии.

### 5. Улучшена читаемость TREND-аналитики

Для стратегии TREND semantic layer особенно важен, потому что стратегия работает только тогда, когда рынок не просто направленный, а достаточно качественный для входа.

Теперь пользователь видит не внутреннюю механику:

```text
trend=UP
strength=WEAK
quality=CLEAN
phase=RANGE
```

а итог:

```text
🟡 Рынок · слабый рост
```

или:

```text
⚠️ Рынок · шумный рост
```

или:

```text
↘️ Рынок · коррекция
```

Это упрощает понимание причин HOLD.

## Поддерживаемые semantic-состояния рынка

### Рост

```text
⚡ Рынок · сильный рост
📈 Рынок · рост
🟡 Рынок · слабый рост
⚠️ Рынок · шумный рост
↘️ Рынок · коррекция
```

### Снижение

```text
⚡ Рынок · сильное снижение
📉 Рынок · снижение
🟡 Рынок · слабое снижение
⚠️ Рынок · шумное снижение
↗️ Рынок · откат вверх
```

### Нейтральные состояния

```text
🟰 Рынок · флэт
🟦 Рынок · сжатие
⚠️ Рынок · перегрев
⏳ Рынок · анализ
```

## Как semantic-состояния связаны с TREND-стратегией

### Потенциально рабочие состояния

Эти состояния могут быть пригодны для входа, если live-импульс подтвердит направление:

```text
⚡ Рынок · сильный рост
📈 Рынок · рост
⚡ Рынок · сильное снижение
📉 Рынок · снижение
```

### Блокирующие или HOLD-состояния

Эти состояния не являются подходящими для TREND-входа:

```text
🟡 Рынок · слабый рост
🟡 Рынок · слабое снижение
⚠️ Рынок · шумный рост
⚠️ Рынок · шумное снижение
↘️ Рынок · коррекция
↗️ Рынок · откат вверх
🟰 Рынок · флэт
🟦 Рынок · сжатие
⚠️ Рынок · перегрев
⏳ Рынок · анализ
```

Важно: semantic line сама по себе не открывает и не блокирует сделку.

Решение принимает TrendStrategy и ExecutionEngine.

Но semantic line теперь корректно показывает пользователю смысл этого решения.

## Что изменилось в Telegram UI

### Было

UI показывал технические строки:

```text
📈 Тренд · Вверх
↘️ Фаза · коррекция
🧩 Фильтр · откат
⚠️ Вход · spread 0.12%
```

### Стало

UI показывает одну смысловую строку рынка:

```text
↘️ Рынок · коррекция
🧩 Фильтр · откат
⚠️ Вход · spread 0.12%
```

Или в рабочем сценарии:

```text
⚡ Рынок · сильный рост
```

Если дополнительных блокировок нет, лишние строки не отображаются.

## Разделение ответственности строк UI

После этапа строки разделены так:

### Сигнал

Показывает текущий торговый сигнал стратегии:

```text
Сигнал 🟡 HOLD · 27с
Сигнал 🟢 BUY · READY
Сигнал 🔴 SELL · READY
```

### Рынок

Показывает semantic-состояние market analytics:

```text
⚡ Рынок · сильный рост
↘️ Рынок · коррекция
🟰 Рынок · флэт
```

### Фильтр

Показывает причину, почему стратегия не даёт вход:

```text
🧩 Фильтр · слабый тренд
🧩 Фильтр · шумный тренд
🧩 Фильтр · откат
```

### Вход

Показывает проблемы именно execution/runtime качества:

```text
⚠️ Вход · spread 0.12%
⛔ Вход · высокий spread 0.18%
⚠️ Вход · нет стакана
⛔ Вход · нет данных рынка
```

## Что было исправлено

- убрано дублирование строк market state и diagnostics
- устранена неоднозначность между “Тренд”, “Рынок”, “Фаза”, “Качество”
- semantic-состояние рынка теперь отображается одной строкой
- UI стал стабильнее и короче
- экран автоторговли стал легче читать
- состояния рынка стали ближе к смыслу торгового решения
- HOLD-причины стали понятнее
- состояние “рынок готов” больше не перегружает UI лишними строками
- execution quality остался отдельным от market semantics

## Что осталось отдельным от semantic layer

Market Semantic Runtime Layer не заменяет execution quality.

То есть строки вида:

```text
⚠️ Вход · spread 0.12%
⛔ Вход · высокий spread 0.18%
```

остаются отдельными, потому что они относятся не к анализу направления рынка, а к качеству входа и возможности исполнения.

Это правильное разделение:

- `Рынок` — что происходит с market structure
- `Фильтр` — почему стратегия не входит
- `Вход` — можно ли технически исполнить вход

## Проверка

После внедрения нужно проверить:

```bash
python -m compileall src
```

Runtime-проверка:

- экран автоторговли открывается
- Auto screen refresh не падает
- строка `Рынок` отображается одной semantic-строкой
- нет одновременного дубля `Тренд · Вверх` + `Фаза · ...`
- HOLD timer продолжает обновляться
- при слабом тренде отображается `🟡 Рынок · слабый рост/снижение`
- при шумном тренде отображается `⚠️ Рынок · шумный рост/снижение`
- при откате отображается `↘️ Рынок · коррекция` или `↗️ Рынок · откат вверх`
- при флэте отображается `🟰 Рынок · флэт`
- при squeeze отображается `🟦 Рынок · сжатие`
- при высокой волатильности отображается `⚠️ Рынок · перегрев`
- execution quality продолжает отображаться отдельной строкой `Вход`
- spread warning не смешивается со строкой `Рынок`
- active position screen тоже использует semantic market line

## Результат

Этап завершил переход от raw market diagnostics к semantic runtime-представлению.

Теперь система имеет три уровня:

1. MarketAnalysisService рассчитывает технические признаки.
2. TrendStrategy использует признаки для HOLD / BUY / SELL.
3. Telegram UI показывает человеку итоговое semantic-состояние рынка.

Это подготовило базу для следующих этапов:

- semantic entry filters
- adaptive threshold tuning
- market regime scoring
- confidence scoring по semantic-состояниям
- более точного TREND execution
- future strategy arbitration
- объяснимого AutoTrade decision screen