Stage 07.4.3.1 — trend strategy stabilization

This commit is contained in:
2026-05-01 18:25:27 +03:00
parent ec8e53c416
commit 38c8686a9b
8 changed files with 735 additions and 49 deletions

View File

@@ -88,6 +88,7 @@
✔ стратегия
✔ риск
✔ символ
✔ leverage (default x2)
## 07.3 — Analysis Cycle
✔ run_cycle()
@@ -122,8 +123,23 @@
### 07.4.2
✔ Strategy Registry
### 07.4.3
⏳ Trend Strategy
### 07.4.3 — Trend Strategy
✔ signal generation
✔ repeat confirmation logic
✔ confidence scoring
✔ UI integration
### 07.4.3.1 — UI Optimization
✔ compact auto screen
✔ state-based rendering (OFF / RUNNING / OBSERVING)
✔ minimal trading layout
✔ duplicate info removal
### 07.4.3.2 — Engine Decoupling (NEXT)
⏳ split analysis / UI refresh
⏳ fast price polling (1s)
⏳ slow UI updates (event-driven / 60s)
⏳ anti-flood protection
### 07.4.4
⏳ Grid Strategy
@@ -166,5 +182,5 @@
## Текущий статус проекта
👉 Завершён: 07.4.1
👉 Следующий шаг: 07.4.2 Strategy Registry
👉 Завершён: 07.4.3.1
👉 Следующий шаг: 07.4.3.2 — Engine Decoupling + Price Polling

View File

@@ -16,7 +16,7 @@
✔ стратегия
✔ риск
✔ символ
presets UI
leverage (default x2)
---
@@ -86,8 +86,38 @@
### 07.4.2
✔ registry стратегий
### 07.4.3
⏳ Trend strategy
---
### 07.4.3 — Trend Strategy
✔ генерация сигналов
✔ repeat tracking
✔ confidence logic
✔ decision state (WAITING / CONFIRMING / READY / BLOCKED)
---
### 07.4.3.1 — UI Optimization
✔ компактный экран автоторговли
✔ разделение OFF / ACTIVE / OBSERVING
✔ убраны дубли (WAITING / HOLD и т.д.)
✔ оптимизация под mobile
---
### 07.4.3.2 — Engine Decoupling (NEXT)
⏳ разделение:
- analysis loop (частый)
- UI loop (редкий)
⏳ price polling:
- быстрый (1s)
- независимый от UI
⏳ Telegram:
- обновление только при изменении состояния
- защита от flood control
---
### 07.4.4
⏳ Grid strategy
@@ -99,5 +129,5 @@
## Текущий статус
👉 Завершён: 07.4.1
👉 Следующий шаг: 07.4.2
👉 Завершён: 07.4.3.1
👉 Следующий шаг: 07.4.3.2 — Decoupling + Price Polling

View File

