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

140 lines
4.8 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 = "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