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

@@ -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.