@@ -0,0 +1,289 @@
# 07.4.3.1 — Trend Strategy Stabilization
## Цель этапа
Стабилизировать сигналы автоторговли перед будущим execution-слоем.
На этапе 07.4.3 бот уже начал генерировать реальные BUY / SELL / HOLD сигналы. На этапе 07.4.3.1 добавлена логика, которая отделяет сырой сигнал стратегии от торгового решения.
Главная цель:
- не реагировать на одиночные шумовые сигналы;
- подтверждать BUY / SELL через серию повторов;
- учитывать confidence;
- показывать пользователю не только сигнал, но и статус решения;
- подготовить систему к безопасному execution.
---
## Что реализовано
### 1. Decision state
В состояние автоторговли добавлены поля торгового решения:
- decision_status;
- decision_reason;
- is_signal_confirmed;
- is_signal_ready.
Статусы решения:
- WAITING — нет торгового направления;
- CONFIRMING — сигнал есть, но ещё подтверждается;
- READY — сигнал подтверждён и готов к будущему execution;
- BLOCKED — сигнал подтверждён, но заблокирован условиями фильтра.
---
### 2. Подтверждение сигнала через повторы
BUY / SELL больше не считаются готовыми сразу после первого появления.
Текущая логика:
- BUY / SELL 1 раз → CONFIRMING;
- BUY / SELL 2 раза → CONFIRMING;
- BUY / SELL 3 раза → потенциально READY;
- HOLD → WAITING.
Текущий порог подтверждения:
- 3 одинаковых сигнала подряд.
---
### 3. Фильтр confidence
Даже подтверждённый сигнал не становится READY, если confidence ниже порога.
Текущий порог:
- confidence >= 0.70.
Если сигнал повторился нужное количество раз, но confidence ниже 0.70, решение получает статус BLOCKED.
---
### 4. Разделение raw signal и decision
Сигнал стратегии и торговое решение теперь разделены.
Пример:
- raw signal: BUY;
- repeat count: 2;
- confidence: 0.85;
- decision: CONFIRMING.
Это важно, потому что стратегия может видеть направление, но execution ещё не должен открывать сделку.
---
### 5. Улучшение экрана автоторговли
Экран автоторговли был подготовлен под реальную торговлю и стал компактнее.
Согласованный формат для выключенной автоторговли без полной настройки:
```text
🤖 Автоторговля
🔸 DEMO аккаунт
⚪ Выключена
⚠️ Не настроена
Настрой параметры
```
Согласованный формат для выключенной автоторговли с настроенными параметрами:
```text
🤖 Автоторговля
🔸 DEMO аккаунт
⚪ Выключена
BTC / USD · TREND · x2
Risk: 0.5%
```
Согласованный формат для включенной автоторговли:
```text
🤖 Автоторговля
🔸 DEMO аккаунт
🟢 Активна
BTC / USD · TREND · x2
🟡 HOLD ×12 · WAITING
Pos: — | PnL: —
Risk: 0.5%
```
---
### 6. Форматирование инструмента для UI
Биржа возвращает инструмент в формате:
```text
BTC/USD_LEVERAGE
```
В UI отображается человекочитаемый формат:
```text
BTC / USD
```
---
### 7. Плечо в настройках автоторговли
Добавлено поле leverage в состояние автоторговли.
Значение по умолчанию:
- x2.
Плечо вынесено в настройки автоторговли.
Доступные варианты:
- x1;
- x2;
- x3;
- x5;
- x10;
- x20.
В UI плечо отображается компактно:
```text
x2
x5
x20
```
---
### 8. Подготовка execution-полей
В AutoTradeState добавлены поля под будущий execution:
- position_side;
- entry_price;
- position_size;
- unrealized_pnl_usd;
- max_drawdown_usd;
- leverage.
Пока execution не подключён, эти поля отображаются как заглушки.
---
### 9. Защита от лишних UI-обновлений
Выявлена проблема Telegram flood control при частых edit_message_text.
Причина:
- анализ и обновление Telegram UI пока работают слишком близко друг к другу;
- live-обновления могут слишком часто редактировать одно и то же сообщение.
Зафиксировано решение на следующий этап:
- развязать частоту анализа и частоту Telegram UI;
- обновлять UI редко или при важном изменении;
- вынести быстрый price polling в отдельный слой.
---
## Изменённые файлы
```text
app/src/trading/auto/state.py
app/src/trading/auto/service.py
app/src/telegram/handlers/auto.py
app/src/telegram/handlers/system.py
app/src/trading/auto/runner.py
```
---
## Поведение после этапа
### OFF, не настроено
Пользователь видит, что автоторговля выключена и параметры ещё не заданы.
### OFF, настроено
Пользователь видит текущий торговый контекст:
- инструмент;
- стратегию;
- плечо;
- риск.
### OBSERVING
Бот анализирует рынок, считает повторы сигналов, confidence и decision_status, но не открывает сделки.
### RUNNING
Бот анализирует рынок и показывает готовность сигнала к будущему execution. Реальное исполнение сделок пока не подключено.
---
## Ограничения этапа
Пока не реализовано:
- отдельный быстрый price polling;
- отдельная частота анализа;
- отдельная частота Telegram UI;
- execution;
- реальные позиции;
- реальные заявки;
- риск-менеджмент исполнения.
---
## Следующий этап
### 07.4.3.2 — Analysis/UI Decoupling + Fast Price Polling
План следующего этапа:
- разделить частоту анализа и частоту Telegram UI;
- получать цену чаще, например раз в 1 секунду;
- запускать стратегию отдельно от UI;
- обновлять Telegram не чаще заданного интервала;
- делать force update только при важных изменениях:
- смена signal;
- смена decision_status;
- CONFIRMING → READY;
- READY → BLOCKED;
- RUNNING → OFF;
- ошибка / восстановление.
---
## Итог
На этапе 07.4.3.1 автоторговля получила слой стабилизации сигналов.
Система теперь различает:
- сырой сигнал стратегии;
- подтверждённый сигнал;
- готовность к будущему исполнению;
- заблокированный сигнал;
- отсутствие торгового направления.
Это ключевой шаг перед подключением execution.