| """
|
| Pydantic data models for the Gemini 3 Flash AI Trading Platform.
|
| """
|
|
|
| from pydantic import BaseModel, Field
|
| from typing import Optional, Literal
|
| from datetime import datetime
|
| from enum import Enum
|
|
|
|
|
| class TradeAction(str, Enum):
|
| BUY = "BUY"
|
| SELL = "SELL"
|
| CLOSE = "CLOSE"
|
| HOLD = "HOLD"
|
| DO_NOTHING = "DO_NOTHING"
|
|
|
|
|
| class CandleData(BaseModel):
|
| time: int
|
| open: float
|
| high: float
|
| low: float
|
| close: float
|
| volume: float
|
|
|
|
|
| class TickData(BaseModel):
|
| bid: float
|
| ask: float
|
| time: int
|
| symbol: str
|
|
|
|
|
| class PositionInfo(BaseModel):
|
| ticket: int
|
| symbol: str
|
| type: str
|
| volume: float
|
| price_open: float
|
| price_current: float
|
| sl: float
|
| tp: float
|
| profit: float
|
| time: int
|
|
|
|
|
| class AccountInfo(BaseModel):
|
| login: int
|
| balance: float
|
| equity: float
|
| margin: float
|
| free_margin: float
|
| margin_level: Optional[float] = None
|
| profit: float
|
| server: str
|
| currency: str
|
| trade_mode: str
|
|
|
|
|
| class AgentDecision(BaseModel):
|
| action: TradeAction
|
| reasoning: str
|
| confidence: float = Field(ge=0.0, le=1.0)
|
| sl: Optional[float] = None
|
| tp: Optional[float] = None
|
| volume: Optional[float] = None
|
|
|
|
|
| class TradeRequest(BaseModel):
|
| action: Literal["buy", "sell", "close"]
|
| symbol: str = "XAUUSDc"
|
| volume: float = 0.01
|
| sl: Optional[float] = None
|
| tp: Optional[float] = None
|
| ticket: Optional[int] = None
|
|
|
|
|
| class WSMessage(BaseModel):
|
| type: str
|
| data: dict
|
| timestamp: str = Field(default_factory=lambda: datetime.now().isoformat())
|
|
|