# app/src/trading/auto/state.py from __future__ import annotations from dataclasses import dataclass @dataclass(slots=True) class AutoTradeState: # текущее состояние: OFF / OBSERVING / RUNNING status: str = "OFF" # выбранная стратегия: TREND / GRID / SCALP strategy: str | None = None # торговый инструмент symbol: str = "" # риск на одну сделку в % risk_percent: float | None = None # текущий PnL pnl_usd: float = 0.0 # время последней проверки last_check_at: str | None = None # последний сырой сигнал стратегии last_signal: str | None = None # количество одинаковых сигналов подряд last_signal_repeat_count: int = 0 # уверенность последнего сигнала от 0.0 до 1.0 last_signal_confidence: float = 0.0 # причина последнего сигнала last_signal_reason: str | None = None # статус торгового решения: WAITING / CONFIRMING / READY / BLOCKED decision_status: str = "WAITING" # человекочитаемое объяснение решения decision_reason: str | None = None # сигнал подтверждён по количеству повторов is_signal_confirmed: bool = False # сигнал готов к будущему execution is_signal_ready: bool = False # текущая позиция: NONE / LONG / SHORT position_side: str = "NONE" # цена входа entry_price: float | None = None # размер позиции position_size: float | None = None # нереализованный PnL unrealized_pnl_usd: float | None = None # максимальная просадка max_drawdown_usd: float | None = None # плечо leverage: float | None = 2.0 # stop loss по движению цены в % stop_loss_percent: float | None = None # take profit по движению цены в % take_profit_percent: float | None = None # максимальный допустимый paper-убыток в USD max_loss_usd: float | None = None