# 07.4.3.14 — Auto Trading UI, Realistic Pricing & Debug Live Tools

## Цель

Привести экран автоторговли к более понятному trading-terminal формату и сделать расчёты paper execution ближе к реальности:

- обновить UI блока автоторговли
- разделить состояния HOLD / BUY / SELL / READY
- использовать bid / ask цены для входа и выхода
- улучшить отображение позиции
- добавить live debug-команды для проверки paper execution
- подготовить основу для последующей изоляции debug-режима

---

## Что было раньше

Ранее экран `Автоторговля — Работает` показывал технические данные:

- `HOLD ×N`
- `Зарезервировано · $ 0`
- `P&L · $ 0`
- confidence даже для HOLD
- расчёты от одной цены `lastPrice`

Это создавало лишний шум и не отражало реальную механику исполнения.

Также debug-команды смешивали UI-проверку и execution-проверку.

---

## Что реализовано

## 1. Новый формат экрана RUNNING

Для состояния без позиции экран стал компактнее.

Было:

```text
📡 Ожидание сигнала
🟡 HOLD ×18
Уверенность · 0.00
```

Стало:

```text
Сигнал 🟡 HOLD · 5м 35с
```

Для HOLD больше не отображается confidence, так как он не несёт торгового смысла.

---

## 2. BUY / SELL signal UI

Для BUY:

```text
Сигнал 🟢 BUY · 12с
Уверенность · 0.74
```

После подтверждения:

```text
Сигнал 🟢 BUY · READY
Уверенность · 0.88
```

Для SELL:

```text
Сигнал 🔴 SELL · 9с
Уверенность · 0.71
```

После подтверждения:

```text
Сигнал 🔴 SELL · READY
Уверенность · 0.91
```

---

## 3. Direction-aware order block

Для HOLD:

```text
BTC · Trend · x2
Цена · $ ...
```

Для BUY:

```text
🟢 BTC · Trend · LONG x2
Цена входа · $ ...
```

Для SELL:

```text
🔴 BTC · Trend · SHORT x2
Цена входа · $ ...
```

---

## 4. Убран UI-шум без открытой позиции

Если позиция не открыта, экран больше не показывает:

```text
Зарезервировано · $ 0
P&L · $ 0
```

Эти строки остаются только для активной позиции.

---

## 5. Realistic bid / ask pricing в UI

UI теперь использует market snapshot:

```python
ExchangeService().get_market_snapshot(symbol)
```

Правила:

```text
HOLD          → last_price
BUY / LONG    → ask_price
SELL / SHORT  → bid_price
```

Если bid / ask недоступны, используется fallback на `last_price`.

---

## 6. TREND strategy переведена на mid price

Стратегия TREND теперь анализирует рынок по:

```text
mid_price = (bid_price + ask_price) / 2
```

Fallback:

```text
last_price
```

Это делает сигнал более стабильным и не искажает анализ spread-ом.

---

## 7. Realistic paper execution pricing

ExecutionEngine теперь использует более реалистичные цены:

```text
LONG entry   → ask_price
SHORT entry  → bid_price
LONG exit    → bid_price
SHORT exit   → ask_price
```

Flip теперь состоит из:

```text
exit текущей позиции по стороне
+
entry новой позиции по стороне
```

---

## 8. Own funds / margin calculation fix

Исправлен расчёт собственных средств:

```text
own_funds = position_notional / leverage
```

А не через статичный процент от allocated balance.

Также size округляется вниз, чтобы reserved margin не превышал лимит.

---

## 9. Signal duration

Добавлена поддержка реального времени удержания сигнала через:

```python
signal_started_at
```

Если timestamp недоступен, используется fallback:

```text
last_signal_repeat_count × 5 sec
```

---

## 10. Debug UI states

Добавлены команды для проверки UI-состояний:

```text
/debug_auto hold 335
/debug_auto buy 12 0.74
/debug_auto buy_ready 0.88
/debug_auto sell 9 0.71
/debug_auto sell_ready 0.91
/debug_auto long
/debug_auto short
/debug_auto reset
/debug_auto state
```

---

## 11. Debug paper execution

Добавлены команды разового paper execution:

```text
/debug_exec buy
/debug_exec sell
/debug_exec flip
/debug_exec flip_buy
/debug_exec flip_sell
/debug_exec close
/debug_exec state
```

`/debug_exec flip` автоматически определяет текущую позицию:

```text
LONG  → SELL / SHORT
SHORT → BUY / LONG
```

---

## 12. Debug live paper test

Добавлен live debug режим:

```text
/debug_live buy
/debug_live sell
/debug_live flip
/debug_live close
/debug_live stop
/debug_live state
```

Этот режим открывает paper-позицию и запускает обычный AutoTradeRunner, чтобы проверить:

- мониторинг рынка
- обновление UI
- P&L
- SL / TP / ML
- flip по стратегии
- execution alerts

---

## 13. Auto screen runner diagnostics

В debug state добавлена диагностика AutoTradeRunner:

```text
Screen
Chat ID
Message ID
Has bot
Has render_text
Task running
```

Это помогает быстро понять, зарегистрирован ли экран автоторговли для live refresh.

---

## Архитектурный результат

Теперь:

- экран RUNNING стал компактнее и понятнее
- HOLD не перегружает UI
- BUY / SELL отображают направление LONG / SHORT
- расчёты preview используют bid / ask
- strategy анализирует mid price
- paper execution использует bid / ask для входа и выхода
- active position screen обновляется live
- debug-команды позволяют тестировать UI и execution быстрее

---

## Ограничения текущей реализации

Текущий debug live режим пока не изолирован.

Он вмешивается в реальные runtime-компоненты:

```text
AutoTradeState
ExecutionEngine._position
AutoTradeRunner
EventBus
Auto screen
```

Это удобно для integration testing, но не является полноценным sandbox.

---

## Следующий этап

07.4.3.15 — Isolated Debug Runtime

Планируется:

- отделить debug runtime от обычной автоторговли
- создать отдельный DebugAutoState
- создать отдельный DebugRunner
- создать отдельный DebugExecutionEngine
- создать отдельный debug screen
- исключить влияние debug-команд на AutoTradeService
- маркировать debug-логи и уведомления как `[DEBUG]`
- оставить `/debug_live` только как временный legacy integration test
