Files
dzentra_bot/docs/architecture/auto_refactoring.md

17 KiB
Raw Blame History

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)