diff --git a/app/src/trading/auto/signal_runtime.py b/app/src/trading/auto/signal_runtime.py index f7c7dce..1348e7e 100644 --- a/app/src/trading/auto/signal_runtime.py +++ b/app/src/trading/auto/signal_runtime.py @@ -10,6 +10,10 @@ from src.core.numbers import safe_float from src.core.types import JsonDict, NumericLike from src.integrations.exchange.service import ExchangeService from src.trading.auto.state import AutoTradeState +from src.trading.auto.state_reset import ( + reset_after_market_runtime_expired, + reset_after_signal_runtime_expired, +) from src.trading.journal.service import JournalService @@ -733,25 +737,13 @@ class AutoSignalRuntimeMixin: self._last_signal_started_at = None self._same_signal_count = 0 - state.last_signal = "HOLD" - state.last_signal_repeat_count = 0 - state.last_signal_confidence = 0.0 - state.last_signal_reason = None - state.signal_started_at = None - state.signal_updated_at = None - state.decision_status = "WAITING" + reset_after_signal_runtime_expired(state) + state.decision_reason = "Сигнал устарел." - state.is_signal_confirmed = False - state.is_signal_ready = False - state.signal_confirmation_seconds = 0 state.signal_confirmation_missing_repeats = self._confirm_repeats - state.signal_confirmation_progress = 0.0 - state.signal_confirmation_reason = None - state.execution_confidence_score = None - state.execution_confidence_level = None - state.execution_confidence_reason = None - state.execution_confidence_factors = None - state.execution_confidence_required_score = self._execution_confidence_required_score + state.execution_confidence_required_score = ( + self._execution_confidence_required_score + ) state.runtime_expired_reason = "SIGNAL_TTL_EXPIRED" state.runtime_expired_message = "сигнал устарел и был сброшен" @@ -779,64 +771,7 @@ class AutoSignalRuntimeMixin: market_age = now - market_updated if market_age > self._market_analysis_ttl_seconds: - state.market_state = None - state.market_trend = None - state.market_volatility = None - state.market_analysis_interval = None - state.market_analysis_reason = None - state.market_analysis_updated_at = None - state.entry_block_reason = None - state.entry_block_message = None - state.market_trend_strength = None - state.market_trend_quality = None - state.market_phase = None - state.market_phase_direction = None - state.current_interval_change_percent = None - state.current_interval_direction = None - state.current_interval_label = None - state.last_closed_candle_change_percent = None - state.last_closed_candle_direction = None - # Сбрасываем общую оценку рынка вместе с market context, - # чтобы UI не показывал старый процент после истечения TTL. - state.market_score = None - state.market_score_label = None - state.market_long_score = None - state.market_short_score = None - state.market_structure = None - state.market_structure_reason = None - state.market_trend_gap_percent = None - state.market_trend_consistency = None - state.market_trend_efficiency = None - state.trend_quality_score = None - state.ema_distance_atr_ratio = None - state.ema_distance_state = None - state.entry_timing_state = None - state.entry_timing_reason = None - state.ema_fast_slope_percent = None - state.ema_slow_slope_percent = None - state.candle_noise_score = None - state.price_position_score = None - state.htf_interval = None - state.htf_atr_percent = None - state.htf_atr_percent_baseline = None - state.htf_volatility_ratio = None - state.htf_volatility = None - state.htf_market_state = None - state.htf_trend = None - state.htf_trend_strength = None - state.htf_trend_quality = None - state.htf_market_phase = None - state.htf_alignment = None - state.htf_confirmation_score = None - state.htf_reason = None - - state.momentum_state = None - state.momentum_direction = None - state.momentum_change_percent = None - state.momentum_strength = None - state.breakout_level = None - state.breakout_distance_percent = None - state.breakout_reason = None + reset_after_market_runtime_expired(state) state.runtime_expired_reason = "MARKET_ANALYSIS_TTL_EXPIRED" state.runtime_expired_message = "анализ рынка устарел"