77 lines
2.3 KiB
Python
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 |