495 lines
17 KiB
Markdown
495 lines
17 KiB
Markdown
# 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) |