Stage 07.4.4.1.15 — Runtime Payload Builders & Auto Runtime Refactoring
This commit is contained in:
495
docs/architecture/auto_refactoring.md
Normal file
495
docs/architecture/auto_refactoring.md
Normal file
@@ -0,0 +1,495 @@
|
||||
# Auto refactoring roadmap
|
||||
|
||||
Цель: безопасный поэтапный аудит и рефакторинг `app/src/trading/auto`.
|
||||
|
||||
Принципы:
|
||||
|
||||
- сначала аудит;
|
||||
- без изменения торговой логики;
|
||||
- без изменения AutoTradeState;
|
||||
- без изменения ExecutionEngine;
|
||||
- без изменения payload;
|
||||
- без изменения EventBus / JournalService;
|
||||
- каждый шаг проверяется перезапуском бота.
|
||||
|
||||
## Файлы
|
||||
|
||||
| Файл | Статус | Комментарий |
|
||||
|---|---|---|
|
||||
| __init__.py | Not audited | |
|
||||
| service.py | Not audited | |
|
||||
| autonomous_management.py | Not audited | |
|
||||
| execution_semantic.py | Not audited | |
|
||||
| market_runtime.py | Not audited | |
|
||||
| position_health.py | Not audited | |
|
||||
| execution_quality.py | Not audited | |
|
||||
| position_semantics.py | Not audited | |
|
||||
| auto_lifecycle.py | Not audited | |
|
||||
| runner.py | Not audited | |
|
||||
| signal_runtime.py | Not audited | |
|
||||
| state.py | Not audited | |
|
||||
|
||||
## Порядок аудита
|
||||
|
||||
1. service.py
|
||||
2. autonomous_management.py
|
||||
3. execution_semantic.py
|
||||
4. market_runtime.py
|
||||
5. position_health.py
|
||||
6. execution_quality.py
|
||||
7. position_semantics.py
|
||||
8. auto_lifecycle.py
|
||||
9. runner.py
|
||||
10. signal_runtime.py
|
||||
11. state.py
|
||||
|
||||
## Правила аудита
|
||||
|
||||
Для каждого файла фиксируем:
|
||||
|
||||
- назначение;
|
||||
- размер и сложность;
|
||||
- зависимости;
|
||||
- что хорошо;
|
||||
- что настораживает;
|
||||
- безопасные улучшения;
|
||||
- что нельзя менять;
|
||||
- рекомендуемый следующий шаг.
|
||||
|
||||
## service.py
|
||||
|
||||
Статус: Completed (без изменений)
|
||||
|
||||
Назначение:
|
||||
- Фасад AutoTradeService.
|
||||
- Хранит единый runtime AutoTradeState.
|
||||
- Хранит class-level настройки auto loop, signal confirmation, TTL, execution quality и spread thresholds.
|
||||
|
||||
Размер:
|
||||
- Небольшой/средний.
|
||||
|
||||
Связность:
|
||||
- Зависит от AutoLifecycleMixin и AutoTradeState.
|
||||
- Не содержит прямой торговой логики.
|
||||
|
||||
Что хорошо:
|
||||
- Нет JournalService/EventBus/payload.
|
||||
- Нет execution-алгоритмов.
|
||||
- Настройки читаются централизованно.
|
||||
|
||||
Что настораживает:
|
||||
- Много class-level state.
|
||||
- Spread thresholds находятся прямо в service.py.
|
||||
|
||||
Безопасные улучшения:
|
||||
- Сейчас не требуются.
|
||||
|
||||
Что нельзя менять:
|
||||
- Значения thresholds.
|
||||
- Class-level state.
|
||||
- Названия runtime-полей.
|
||||
- Наследование от AutoLifecycleMixin.
|
||||
|
||||
Итог:
|
||||
Файл выполняет роль конфигурационного фасада. Рефакторинг на текущем этапе не нужен.
|
||||
|
||||
## autonomous_management.py
|
||||
|
||||
Статус: Completed after minor cleanup
|
||||
|
||||
Назначение:
|
||||
- Синхронизация autonomous trade management state.
|
||||
- Определяет autonomous action: HOLD / WATCH / PROTECT / REDUCE / EXIT.
|
||||
- Обновляет autonomous required-флаги.
|
||||
|
||||
Размер:
|
||||
- Небольшой.
|
||||
|
||||
Связность:
|
||||
- Зависит от AutoTradeState и execution.constants.
|
||||
- Не вызывает ExecutionEngine напрямую.
|
||||
|
||||
Что хорошо:
|
||||
- Один понятный метод.
|
||||
- Нет JournalService/EventBus/payload.
|
||||
- Нет прямого закрытия позиции.
|
||||
- Используются константы.
|
||||
|
||||
Безопасные улучшения:
|
||||
- Только косметика форматирования.
|
||||
|
||||
Что нельзя менять:
|
||||
- Порядок выбора autonomous action.
|
||||
- Thresholds confidence.
|
||||
- Логику aggressive exit escalation.
|
||||
- Сброс autonomous-state при отсутствии позиции.
|
||||
|
||||
Итог:
|
||||
Файл чистый. Логических правок не требуется.
|
||||
|
||||
## execution_semantic.py
|
||||
|
||||
Статус: Completed (без изменений)
|
||||
|
||||
Назначение:
|
||||
- Синхронизация semantic-статуса execution слоя для UI.
|
||||
- Формирует execution_semantic_status/message/reason.
|
||||
- Преобразует технические причины блокировки в человекочитаемые UI-сообщения.
|
||||
|
||||
Размер:
|
||||
- Небольшой.
|
||||
|
||||
Связность:
|
||||
- Зависит от AutoTradeState.
|
||||
- Использует ExchangeStatusCode для совместимости с exchange status layer.
|
||||
|
||||
Что хорошо:
|
||||
- Нет JournalService/EventBus/payload.
|
||||
- Нет торговой логики.
|
||||
- Нет прямых вызовов ExecutionEngine.
|
||||
- Логика UI-сообщений отделена от execution layer.
|
||||
|
||||
Что настораживает:
|
||||
- Строковые статусы `"BLOCKED"`, `"READY"`, `"CONFIRMING"`, `"NONE"` пока используются напрямую.
|
||||
- Но сейчас это не трогаем, чтобы не менять контракт state/UI.
|
||||
|
||||
Безопасные улучшения:
|
||||
- Сейчас не требуются.
|
||||
|
||||
Что нельзя менять:
|
||||
- Приоритеты semantic status.
|
||||
- Тексты UI-сообщений.
|
||||
- Совместимость с ExchangeStatusCode.
|
||||
- Значения execution_semantic_status.
|
||||
|
||||
Итог:
|
||||
Файл выполняет UI-semantic роль и не требует refactoring на текущем этапе.
|
||||
|
||||
## market_runtime.py
|
||||
|
||||
Статус: Audited / candidate for safe payload extraction
|
||||
|
||||
Назначение:
|
||||
- Синхронизация market analysis payload в AutoTradeState.
|
||||
- Логирование market state / volatility изменений.
|
||||
- Логирование entry-block событий.
|
||||
|
||||
Размер:
|
||||
- Средний.
|
||||
|
||||
Связность:
|
||||
- Зависит от AutoTradeState, JournalService, JsonDict.
|
||||
- Не вызывает ExecutionEngine напрямую.
|
||||
|
||||
Что хорошо:
|
||||
- Dedupe market-событий по symbol/strategy.
|
||||
- Entry-block logging имеет TTL.
|
||||
- Нет торговых действий.
|
||||
|
||||
Что настораживает:
|
||||
- Большой inline payload внутри `_log_entry_block_if_changed()`.
|
||||
- `_sync_market_analysis_state()` много полей переносит из payload в state, но это существующий mapping.
|
||||
|
||||
Безопасные улучшения:
|
||||
- Вынести entry-block payload в `_build_entry_block_payload()`.
|
||||
|
||||
Что нельзя менять:
|
||||
- Mapping payload → AutoTradeState.
|
||||
- Dedupe key.
|
||||
- Entry-block TTL.
|
||||
- Journal event_type/action.
|
||||
- Содержимое payload.
|
||||
|
||||
Итог:
|
||||
Файл рабочий. Первый безопасный шаг — вынести payload builder без изменения поведения.
|
||||
|
||||
### market_runtime.py
|
||||
|
||||
Выполнено:
|
||||
- Вынесен `_build_entry_block_payload()`.
|
||||
- Логика `_log_entry_block_if_changed()` стала отвечать только за dedupe и запись в Journal.
|
||||
- Содержимое payload не изменено.
|
||||
- Поведение полностью сохранено.
|
||||
|
||||
Статус: Completed
|
||||
|
||||
Выполнено:
|
||||
- Вынесен `_build_entry_block_payload()`.
|
||||
- Вынесен `_build_market_state_payload()`.
|
||||
- Методы логирования теперь отвечают только за:
|
||||
- dedupe;
|
||||
- принятие решения;
|
||||
- запись в Journal.
|
||||
- Формирование payload полностью изолировано.
|
||||
- Поведение не изменилось.
|
||||
|
||||
## position_health.py
|
||||
|
||||
Статус: Completed (без изменений)
|
||||
|
||||
Назначение:
|
||||
- Runtime health/risk оценка открытой позиции.
|
||||
- Формирует pressure, health score/status/reason, risk level/reason, trend alignment, adverse momentum и exit pressure.
|
||||
|
||||
Размер:
|
||||
- Средний/большой.
|
||||
|
||||
Связность:
|
||||
- Зависит от AutoTradeState, safe_float и execution.constants.
|
||||
- Использует get_position_health_thresholds().
|
||||
|
||||
Что хорошо:
|
||||
- PnL и hold time не рассчитываются здесь.
|
||||
- Runtime metrics приходят из execution/position_runtime.py.
|
||||
- Нет JournalService/EventBus/payload.
|
||||
- Методы разделены по смыслу.
|
||||
- Thresholds вынесены в constants.
|
||||
|
||||
Что настораживает:
|
||||
- Чувствительный файл: влияет на autonomous management, runtime actions, protection и exit decision.
|
||||
- Много бизнес-условий.
|
||||
- Много строковых runtime states.
|
||||
|
||||
Безопасные улучшения:
|
||||
- Сейчас не требуются.
|
||||
|
||||
Что нельзя менять:
|
||||
- Health score формулу.
|
||||
- Risk level порядок условий.
|
||||
- Trend alignment logic.
|
||||
- Adverse momentum logic.
|
||||
- Exit pressure logic.
|
||||
- Threshold constants.
|
||||
|
||||
Итог:
|
||||
Файл архитектурно понятный. На текущем safe stage оставляем без изменений.
|
||||
|
||||
## execution_quality.py
|
||||
|
||||
Статус: Audited / candidate for safe payload extraction
|
||||
|
||||
Назначение:
|
||||
- Оценка качества исполнения.
|
||||
- Синхронизация exchange availability.
|
||||
- Проверка свежести market snapshot.
|
||||
- Проверка spread.
|
||||
- Синхронизация execution pricing fields.
|
||||
- Логирование execution quality изменений.
|
||||
- Расчёт execution quality confidence score.
|
||||
|
||||
Размер:
|
||||
- Большой.
|
||||
|
||||
Связность:
|
||||
- Зависит от AutoTradeState, ExchangeService, ExchangeRuntimeStatus, JournalService.
|
||||
- Не вызывает ExecutionEngine напрямую.
|
||||
|
||||
Что хорошо:
|
||||
- Exchange availability вынесена отдельно.
|
||||
- Spread quality вынесен отдельно.
|
||||
- Execution pricing sync вынесен отдельно.
|
||||
- Confidence score вынесен отдельно.
|
||||
- Нет торговых действий.
|
||||
|
||||
Что настораживает:
|
||||
- Inline payload в `_log_exchange_availability_if_changed()`.
|
||||
- Inline payload в `_log_execution_quality_if_changed()`.
|
||||
- `_sync_execution_quality_state()` большой и чувствительный.
|
||||
|
||||
Безопасные улучшения:
|
||||
- Вынести `_build_exchange_availability_payload()`.
|
||||
- Вынести `_build_execution_quality_payload()`.
|
||||
|
||||
Что нельзя менять:
|
||||
- Exchange status mapping.
|
||||
- Spread thresholds.
|
||||
- Snapshot refresh logic.
|
||||
- Fallback price behavior.
|
||||
- Execution quality transitions.
|
||||
- Deduplication key.
|
||||
- Journal event_type/action.
|
||||
- Confidence score mapping.
|
||||
|
||||
Итог:
|
||||
Файл рабочий. Первый безопасный этап — вынести payload builders без изменения поведения.
|
||||
|
||||
### execution_quality.py
|
||||
|
||||
Выполнено:
|
||||
- Вынесен `_build_exchange_availability_payload()`.
|
||||
- Вынесен `_build_execution_quality_payload()`.
|
||||
- Логика exchange availability не менялась.
|
||||
- Логика spread/snapshot quality не менялась.
|
||||
- Journal payload не изменён.
|
||||
- Поведение полностью сохранено.
|
||||
|
||||
Статус: Completed (safe refactoring stage 1)
|
||||
|
||||
## position_semantics.py
|
||||
|
||||
Статус: Completed after minor cleanup
|
||||
|
||||
Назначение:
|
||||
- Semantic/intelligence состояние открытой позиции.
|
||||
- Формирует lifecycle stage, hold quality, decay state, exit confidence, exit signal, recommended action.
|
||||
- Считает advanced analytics: MFE, MAE, giveback, fatigue, conviction, reversal risk, stall state.
|
||||
|
||||
Размер:
|
||||
- Большой.
|
||||
|
||||
Связность:
|
||||
- Зависит от AutoTradeState, safe_float и execution.constants.
|
||||
- Не вызывает ExecutionEngine напрямую.
|
||||
|
||||
Что хорошо:
|
||||
- Нет JournalService/EventBus/payload.
|
||||
- Нет прямых торговых действий.
|
||||
- Thresholds вынесены в constants.
|
||||
- Методы разделены по смыслу.
|
||||
|
||||
Что настораживает:
|
||||
- Очень чувствительный файл: влияет на autonomous management, runtime actions, protection и exit decision.
|
||||
- Много бизнес-условий.
|
||||
- Много строковых semantic states.
|
||||
- `_sync_position_semantics_state()` управляет большим количеством полей AutoTradeState.
|
||||
|
||||
Безопасные улучшения:
|
||||
- Только косметика форматирования.
|
||||
|
||||
Что нельзя менять:
|
||||
- Порядок расчёта lifecycle/advanced analytics/stall/exit confidence.
|
||||
- Формулы exit confidence.
|
||||
- Логику damping.
|
||||
- MFE/MAE/giveback/fatigue/conviction/reversal/stall.
|
||||
- Threshold constants.
|
||||
- Значения semantic states.
|
||||
|
||||
Итог:
|
||||
Файл архитектурно понятный, но чувствительный. На текущем safe stage логических правок не требуется.
|
||||
|
||||
## auto_lifecycle.py
|
||||
|
||||
Статус: Audited / candidate for safe payload extraction
|
||||
|
||||
Назначение:
|
||||
- Lifecycle автоторговли: start / observe / stop.
|
||||
- Управление background loop.
|
||||
- Основной run_cycle pipeline.
|
||||
- Reset signal/runtime tracking.
|
||||
|
||||
Размер:
|
||||
- Большой.
|
||||
|
||||
Связность:
|
||||
- Собирает auto mixins.
|
||||
- Использует ExecutionEngine, StrategyRegistry, EventBus, JournalService.
|
||||
|
||||
Что хорошо:
|
||||
- run_cycle имеет понятный pipeline.
|
||||
- Execution делегирован ExecutionEngine.
|
||||
- Market, signal, health, semantics, autonomous management вынесены в mixins.
|
||||
|
||||
Что настораживает:
|
||||
- Большой `_reset_signal_tracking()`.
|
||||
- Inline payload в `_log_auto_status_changed()`.
|
||||
- Дубли reset-полей в start/observe/stop.
|
||||
|
||||
Безопасные улучшения:
|
||||
- Вынести `_build_auto_status_changed_payload()`.
|
||||
|
||||
Что нельзя менять:
|
||||
- Порядок run_cycle.
|
||||
- start/observe/stop поведение.
|
||||
- Reset signal tracking.
|
||||
- EventBus события.
|
||||
- Journal payload.
|
||||
|
||||
Итог:
|
||||
Файл рабочий. Первый безопасный шаг — вынести payload builder без изменения поведения.
|
||||
|
||||
## runner.py
|
||||
|
||||
Статус: Audited / candidate for safe payload extraction
|
||||
|
||||
Назначение:
|
||||
- Background runner автоторговли.
|
||||
- Обработка EventBus событий.
|
||||
- Публикация RuntimeEvent уведомлений.
|
||||
- Обновление Telegram auto screen.
|
||||
|
||||
Безопасные улучшения:
|
||||
- Вынести payload builders для notification/journal событий.
|
||||
|
||||
Что нельзя менять:
|
||||
- Worker loop.
|
||||
- EventBus version handling.
|
||||
- Dedupe keys.
|
||||
- Telegram refresh logic.
|
||||
- RuntimeEvent payload.
|
||||
|
||||
Выполнено:
|
||||
- Вынесен `_build_position_aligned_signal_suppressed_payload()`.
|
||||
- Вынесен `_build_runtime_signal_payload()`.
|
||||
- Вынесен `_build_runtime_execution_payload()`.
|
||||
- Payload подавленного aligned-сигнала не изменён.
|
||||
- Логика dedupe/TTL не менялась.
|
||||
- RuntimeEvent payload не изменялся.
|
||||
- Dedupe keys не менялись.
|
||||
- Telegram refresh logic не менялась.
|
||||
|
||||
Статус: Completed (safe refactoring stage 1)
|
||||
|
||||
## signal_runtime.py
|
||||
|
||||
Статус: Audited / candidate for safe payload extraction
|
||||
|
||||
Назначение:
|
||||
- Signal runtime tracking.
|
||||
- Signal confirmation.
|
||||
- Decision state.
|
||||
- Runtime expiration.
|
||||
- Execution confidence.
|
||||
- Market confidence.
|
||||
|
||||
Безопасные улучшения:
|
||||
- Вынести payload builders.
|
||||
- Начать с `_build_runtime_expired_payload()`.
|
||||
|
||||
Что нельзя менять:
|
||||
- Confirmation logic.
|
||||
- READY/BLOCKED logic.
|
||||
- Execution confidence formula.
|
||||
- Market confidence formula.
|
||||
- Runtime TTL reset logic.
|
||||
- EventBus events.
|
||||
|
||||
Выполнено:
|
||||
- Вынесен `_build_runtime_expired_payload()`.
|
||||
- Вынесен `_build_ready_signal_payload()`.
|
||||
- Вынесен `_build_signal_summary_payload()`.
|
||||
- Вынесен `_build_execution_confidence_factors()`.
|
||||
|
||||
Что не менялось:
|
||||
- Confirmation logic.
|
||||
- READY/BLOCKED logic.
|
||||
- Runtime TTL reset logic.
|
||||
- Execution confidence formula.
|
||||
- Market confidence formula.
|
||||
- EventBus events.
|
||||
- Journal event_type/action.
|
||||
|
||||
Статус: Completed (safe refactoring stage 1)
|
||||
|
||||
### state.py
|
||||
|
||||
Проверено полностью.
|
||||
|
||||
Изменения не требуются.
|
||||
|
||||
Причина:
|
||||
- dataclass не содержит бизнес-логики;
|
||||
- поля уже сгруппированы по подсистемам;
|
||||
- выделение вложенных dataclass приведёт к массовым изменениям во всём проекте без архитектурной пользы.
|
||||
|
||||
Статус:
|
||||
Completed (no changes required)
|
||||
Reference in New Issue
Block a user