# 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 = "TREND" # торговый инструмент symbol: str = "BTC/USD_LEVERAGE" # риск на одну сделку в % risk_percent: float | None = 1.0 # текущий 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 # время начала текущего сигнала, monotonic timestamp signal_started_at: float | 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 = 1.0 # take profit по движению цены в % take_profit_percent: float | None = None # максимальный допустимый paper-убыток в USD max_loss_usd: float | None = None # максимальная доля баланса, которую можно зарезервировать под позицию max_reserved_balance_percent: float | None = 50.0 # последняя причина блокировки execution execution_block_reason: str | None = None # причина авто-уменьшения размера позиции execution_size_adjustment_reason: str | None = None # капитал, выделенный только под AutoTrade allocated_balance_usd: float = 1000.0 # зафиксированный результат закрытых paper-сделок realized_pnl_usd: float = 0.0 # последнее execution-действие last_execution_action: str | None = None # последняя execution-причина last_execution_reason: str | None = None # последняя причина блокировки flip last_flip_block_reason: str | None = None # время последнего успешного flip last_flip_at: str | None = None # состояние рынка по Market State Engine market_state: str | None = None # направление тренда: UP / DOWN / FLAT / UNKNOWN market_trend: str | None = None # волатильность: LOW / NORMAL / HIGH / UNKNOWN market_volatility: str | None = None # таймфрейм анализа рынка market_analysis_interval: str | None = None # объяснение последнего анализа рынка market_analysis_reason: str | None = None # код причины, почему вход в позицию сейчас не выполнен entry_block_reason: str | None = None # человекочитаемое объяснение причины не входа entry_block_message: str | None = None # время последнего обновления сигнала, monotonic timestamp signal_updated_at: float | None = None # время последнего обновления market analysis, monotonic timestamp market_analysis_updated_at: float | None = None # причина runtime expiration runtime_expired_reason: str | None = None # человекочитаемое сообщение runtime expiration runtime_expired_message: str | None = None