Files
dzentra_bot/docs/architecture/auto_refactoring.md

495 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)