| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- 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 PaperPosition:
- symbol: str
- side: str
- quantity: float
- avg_entry_price: float
- margin_used: float
- @dataclass(frozen=True)
- class PaperState:
- cash_usdt: float
- realized_pnl: float
- positions: list[PaperPosition]
- updated_at: str
- @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 PaperOrderResult:
- status: str
- symbol: str
- side: str | None
- price: float | None
- quantity: float | None
- margin_used: float | None
- cash_usdt: float
- @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)
|