07.4.4.1.3 — Journal Runtime Cleanup & Event Titles Layer

This commit is contained in:
2026-05-11 10:20:21 +03:00
parent c07a1a4dff
commit b5d931bbb7
13 changed files with 629 additions and 127 deletions

View File

@@ -0,0 +1,381 @@
# 07.4.4.1.3 — Journal Runtime Cleanup & Event Titles Layer
## Цель этапа
Привести журнал runtime-событий к единому, читаемому и пригодному для анализа виду.
После этапов Market State Engine и Market State Journal Events журнал уже начал фиксировать состояние рынка, сигналы, настройки и runtime-события. Но в экспорте и UI оставались проблемы:
- заголовки часто дублировали сообщения;
- часть сообщений была слишком длинной;
- часть event_type отображалась технически;
- market_state_changed и market_trend_changed часто писали один и тот же смысл;
- в экспорт попадали эмодзи;
- в сообщениях встречались лишние технические маркеры вроде [AUTO];
- торговые инструменты отображались в сыром виде, например BTC/USD_LEVERAGE;
- EVENT_TITLES дублировались в разных файлах.
Этап 07.4.4.1.3 сделал журнал более чистым, компактным и пригодным для дальнейшей аналитики.
---
# Что было реализовано
## 1. Унифицирована логика заголовков журнала
В журнале была закреплена новая модель:
- `event_type` — технический код события;
- `Заголовок` — короткая сущность события;
- `Сообщение` — конкретное действие или факт.
Теперь заголовок больше не повторяет текст сообщения.
Пример итогового формата:
- `auto_settings_updated``Автоторговля``Плечо изменено: x3.`
- `risk_settings_updated``Защита``Параметры защиты позиции изменены: SL=1%, TP=1%, ML=off.`
- `market_state_changed``Рынок``Состояние рынка изменено: снижение.`
- `market_stream_connected``Рынок``Поток рыночных данных подключён.`
Такой формат стал понятнее и для пользователя, и для будущих фильтров / поиска / аналитики.
---
## 2. EVENT_TITLES подготовлены к централизации
Была согласована новая компактная карта заголовков событий.
Ключевые группы:
- `Сигнал`
- `Позиция`
- `Автоторговля`
- `Защита`
- `Рынок`
- `Журнал`
- `Уведомление`
- `Приложение`
- `Система`
- `Портфель`
- `Биржа`
- `Баланс`
Также принято архитектурное решение вынести `EVENT_TITLES` в отдельный общий файл:
```text
app/src/core/event_titles.py
```
Это правильнее, чем хранить заголовки в `trading/journal`, потому что события относятся не только к торговле, но и к системе, журналу, рынку, уведомлениям, портфелю и бирже.
---
## 3. Убрано дублирование market_state_changed и market_trend_changed
До правки одно изменение рынка могло писать сразу два события:
- `market_state_changed` — «Рынок перешёл в рост»
- `market_trend_changed` — «Направление рынка изменилось на рост»
Для пользователя это выглядело как дублирование.
Теперь `market_trend_changed` исключён из обычного журналирования, потому что направление уже включено в market state:
- `TREND_UP` уже означает рост;
- `TREND_DOWN` уже означает снижение;
- `RANGE` уже означает отсутствие выраженного направления.
В журнале остаётся одно основное событие:
```text
market_state_changed → Рынок → Состояние рынка изменено: снижение.
```
Это сделало market-analysis feed значительно чище.
---
## 4. Аналитические market-сообщения приведены к единому стилю
Market-analysis сообщения были переписаны в одинаковом формате:
- `Состояние рынка изменено: рост.`
- `Состояние рынка изменено: снижение.`
- `Состояние рынка изменено: нет выраженного направления.`
- `Состояние рынка изменено: высокая волатильность.`
- `Состояние рынка изменено: низкая активность.`
Сообщения волатильности также приведены к компактному виду:
- `Волатильность изменена: низкая.`
- `Волатильность изменена: нормальная.`
- `Волатильность изменена: высокая.`
Это важно для дальнейшей аналитики: сообщения теперь имеют одинаковую структуру и легче читаются в CSV / XLSX.
---
## 5. Market trend оставлен в payload, но убран из отдельного журнала
Поле `market_trend` не удалялось из состояния и payload.
Оно по-прежнему может использоваться:
- в UI;
- в стратегии;
- в debug;
- в будущей аналитике;
- в explainability layer.
Но отдельное событие `market_trend_changed` больше не нужно для обычного журнала, потому что оно дублировало `market_state_changed`.
Итог:
- данные не потеряны;
- журнал стал чище;
- future analytics сохранила нужный контекст.
---
## 6. Улучшено отображение состояния рынка в Auto UI
Формулировка `Рынок · Падение` была признана неоднозначной.
Она могла восприниматься как «цена прямо сейчас падает», хотя фактически отображался более широкий режим рынка по анализатору.
Поэтому UI wording был уточнён:
- `TREND_UP``Тренд · Восходящий`
- `TREND_DOWN``Тренд · Нисходящий`
- `RANGE``Тренд · Нет выраженного направления`
- `HIGH_VOLATILITY``Рынок · Высокая волатильность`
- `LOW_VOLATILITY``Рынок · Низкая активность`
- `UNKNOWN``Рынок · Идёт анализ`
Это снизило риск неправильной интерпретации графика пользователем.
---
## 7. Сообщения настроек автоторговли приведены к единому стилю
Сообщения настроек были сокращены и стандартизированы.
Теперь используется формат:
- `Стратегия изменена: TREND.`
- `Актив изменён: BTC.`
- `Риск на сделку изменён: 1%.`
- `Плечо изменено: x3.`
- `Лимит на сделку изменён: 50%.`
Ранее сообщения были длиннее и местами дублировали заголовок.
---
## 8. Символы активов очищены для journal messages
В пользовательских сообщениях журнала убраны технические торговые символы вида:
```text
BTC/USD_LEVERAGE
ETH/USD_LEVERAGE
LTC/USD_LEVERAGE
XRP/USD_LEVERAGE
```
Теперь в сообщениях отображаются короткие имена активов:
```text
BTC
ETH
LTC
XRP
```
Пример:
```text
[DEMO] Актив изменён: BTC.
```
В payload при этом сохраняется полный технический symbol, поэтому аналитика и отладка не теряют точность.
---
## 9. Risk-control logging приведён к единому формату
Сообщение `Параметры защиты позиции обновлены` было заменено на более информативное:
```text
Параметры защиты позиции изменены: SL=1%, TP=1%, ML=25 USD.
```
Теперь в одном сообщении видно состояние всех ключевых protective rules:
- Stop Loss;
- Take Profit;
- Max Loss.
Это удобно для просмотра истории настроек в журнале и экспорте.
---
## 10. Уведомления приведены к единой модели событий
Notification layer был очищен от legacy event_type.
Теперь используется единая схема:
- `notification_sent`
- `notification_error`
После успешной отправки Telegram-уведомления добавлено логирование:
```text
Telegram-уведомление отправлено.
```
Ошибки отправки также пишутся в один event_type `notification_error`, а детали уходят в payload.
---
## 11. Убран лишний runtime-префикс [AUTO]
Сообщения market runtime раньше выглядели так:
```text
[DEMO] [AUTO] Поток рыночных данных подключён.
```
Префикс `[AUTO]` был признан избыточным, потому что контекст уже хранится в колонках `Экран`, `Действие` и payload.
Теперь сообщение выглядит чище:
```text
[DEMO] Поток рыночных данных подключён.
```
---
## 12. Экспорт очищен от эмодзи
CSV / XLSX экспорт был очищен от эмодзи.
Эмодзи могут быть удобны в Telegram UI, но в экспортных файлах они мешают:
- сортировке;
- фильтрации;
- чтению в Excel;
- будущей BI-аналитике;
- машинной обработке.
Теперь экспорт содержит чистые текстовые значения.
---
# Изменения в архитектуре
## Core Layer
Подготовлено выделение общего файла:
```text
src/core/event_titles.py
```
Он должен стать единым источником event-title mapping для:
- journal UI;
- CSV export;
- XLSX export;
- будущих filters/search layer.
---
## Journal UI Layer
`journal_ui.py` подготовлен к использованию централизованного `event_title()`.
Локальный `EVENT_TITLES` больше не должен дублироваться после вынесения в core.
---
## Journal Export Layer
`exporter.py` подготовлен к использованию того же `event_title()`.
Это гарантирует, что UI и экспорт будут показывать одинаковые заголовки.
---
## Auto Runtime Layer
В `AutoTradeService` улучшена логика market logging:
- убрано избыточное `market_trend_changed`;
- сохранено `market_state_changed`;
- сохранено `market_volatility_changed`;
- market trend оставлен в payload;
- сообщения приведены к единому стилю.
---
## Market UI Layer
Auto UI стал точнее отображать market state:
- вместо «Падение» используется «Нисходящий тренд»;
- вместо «Рост» используется «Восходящий тренд»;
- вместо «Без направления» используется «Нет выраженного направления».
---
# Что изменилось для пользователя
Журнал стал выглядеть как нормальная событийная лента:
```text
Рынок | Состояние рынка изменено: снижение.
Рынок | Волатильность изменена: нормальная.
Автоторговля | Плечо изменено: x3.
Защита | Параметры защиты позиции изменены: SL=1%, TP=1%, ML=off.
Журнал | Журнал очищен.
```
Пользователь теперь быстрее понимает:
- что изменилось;
- где изменилось;
- относится ли событие к рынку, настройкам, защите, позиции или журналу;
- какой был конкретный результат.
---
# Что подготовлено дальше
Этап подготовил основу для следующих работ:
- централизованный `event_titles.py`;
- фильтры журнала по сущностям;
- поиск по event_type;
- группировка событий по доменам;
- журнал действий пользователя;
- market transition statistics;
- аналитика частоты смены market state;
- AI-комментарии к журналу;
- подготовка runtime-журнала к реальной торговле.
---
# Итог этапа
Этап 07.4.4.1.3 завершил важную часть подготовки журнала к реальной эксплуатации.
Журнал больше не выглядит как набор технических сообщений. Он стал ближе к операционной ленте автоторговли, где каждая строка имеет понятную структуру:
```text
что произошло → где произошло → конкретное действие
```
Это важный шаг перед переходом к более серьёзной аналитике стратегий и дальнейшей подготовке к real trading.