| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- 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)
|