pymmdrza commited on
Commit
1a9e63d
·
verified ·
1 Parent(s): 3a48783

Create market_data.py

Browse files
Files changed (1) hide show
  1. models/market_data.py +61 -0
models/market_data.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from datetime import datetime
2
+ from typing import List, Dict, Any
3
+ from pydantic import BaseModel, Field
4
+
5
+
6
+ class KlineData(BaseModel):
7
+ timestamp: int
8
+ open: float
9
+ high: float
10
+ low: float
11
+ close: float
12
+ volume: float
13
+
14
+ @property
15
+ def datetime(self) -> datetime:
16
+ return datetime.fromtimestamp(self.timestamp / 1000)
17
+
18
+ @classmethod
19
+ def from_kucoin_data(cls, data: List[Any]) -> "KlineData":
20
+ return cls(
21
+ timestamp=int(data[0]),
22
+ open=float(data[1]),
23
+ high=float(data[2]),
24
+ low=float(data[3]),
25
+ close=float(data[4]),
26
+ volume=float(data[5]),
27
+ )
28
+
29
+
30
+ class MarketData(BaseModel):
31
+ symbol: str
32
+ granularity: int
33
+ klines: List[KlineData]
34
+
35
+ @classmethod
36
+ def from_kucoin_response(
37
+ cls, response: Dict[str, Any], symbol: str, granularity: int
38
+ ):
39
+ return cls(
40
+ symbol=symbol,
41
+ granularity=granularity,
42
+ klines=[KlineData.from_kucoin_data(k) for k in response.get("data", [])],
43
+ )
44
+
45
+
46
+ class SymbolInfo(BaseModel):
47
+ symbol: str
48
+ name: str
49
+ baseCurrency: str
50
+ quoteCurrency: str
51
+ maxLeverage: int
52
+
53
+ @classmethod
54
+ def from_kucoin_data(cls, data: Dict[str, Any]) -> "SymbolInfo":
55
+ return cls(
56
+ symbol=data["symbol"],
57
+ name=data["name"],
58
+ baseCurrency=data["baseCurrency"],
59
+ quoteCurrency=data["quoteCurrency"],
60
+ maxLeverage=int(data["maxLeverage"]),
61
+ )