refactor(auto): finalize runtime state reset cleanup
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
@@ -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 % и время удержания больше не считаем здесь.
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user