from dataclasses import asdict, dataclass from typing import Literal @dataclass(frozen=True) class Candle: symbol: str ts: int open: float high: float low: float close: float volume: float @dataclass(frozen=True) class TradeSignal: action: Literal["long", "short", "flat"] confidence: float leverage: int entry_price: float | None take_profit_price: float | None stop_loss_price: float | None reason: str @dataclass(frozen=True) class InstrumentMeta: ct_val: float lot_sz: float min_sz: float @dataclass(frozen=True) class Position: symbol: str pos_side: str size: float avg_price: float @dataclass(frozen=True) class OrderResult: status: str order_id: str | None symbol: str side: str | None pos_side: str | None order_type: str | None size: float | None @dataclass(frozen=True) class BacktestTrade: direction: str entry_price: float exit_price: float margin_used: float ending_equity: float @dataclass(frozen=True) class BacktestResult: initial_equity: float ending_equity: float total_return: float max_drawdown: float win_rate: float trade_count: int trades: list[BacktestTrade] def to_dict(self) -> dict[str, object]: return asdict(self)