07.4.4.1.9.2 Signal Confirmation Runtime

This commit is contained in:
2026-05-12 10:57:31 +03:00
parent 5325ea3855
commit fc50cadabf
8 changed files with 1122 additions and 410 deletions

View File

@@ -0,0 +1,452 @@
# 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

View File

@@ -0,0 +1,212 @@
# 07.4.4.1.9.2 Signal Confirmation Runtime
## Что сделано
Добавлен Signal Confirmation Runtime — отдельный runtime-слой подтверждения торгового сигнала, который находится между raw BUY/SELL сигналом стратегии и итоговым READY-состоянием AutoTrade.
До этого этапа система подтверждала сигнал только количеством одинаковых повторов:
```text
BUY → BUY
```
или:
```text
SELL → SELL
```
После достижения `_confirm_repeats` сигнал сразу переходил в:
```text
READY
```
Теперь подтверждение сигнала стало полноценным runtime-процессом, который требует:
1. повторяемости сигнала
2. удержания сигнала во времени
---
# Главная цель этапа
Цель этапа — научить AutoTrade отличать:
```text
кратковременный рыночный шум
```
от:
```text
устойчивого directional impulse
```
Теперь система оценивает не только:
```text
Что сигнал появился
```
но и:
```text
Насколько стабильно рынок удерживает это направление
```
---
# Что изменилось в аналитике
## 1. Подтверждение стало time-aware
Ранее confirmation runtime был только repeat-based:
```text
BUY → BUY → READY
```
Теперь confirmation стал:
```text
BUY
→ BUY удерживается
→ BUY повторяется
→ BUY живёт достаточно долго
→ READY
```
---
## 2. Добавлен runtime-анализ устойчивости сигнала
Signal Confirmation Runtime теперь анализирует:
- длительность жизни BUY/SELL
- стабильность направления
- количество повторов
- consistency сигнала во времени
---
## 3. Добавлен signal lifetime tracking
В `AutoTradeState` добавлены:
```python
signal_confirmation_seconds
signal_confirmation_required_seconds
signal_confirmation_missing_repeats
signal_confirmation_progress
signal_confirmation_reason
```
---
## 4. BUY/SELL теперь проходят confirmation phase
Ранее жизненный цикл был:
```text
HOLD
→ BUY
→ READY
```
Теперь:
```text
HOLD
→ BUY
→ CONFIRMING
→ READY
```
или:
```text
HOLD
→ SELL
→ CONFIRMING
→ READY
```
---
## 5. Добавлен signal persistence filter
Теперь сигнал обязан удерживаться минимум:
```python
_confirm_min_duration_seconds = 10
```
Даже если repeats уже подтверждены — READY не наступит, пока сигнал не проживёт достаточное время.
---
# Что изменилось в Telegram UI
## Добавлена runtime-строка подтверждения сигнала
Для BUY/SELL теперь отображается:
```text
⏳ Подтверждение · 1/2 · 4/10с
```
или:
```text
✅ Подтверждение · готово
```
## HOLD больше не показывает confirmation line
HOLD отображается как раньше:
```text
Сигнал 🟡 HOLD · 54с
```
без confirmation runtime строки.
---
# Проверка
После внедрения:
```bash
python -m compileall src
```
Runtime-проверка:
- HOLD не показывает confirmation line
- BUY показывает `⏳ Подтверждение`
- SELL показывает `⏳ Подтверждение`
- READY показывает `✅ Подтверждение · готово`
- READY не появляется мгновенно
- READY требует repeats
- READY требует удержания сигнала
- HOLD сбрасывает confirmation progress
---
# Результат
Этап завершил переход от:
```text
repeat-based signal confirmation
```
к:
```text
stateful runtime confirmation engine
```
Теперь AutoTrade анализирует не только факт сигнала, но и устойчивость направления во времени.