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