07.4.4.1.1 — Market State Human UI + HOLD Lifecycle Fix

This commit is contained in:
2026-05-10 23:20:54 +03:00
parent 8024cd9d9a
commit ef7cec68cc
14 changed files with 1209 additions and 39 deletions

View File

@@ -388,7 +388,7 @@ class AutoTradeService:
confidence: float,
payload: dict | None,
) -> None:
signal_key = f"{state.status}:{state.symbol}:{strategy_name}:{signal}:{reason}"
signal_key = f"{state.status}:{state.symbol}:{strategy_name}:{signal}"
previous_signal = self._last_signal_value
previous_count = self._same_signal_count
is_same_signal = signal_key == self._last_signal_key
@@ -396,6 +396,10 @@ class AutoTradeService:
if is_same_signal:
self._same_signal_count += 1
self._last_signal_reason = reason
self._last_signal_confidence = confidence
self._last_signal_payload = payload
self._update_signal_state_fields(
state=state,
signal=signal,
@@ -404,7 +408,7 @@ class AutoTradeService:
)
return
if previous_signal is not None:
if previous_signal is not None and previous_signal != signal:
if previous_count > 1:
self._log_signal_summary(
strategy_name=strategy_name,
@@ -636,7 +640,21 @@ class AutoTradeService:
except Exception:
pass
# выполнить один цикл анализа рынка
def _sync_market_analysis_state(
self,
*,
state: AutoTradeState,
payload: dict | None,
) -> None:
if not isinstance(payload, dict):
return
state.market_state = payload.get("market_state")
state.market_trend = payload.get("market_trend")
state.market_volatility = payload.get("market_volatility")
state.market_analysis_interval = payload.get("market_analysis_interval")
state.market_analysis_reason = payload.get("market_analysis_reason")
def run_cycle(self) -> AutoTradeState:
state = self.get_state()
@@ -647,6 +665,11 @@ class AutoTradeService:
context = self._build_strategy_context()
result = strategy.analyze(context)
self._sync_market_analysis_state(
state=state,
payload=result.payload,
)
state.last_check_at = datetime.now().strftime("%H:%M:%S")
self._log_signal_if_changed(