Files
dzentra_bot/app/src/trading/execution/resets.py

74 lines
2.1 KiB
Python

# app/src/trading/execution/resets.py
from __future__ import annotations
from typing import Protocol
from src.trading.auto.state import AutoTradeState
class _ExecutionResetsProtocol(Protocol):
"""
Protocol для reset mixin.
Сейчас пустой, но оставлен для единообразия архитектуры.
"""
pass
class ExecutionResetsMixin(_ExecutionResetsProtocol):
"""
Общие reset-функции execution слоя.
Здесь находятся методы очистки runtime/protection/
lifecycle состояния позиции.
Это позволяет избежать циклических зависимостей между:
- position_actions.py
- position_protection.py
- runtime_actions.py
"""
def _reset_runtime_protection_state(
self,
state: AutoTradeState,
) -> None:
"""
Полный reset runtime protection состояния позиции.
Вызывается после закрытия позиции.
"""
state.position_protection_status = None
state.position_protection_reason = None
state.break_even_armed = False
state.break_even_price = None
state.trailing_stop_active = False
state.trailing_stop_price = None
state.profit_lock_active = False
state.profit_lock_price = None
state.runtime_protection_action = None
state.runtime_protection_reason = None
state.runtime_protection_updated_at = None
def _reset_position_lifecycle_state(
self,
state: AutoTradeState,
) -> None:
"""
Reset lifecycle состояния позиции.
Используется после полного закрытия позиции.
"""
state.position_opened_monotonic_at = None
state.last_flip_old_side = None
state.last_flip_new_side = None
state.last_flip_pnl_usd = None
state.last_flip_reason = None
state.execution_block_reason = None
state.last_flip_block_reason = None