Spaces:
Sleeping
Sleeping
| from datetime import datetime | |
| from typing import List, Dict, Any | |
| from pydantic import BaseModel, Field | |
| class KlineData(BaseModel): | |
| timestamp: int = Field(..., description="Timestamp in milliseconds") | |
| open: float | |
| high: float | |
| low: float | |
| close: float | |
| volume: float | |
| def datetime(self) -> datetime: | |
| return datetime.fromtimestamp(self.timestamp / 1000) | |
| def from_kucoin_data(cls, data: List[Any]) -> "KlineData": | |
| return cls( | |
| timestamp=int(data[0]), | |
| open=float(data[1]), | |
| high=float(data[2]), | |
| low=float(data[3]), | |
| close=float(data[4]), | |
| volume=float(data[5]), | |
| ) | |
| class MarketData(BaseModel): | |
| symbol: str | |
| granularity: int | |
| klines: List[KlineData] | |
| def from_kucoin_response( | |
| cls, response_data: Dict[str, Any], symbol: str, granularity: int | |
| ): | |
| klines = [KlineData.from_kucoin_data(k) for k in response_data.get("data", [])] | |
| return cls(symbol=symbol, granularity=granularity, klines=klines) | |
| class SymbolInfo(BaseModel): | |
| symbol: str | |
| name: str | |
| baseCurrency: str | |
| quoteCurrency: str | |
| maxLeverage: int | |
| def from_kucoin_data(cls, data: Dict[str, Any]) -> "SymbolInfo": | |
| return cls( | |
| symbol=data.get("symbol", ""), | |
| name=data.get("name", ""), | |
| baseCurrency=data.get("baseCurrency", ""), | |
| quoteCurrency=data.get("quoteCurrency", ""), | |
| maxLeverage=int(data.get("maxLeverage", 0)), | |
| ) | |