Skip to content

Commit

Permalink
feat: updated to lastest 2.1 spot exchange API
Browse files Browse the repository at this point in the history
  • Loading branch information
yarikdevcom committed Nov 1, 2022
1 parent 4e5ebc0 commit bd370ec
Show file tree
Hide file tree
Showing 10 changed files with 600 additions and 472 deletions.
6 changes: 4 additions & 2 deletions generatestructs.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,11 @@ def all():

async def main():
exchange = cro.Exchange()
account = cro.Account(from_env=True)
coins = (await account.get_balance()).keys()
coins = set()
pairs = await exchange.get_pairs()
for pair in pairs:
coins.add(pair.base_coin)
coins.add(pair.quote_coin)

with (SRC_PATH / "pairs.py").open("w") as f:
f.writelines(
Expand Down
2 changes: 2 additions & 0 deletions src/cryptocom/exchange/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,8 @@ async def request(self, method, path, params=None, data=None, sign=False):
)
resp_json = resp.json()
if resp.status_code != 200:
if count != self.retries:
continue
raise ApiError(
f"Error: {resp_json}. "
f"Status: {resp.status_code}. Json params: {data}"
Expand Down
30 changes: 2 additions & 28 deletions src/cryptocom/exchange/coins.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,7 @@
ALICE = Coin("ALICE")
ALPHA = Coin("ALPHA")
AMP = Coin("AMP")
ANC = Coin("ANC")
ANKR = Coin("ANKR")
ANY = Coin("ANY")
APE = Coin("APE")
API3 = Coin("API3")
APT = Coin("APT")
Expand All @@ -36,12 +34,10 @@
BICO = Coin("BICO")
BIFI = Coin("BIFI")
BNT = Coin("BNT")
BOBA = Coin("BOBA")
BOND = Coin("BOND")
BOSON = Coin("BOSON")
BRZ = Coin("BRZ")
BTC = Coin("BTC")
BUSD = Coin("BUSD")
C98 = Coin("C98")
CELR = Coin("CELR")
CHESS = Coin("CHESS")
Expand All @@ -63,7 +59,6 @@
DERC = Coin("DERC")
DGB = Coin("DGB")
DIA = Coin("DIA")
DINO = Coin("DINO")
DOGE = Coin("DOGE")
DOT = Coin("DOT")
DYDX = Coin("DYDX")
Expand All @@ -73,7 +68,6 @@
ENJ = Coin("ENJ")
ENS = Coin("ENS")
EOS = Coin("EOS")
EPS = Coin("EPS")
EPX = Coin("EPX")
ERN = Coin("ERN")
ETC = Coin("ETC")
Expand All @@ -85,7 +79,6 @@
FIL = Coin("FIL")
FITFI = Coin("FITFI")
FLOW = Coin("FLOW")
FLR = Coin("FLR")
FLUX = Coin("FLUX")
FORTH = Coin("FORTH")
FTM = Coin("FTM")
Expand All @@ -96,19 +89,16 @@
GHST = Coin("GHST")
GLM = Coin("GLM")
GLMR = Coin("GLMR")
GMT = Coin("GMT")
GMX = Coin("GMX")
GODS = Coin("GODS")
GRT = Coin("GRT")
GTC = Coin("GTC")
GUSD = Coin("GUSD")
HBAR = Coin("HBAR")
HERO = Coin("HERO")
HIGH = Coin("HIGH")
HNT = Coin("HNT")
HOD = Coin("HOD")
HOT = Coin("HOT")
HUSD = Coin("HUSD")
ICP = Coin("ICP")
ICX = Coin("ICX")
ILV = Coin("ILV")
Expand All @@ -119,7 +109,6 @@
JASMY = Coin("JASMY")
JOE = Coin("JOE")
KAVA = Coin("KAVA")
KEEP = Coin("KEEP")
KLAY = Coin("KLAY")
KNC = Coin("KNC")
KP3R = Coin("KP3R")
Expand All @@ -132,50 +121,41 @@
LRC = Coin("LRC")
LSK = Coin("LSK")
LTC = Coin("LTC")
LUNA = Coin("LUNA")
LUNA2 = Coin("LUNA2")
LUNC = Coin("LUNC")
MANA = Coin("MANA")
MASK = Coin("MASK")
MATIC = Coin("MATIC")
MBL = Coin("MBL")
MC = Coin("MC")
MCO = Coin("MCO")
MDT = Coin("MDT")
METIS = Coin("METIS")
MINA = Coin("MINA")
MIR = Coin("MIR")
MKR = Coin("MKR")
MLN = Coin("MLN")
MMF = Coin("MMF")
MOVR = Coin("MOVR")
MTD = Coin("MTD")
MULTI = Coin("MULTI")
MXC = Coin("MXC")
NANO = Coin("NANO")
NEAR = Coin("NEAR")
NEO = Coin("NEO")
NKN = Coin("NKN")
NMR = Coin("NMR")
NU = Coin("NU")
OCEAN = Coin("OCEAN")
OGN = Coin("OGN")
OGV = Coin("OGV")
OLE = Coin("OLE")
OMG = Coin("OMG")
ONE = Coin("ONE")
ONEINCH = Coin("1INCH")
ONEINCH = Coin("ONEINCH")
ONT = Coin("ONT")
OP = Coin("OP")
OXT = Coin("OXT")
PAX = Coin("PAX")
PAXG = Coin("PAXG")
PENDLE = Coin("PENDLE")
PERP = Coin("PERP")
PLA = Coin("PLA")
POLS = Coin("POLS")
POLY = Coin("POLY")
POLYX = Coin("POLYX")
POND = Coin("POND")
POWR = Coin("POWR")
PRQ = Coin("PRQ")
Expand All @@ -194,17 +174,14 @@
REN = Coin("REN")
REP = Coin("REP")
REQ = Coin("REQ")
RGT = Coin("RGT")
RLC = Coin("RLC")
RLY = Coin("RLY")
RNDR = Coin("RNDR")
RSR = Coin("RSR")
RUNE = Coin("RUNE")
RVN = Coin("RVN")
SAND = Coin("SAND")
SC = Coin("SC")
SDN = Coin("SDN")
SGB = Coin("SGB")
SHIB = Coin("SHIB")
SKL = Coin("SKL")
SLP = Coin("SLP")
Expand All @@ -226,20 +203,17 @@
TRB = Coin("TRB")
TRIBE = Coin("TRIBE")
TRU = Coin("TRU")
TUSD = Coin("TUSD")
UMA = Coin("UMA")
UNFI = Coin("UNFI")
UNI = Coin("UNI")
USDC = Coin("USDC")
USDP = Coin("USDP")
USD = Coin("USD")
USDT = Coin("USDT")
VELO = Coin("VELO")
VET = Coin("VET")
VOXEL = Coin("VOXEL")
VRA = Coin("VRA")
VTHO = Coin("VTHO")
VVS = Coin("VVS")
WAVE = Coin("WAVE")
WAVES = Coin("WAVES")
WAXP = Coin("WAXP")
WBTC = Coin("WBTC")
Expand Down
6 changes: 4 additions & 2 deletions src/cryptocom/exchange/helpers.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
def round_up(value: float, precision: int) -> float:
def round_up(value: str | float, precision: int) -> float:
"""Rounds number to upper precision 0.13 -> 0.2"""
pwr = 10**precision
value = float(value)
rounded = round((value * pwr) / pwr, precision)
if rounded < value:
rounded = round((value * pwr + 1) / pwr, precision)
return rounded


def round_down(value: float, precision: int) -> float:
def round_down(value: str | float, precision: int) -> float:
"""Rounds number to lower precision 0.13 -> 0.1"""
value = float(value)
pwr = 10**precision
return round((value * pwr) / pwr, precision)
12 changes: 6 additions & 6 deletions src/cryptocom/exchange/market.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ async def get_ticker(self, pair: Pair) -> MarketTicker:
data = await self.api.get(
"public/get-ticker", {"instrument_name": pair.name}
)
return MarketTicker.from_api(pair, data)
return MarketTicker.from_api(pair, data[0])

async def get_tickers(self) -> Dict[Pair, MarketTicker]:
"""Get tickers in all available markets."""
Expand Down Expand Up @@ -78,11 +78,11 @@ async def get_orderbook(self, pair: Pair) -> OrderBook:
"public/get-book", {"instrument_name": pair.name}
)
buys = [
OrderInBook(*order, pair, OrderSide.BUY)
OrderInBook.from_api(order, pair, OrderSide.BUY)
for order in data[0]["bids"]
]
sells = [
OrderInBook(*order, pair, OrderSide.SELL)
OrderInBook.from_api(order, pair, OrderSide.SELL)
for order in reversed(data[0]["asks"])
]
return OrderBook(buys, sells, pair)
Expand Down Expand Up @@ -115,15 +115,15 @@ async def listen_trades(self, *pairs: List[Pair]) -> MarketTrade:
yield MarketTrade.from_api(pair, trade)

async def listen_orderbook(self, *pairs: List[Pair]) -> OrderBook:
channels = [f"book.{pair.name}.150" for pair in pairs]
channels = [f"book.{pair.name}.50" for pair in pairs]
async for data in self.api.listen("market", *channels):
pair = self.pairs[data["instrument_name"]]
buys = [
OrderInBook(*order, pair, OrderSide.BUY)
OrderInBook.from_api(order, pair, OrderSide.BUY)
for order in data["data"][0]["bids"]
]
sells = [
OrderInBook(*order, pair, OrderSide.SELL)
OrderInBook.from_api(order, pair, OrderSide.SELL)
for order in reversed(data["data"][0]["asks"])
]
yield OrderBook(buys, sells, pair)
Loading

0 comments on commit bd370ec

Please sign in to comment.