Files
dzentra_bot/app/src/trading/auto/state.py

77 lines
2.3 KiB
Python

# 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