# 07.4.3.19.2 — Journal Noise Reduction & Position-aware Signal Logging

## Статус

Этап: `07.4.3.19.2`  
Название: `Journal Noise Reduction & Position-aware Signal Logging`  
Состояние: подготовлено к runtime-проверке после внедрения правок.

## Цель этапа

Сократить технический шум в журнале и убрать повторяющиеся уведомления о сильных сигналах, которые совпадают с уже открытой позицией.

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

- `auto_screen_refresh_skipped`
- `auto_screen_refreshed`
- повторные strong signal alerts при уже открытой позиции

После этапа журнал должен содержать меньше технических записей и больше полезных runtime-событий.

## Что изменено

### 1. Отключены шумные UI refresh-логи

В `AutoTradeRunner` отключено журналирование обычных успешных и пропущенных обновлений экрана:

- `auto_screen_refresh_skipped`
- `auto_screen_refreshed`

Логика обновления экрана не меняется. Экран продолжает обновляться, но journal больше не заполняется техническими refresh-событиями.

Ошибки refresh остаются в журнале:

- `auto_screen_refresh_error`
- `telegram_retry_after`
- `telegram_bad_request`
- `unexpected_refresh_error`

### 2. Добавлено подавление сигналов, совпадающих с открытой позицией

Добавлена position-aware проверка перед публикацией strong signal RuntimeEvent.

Теперь:

- если открыта `LONG` позиция и приходит `BUY`, уведомление подавляется;
- если открыта `SHORT` позиция и приходит `SELL`, уведомление подавляется;
- противоположные сигналы не подавляются, так как они могут быть reversal / flip candidate.

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

### 3. Добавлен throttled summary в journal

Для подавленных aligned-сигналов добавлено редкое summary-событие:

- `auto_position_aligned_signal_suppressed`

Оно пишется не чаще одного раза в 15 минут для связки:

- position side
- symbol
- strategy
- signal

Это позволяет видеть, что стратегия продолжает выдавать сигналы по направлению позиции, но без лавины одинаковых записей.

## Новое поведение

### Если позиции нет

Сильный сигнал продолжает проходить в RuntimeEvent pipeline:

- `AUTO_SIGNAL_READY`
- Telegram notification
- journal notification logs

### Если открыта LONG позиция

`BUY` сигнал:

- не отправляет повторное strong signal уведомление;
- не создаёт лишний RuntimeEvent notification;
- пишет summary `auto_position_aligned_signal_suppressed` максимум раз в 15 минут.

`SELL` сигнал:

- не подавляется;
- может быть обработан как reversal / flip candidate;
- дальше проверяется execution-защитами из `07.4.3.19.1`.

### Если открыта SHORT позиция

`SELL` сигнал:

- не отправляет повторное strong signal уведомление;
- не создаёт лишний RuntimeEvent notification;
- пишет summary `auto_position_aligned_signal_suppressed` максимум раз в 15 минут.

`BUY` сигнал:

- не подавляется;
- может быть обработан как reversal / flip candidate;
- дальше проверяется execution-защитами из `07.4.3.19.1`.

## Какие файлы затронуты

Основной файл:

- `app/src/trading/auto/runner.py`

Используется существующая инфраструктура:

- `RuntimeEventPublisher`
- `RuntimeEventType.AUTO_SIGNAL_READY`
- `JournalService`
- `NotificationTargetRegistry`

## Что проверить после запуска

### 1. Compile check

`python -m compileall src`

### 2. Проверить отсутствие refresh-spam

После запуска в journal больше не должны появляться:

- `auto_screen_refresh_skipped`
- `auto_screen_refreshed`

### 3. Проверить position-aligned suppression

После открытия позиции:

- `LONG + BUY` не должен слать повторные Telegram strong signal alerts;
- `SHORT + SELL` не должен слать повторные Telegram strong signal alerts;
- в journal должен появляться `auto_position_aligned_signal_suppressed` не чаще одного раза в 15 минут.

### 4. Проверить reversal-кандидаты

Противоположные сигналы должны продолжать проходить:

- `LONG + SELL`
- `SHORT + BUY`

Они должны идти дальше в execution pipeline и проверяться flip-защитами.

## Ожидаемый эффект

После этапа journal должен стать заметно чище:

- меньше технического UI noise;
- меньше повторных signal notification events;
- меньше Telegram spam;
- лучше видны реальные execution-события:
  - `paper_position_opened`
  - `paper_position_closed`
  - `paper_position_flipped`
  - `paper_flip_blocked`
  - `auto_position_aligned_signal_suppressed`

## Следующий рекомендуемый этап

`07.4.3.19.3 — Strategy Noise Filter & Signal Intent Layer`

Цель следующего этапа — не только подавлять лишние уведомления, но и классифицировать смысл сигнала относительно позиции:

- `ENTRY`
- `REINFORCE`
- `REVERSAL_CANDIDATE`
- `FLIP_ALLOWED`
- `IGNORE`
