refactor(auto): finalize runtime state reset cleanup

This commit is contained in:
2026-07-02 22:38:38 +03:00
parent 73ea891843
commit 777a11207d
3 changed files with 10 additions and 47 deletions

View File

@@ -23,6 +23,8 @@ from src.trading.auto.state_reset import (
reset_position_semantics_state, reset_position_semantics_state,
reset_runtime_expiration_state, reset_runtime_expiration_state,
reset_signal_runtime_state, reset_signal_runtime_state,
reset_execution_block_state,
reset_position_health_state,
) )
from src.trading.execution.engine import ExecutionEngine from src.trading.execution.engine import ExecutionEngine
from src.trading.strategies.base import BaseStrategy, StrategyContext from src.trading.strategies.base import BaseStrategy, StrategyContext
@@ -108,7 +110,7 @@ class AutoLifecycleMixin(
numeric_value = 1000.0 numeric_value = 1000.0
state.allocated_balance_usd = numeric_value state.allocated_balance_usd = numeric_value
state.execution_block_reason = None reset_execution_block_state(state)
state.execution_size_adjustment_reason = None state.execution_size_adjustment_reason = None
return state return state
@@ -159,10 +161,7 @@ class AutoLifecycleMixin(
# чтобы запуск не наследовал паузу прошлого цикла. # чтобы запуск не наследовал паузу прошлого цикла.
reset_loss_cooldown_state(state) reset_loss_cooldown_state(state)
state.execution_block_title = None reset_execution_block_state(state)
state.execution_block_message = None
state.execution_block_action = None
state.execution_block_reason = None
EventBus.emit( EventBus.emit(
"auto_status_changed", "auto_status_changed",
@@ -344,7 +343,7 @@ class AutoLifecycleMixin(
def set_max_reserved_balance_percent(self, value: NumericLike | None) -> AutoTradeState: def set_max_reserved_balance_percent(self, value: NumericLike | None) -> AutoTradeState:
state = self.get_state() state = self.get_state()
state.max_reserved_balance_percent = safe_float(value) state.max_reserved_balance_percent = safe_float(value)
state.execution_block_reason = None reset_execution_block_state(state)
return state return state
def _reset_signal_tracking(self) -> None: def _reset_signal_tracking(self) -> None:
@@ -374,17 +373,7 @@ class AutoLifecycleMixin(
self._execution_confidence_required_score self._execution_confidence_required_score
) )
state.position_pnl_percent = None reset_position_health_state(state)
state.position_hold_seconds = None
state.position_pressure = None
state.position_health_score = None
state.position_health_status = None
state.position_health_reason = None
state.position_risk_level = None
state.position_risk_reason = None
state.position_trend_alignment = None
state.position_adverse_momentum = False
state.position_exit_pressure = None
def _build_strategy_context(self) -> StrategyContext: def _build_strategy_context(self) -> StrategyContext:
state = self.get_state() state = self.get_state()

View File

@@ -5,6 +5,7 @@ from __future__ import annotations
from src.core.numbers import safe_float from src.core.numbers import safe_float
from src.core.types import NumericLike from src.core.types import NumericLike
from src.trading.auto.state import AutoTradeState from src.trading.auto.state import AutoTradeState
from src.trading.auto.state_reset import reset_position_health_state
from src.trading.execution.constants import ( from src.trading.execution.constants import (
EXECUTION_QUALITY_BLOCKED, EXECUTION_QUALITY_BLOCKED,
EXECUTION_QUALITY_WARNING, EXECUTION_QUALITY_WARNING,
@@ -37,17 +38,7 @@ class AutoPositionHealthMixin:
# синхронизировать runtime health/risk состояние открытой позиции # синхронизировать runtime health/risk состояние открытой позиции
def _sync_position_health_state(self, state: AutoTradeState) -> None: def _sync_position_health_state(self, state: AutoTradeState) -> None:
if state.position_side == "NONE" or state.entry_price is None: if state.position_side == "NONE" or state.entry_price is None:
state.position_pnl_percent = None reset_position_health_state(state)
state.position_hold_seconds = None
state.position_pressure = None
state.position_health_score = None
state.position_health_status = None
state.position_health_reason = None
state.position_risk_level = None
state.position_risk_reason = None
state.position_trend_alignment = None
state.position_adverse_momentum = False
state.position_exit_pressure = None
return return
# PnL % и время удержания больше не считаем здесь. # PnL % и время удержания больше не считаем здесь.

View File

@@ -4,6 +4,7 @@ from __future__ import annotations
from src.core.numbers import safe_float from src.core.numbers import safe_float
from src.trading.auto.state import AutoTradeState from src.trading.auto.state import AutoTradeState
from src.trading.auto.state_reset import reset_position_semantics_state
from src.trading.execution.constants import ( from src.trading.execution.constants import (
POSITION_EXIT_DAMPING_MATURE_MULTIPLIER, POSITION_EXIT_DAMPING_MATURE_MULTIPLIER,
POSITION_EXIT_DAMPING_MATURE_SECONDS, POSITION_EXIT_DAMPING_MATURE_SECONDS,
@@ -33,25 +34,7 @@ class AutoPositionSemanticsMixin:
# синхронизировать semantics-состояние открытой позиции # синхронизировать semantics-состояние открытой позиции
def _sync_position_semantics_state(self, state: AutoTradeState) -> None: def _sync_position_semantics_state(self, state: AutoTradeState) -> None:
if state.position_side == "NONE" or state.entry_price is None: if state.position_side == "NONE" or state.entry_price is None:
state.position_lifecycle_stage = None reset_position_semantics_state(state)
state.position_hold_quality = None
state.position_decay_state = None
state.position_exit_confidence = None
state.position_exit_signal = None
state.position_intelligence_reason = None
state.position_recommended_action = None
state.position_peak_pnl_usd = None
state.position_peak_pnl_percent = None
state.position_mfe_percent = None
state.position_mae_percent = None
state.position_fatigue_score = None
state.position_fatigue_state = None
state.position_giveback_percent = None
state.position_conviction_state = None
state.position_exit_urgency = None
state.position_reversal_risk = None
state.position_stall_state = None
state.position_stall_reason = None
return return
lifecycle_stage = self._position_lifecycle_stage(state) lifecycle_stage = self._position_lifecycle_stage(state)