# 07.4.3.19.3 — Strategy Noise Filter & Signal Intent Layer

## Статус

Этап завершён.

## Цель этапа

Цель этапа — снизить шум от краткосрочных стратегических сигналов и добавить смысловой слой signal intent, чтобы журнал фиксировал не каждый сырой BUY / SELL / HOLD, а только полезные runtime-переходы.

До этого этапа журнал уже был очищен от UI refresh spam, но оставались частые записи вида:

- BUY завершился без серии
- SELL завершился без серии
- 21 HOLD подряд до смены на SELL

Такие записи были полезны на этапе разработки, но плохо подходили для runtime-аудита.

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

### 1. Убрано журналирование одиночных BUY / SELL

Одиночные BUY / SELL, которые не дошли до серии и не стали READY-сигналом, больше не пишутся в журнал как полезные события.

Это снижает шум от микросигналов SCALP-стратегии, когда стратегия на один цикл выдаёт BUY или SELL, а затем возвращается в HOLD.

### 2. HOLD-серии теперь логируются по длительности

Сводка HOLD теперь формируется по времени, а не по количеству повторов.

Новый формат сообщения:

- 🟡 HOLD 5м 36с завершён сигналом SELL

Такой формат понятнее, потому что не зависит напрямую от внутреннего интервала цикла.

### 3. Добавлен signal intent

В payload сигнальных событий добавлен смысловой intent:

- ENTRY_CANDIDATE
- REVERSAL_CANDIDATE
- REINFORCE_POSITION
- HOLD_MARKET
- NOISE

Intent рассчитывается с учётом текущей позиции.

### 4. Добавлена position-aware интерпретация сигналов

Новая логика интерпретации:

- LONG + BUY → REINFORCE_POSITION
- SHORT + SELL → REINFORCE_POSITION
- LONG + SELL → REVERSAL_CANDIDATE
- SHORT + BUY → REVERSAL_CANDIDATE
- NONE + BUY / SELL → ENTRY_CANDIDATE
- HOLD → HOLD_MARKET

Это подготавливает систему к следующему уровню фильтрации стратегий и execution-логики.

### 5. Добавлено отдельное событие готового сигнала

Когда сигнал доходит до READY, в журнал пишется отдельное событие:

- auto_signal_ready

В payload добавляются:

- signal
- signal_intent
- confidence
- repeat_count
- position_side
- decision_status
- strategy
- symbol

## Что больше не пишется в журнал

Из журнала убраны как регулярные runtime-события:

- одиночный BUY без серии
- одиночный SELL без серии
- BUY завершился без серии
- SELL завершился без серии
- HOLD → HOLD

Эти события могут быть возвращены позже как debug-level telemetry, но не должны попадать в основной journal-аудит.

## Что остаётся в журнале

После этапа журнал должен содержать только полезные signal/runtime события:

- HOLD duration summary
- READY signal
- execution events
- blocked flip
- notification errors
- market/runtime events
- journal/system critical events

## Основной изменённый файл

- app/src/trading/auto/service.py

## Проверка

После правок нужно выполнить:

    python -m compileall src
    python -m src.main

После запуска проверить журнал:

1. В журнале больше нет частых записей «BUY завершился без серии» и «SELL завершился без серии».
2. HOLD-серии отображаются по времени.
3. READY-сигналы содержат signal_intent в payload.
4. Execution events продолжают приходить как раньше.
5. Flip protection из этапа 07.4.3.19.1 не сломан.

## Итог

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