60 lines
1.6 KiB
Python
60 lines
1.6 KiB
Python
# app/src/trading/position/state.py
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class PositionState:
|
|
# сторона позиции: NONE / LONG / SHORT
|
|
side: str = "NONE"
|
|
|
|
# торговый инструмент
|
|
symbol: str = ""
|
|
|
|
# id сделки, к которой относится текущая позиция
|
|
trade_id: str | None = None
|
|
|
|
# порядковый номер сделки внутри runtime
|
|
trade_sequence: int | None = None
|
|
|
|
# номер auto-cycle, в котором открыта сделка
|
|
trade_cycle_number: int | None = None
|
|
|
|
# цена входа
|
|
entry_price: float | None = None
|
|
|
|
# размер позиции
|
|
size: float | None = None
|
|
|
|
# плечо
|
|
leverage: float | None = None
|
|
|
|
# нереализованный PnL
|
|
unrealized_pnl_usd: float | None = None
|
|
|
|
# peak pnl tracking
|
|
peak_unrealized_pnl_usd: float | None = None
|
|
peak_pnl_percent: float | None = None
|
|
|
|
# lifecycle tracking
|
|
max_favorable_excursion_percent: float | None = None
|
|
max_adverse_excursion_percent: float | None = None
|
|
|
|
# runtime fatigue tracking
|
|
fatigue_score: float | None = None
|
|
fatigue_state: str | None = None
|
|
|
|
# position regime memory
|
|
best_price_seen: float | None = None
|
|
worst_price_seen: float | None = None
|
|
|
|
# время открытия позиции
|
|
opened_at: str | None = None
|
|
|
|
# monotonic timestamp открытия позиции
|
|
opened_monotonic_at: float | None = None
|
|
|
|
# время последнего обновления позиции
|
|
updated_at: str | None = None |