07.4.4.1.9.2 Signal Confirmation Runtime
This commit is contained in:
452
docs/stages/stage-07_4_4_1_9_1-market_semantic_runtime_layer.md
Normal file
452
docs/stages/stage-07_4_4_1_9_1-market_semantic_runtime_layer.md
Normal 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
|
||||
212
docs/stages/stage-07_4_4_1_9_2-signal_confirmation_runtime.md
Normal file
212
docs/stages/stage-07_4_4_1_9_2-signal_confirmation_runtime.md
Normal 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 анализирует не только факт сигнала, но и устойчивость направления во времени.
|
||||
Reference in New Issue
Block a user