crypto-walk / models /market_data.py
pymmdrza's picture
Update models/market_data.py
6c0f809 verified
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
@property
def datetime(self) -> datetime:
return datetime.fromtimestamp(self.timestamp / 1000)
@classmethod
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]
@classmethod
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
@classmethod
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)),
)