07.4.4.1.3 — Journal Runtime Cleanup & Event Titles Layer
This commit is contained in:
@@ -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.
|
||||
Reference in New Issue
Block a user