From bd370ec8183a1977239504cae356e9b5c025ebfd Mon Sep 17 00:00:00 2001 From: Morty Space Date: Tue, 1 Nov 2022 22:29:41 +0100 Subject: [PATCH] feat: updated to lastest 2.1 spot exchange API --- generatestructs.py | 6 +- src/cryptocom/exchange/api.py | 2 + src/cryptocom/exchange/coins.py | 30 +- src/cryptocom/exchange/helpers.py | 6 +- src/cryptocom/exchange/market.py | 12 +- src/cryptocom/exchange/pairs.py | 871 +++++++++++++++++------------- src/cryptocom/exchange/private.py | 30 +- src/cryptocom/exchange/structs.py | 22 +- tests/test_market.py | 12 +- tests/test_private.py | 81 ++- 10 files changed, 600 insertions(+), 472 deletions(-) diff --git a/generatestructs.py b/generatestructs.py index 05d7078..842e37c 100644 --- a/generatestructs.py +++ b/generatestructs.py @@ -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( diff --git a/src/cryptocom/exchange/api.py b/src/cryptocom/exchange/api.py index 3506e40..8ed0b12 100644 --- a/src/cryptocom/exchange/api.py +++ b/src/cryptocom/exchange/api.py @@ -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}" diff --git a/src/cryptocom/exchange/coins.py b/src/cryptocom/exchange/coins.py index bc73a01..5070c99 100644 --- a/src/cryptocom/exchange/coins.py +++ b/src/cryptocom/exchange/coins.py @@ -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") @@ -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") @@ -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") @@ -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") @@ -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") @@ -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") @@ -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") @@ -132,7 +121,6 @@ LRC = Coin("LRC") LSK = Coin("LSK") LTC = Coin("LTC") -LUNA = Coin("LUNA") LUNA2 = Coin("LUNA2") LUNC = Coin("LUNC") MANA = Coin("MANA") @@ -140,11 +128,9 @@ 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") @@ -152,30 +138,24 @@ 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") @@ -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") @@ -226,12 +203,10 @@ 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") @@ -239,7 +214,6 @@ VRA = Coin("VRA") VTHO = Coin("VTHO") VVS = Coin("VVS") -WAVE = Coin("WAVE") WAVES = Coin("WAVES") WAXP = Coin("WAXP") WBTC = Coin("WBTC") diff --git a/src/cryptocom/exchange/helpers.py b/src/cryptocom/exchange/helpers.py index e01fd7a..756f04c 100644 --- a/src/cryptocom/exchange/helpers.py +++ b/src/cryptocom/exchange/helpers.py @@ -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) diff --git a/src/cryptocom/exchange/market.py b/src/cryptocom/exchange/market.py index 7da1f34..a3fd141 100644 --- a/src/cryptocom/exchange/market.py +++ b/src/cryptocom/exchange/market.py @@ -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.""" @@ -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) @@ -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) diff --git a/src/cryptocom/exchange/pairs.py b/src/cryptocom/exchange/pairs.py index 668dde6..b665970 100644 --- a/src/cryptocom/exchange/pairs.py +++ b/src/cryptocom/exchange/pairs.py @@ -1,399 +1,540 @@ from .structs import Pair -AAVE_BTC = Pair("AAVE_BTC", price_precision=7, quantity_precision=4) -AAVE_USDC = Pair("AAVE_USDC", price_precision=2, quantity_precision=4) -AAVE_USDT = Pair("AAVE_USDT", price_precision=3, quantity_precision=4) -ACA_BTC = Pair("ACA_BTC", price_precision=9, quantity_precision=2) -ACA_USDT = Pair("ACA_USDT", price_precision=4, quantity_precision=2) +AAVE_BTC = Pair("AAVE_BTC", price_precision=7, quantity_precision=3) +AAVE_USD = Pair("AAVE_USD", price_precision=3, quantity_precision=3) +AAVE_USDT = Pair("AAVE_USDT", price_precision=3, quantity_precision=3) +ACA_BTC = Pair("ACA_BTC", price_precision=10, quantity_precision=0) +ACA_USD = Pair("ACA_USD", price_precision=5, quantity_precision=0) +ACA_USDT = Pair("ACA_USDT", price_precision=5, quantity_precision=0) +ACH_USD = Pair("ACH_USD", price_precision=6, quantity_precision=0) ACH_USDT = Pair("ACH_USDT", price_precision=6, quantity_precision=0) ADA_BTC = Pair("ADA_BTC", price_precision=9, quantity_precision=0) -ADA_USDC = Pair("ADA_USDC", price_precision=5, quantity_precision=1) -ADA_USDT = Pair("ADA_USDT", price_precision=5, quantity_precision=1) -AERGO_BTC = Pair("AERGO_BTC", price_precision=10, quantity_precision=1) -AERGO_USDT = Pair("AERGO_USDT", price_precision=5, quantity_precision=1) -AGLD_USDT = Pair("AGLD_USDT", price_precision=4, quantity_precision=2) +ADA_USD = Pair("ADA_USD", price_precision=5, quantity_precision=0) +ADA_USDT = Pair("ADA_USDT", price_precision=5, quantity_precision=0) +AERGO_BTC = Pair("AERGO_BTC", price_precision=10, quantity_precision=0) +AERGO_USD = Pair("AERGO_USD", price_precision=5, quantity_precision=0) +AERGO_USDT = Pair("AERGO_USDT", price_precision=5, quantity_precision=0) +AGLD_USD = Pair("AGLD_USD", price_precision=5, quantity_precision=0) +AGLD_USDT = Pair("AGLD_USDT", price_precision=5, quantity_precision=0) +AIOZ_USD = Pair("AIOZ_USD", price_precision=6, quantity_precision=0) AIOZ_USDT = Pair("AIOZ_USDT", price_precision=6, quantity_precision=0) -AKT_USDT = Pair("AKT_USDT", price_precision=4, quantity_precision=2) -ALGO_BTC = Pair("ALGO_BTC", price_precision=8, quantity_precision=2) -ALGO_USDC = Pair("ALGO_USDC", price_precision=4, quantity_precision=2) -ALGO_USDT = Pair("ALGO_USDT", price_precision=4, quantity_precision=2) -ALICE_BTC = Pair("ALICE_BTC", price_precision=8, quantity_precision=3) -ALICE_USDT = Pair("ALICE_USDT", price_precision=3, quantity_precision=3) -ALI_BTC = Pair("ALI_BTC", price_precision=10, quantity_precision=1) +AKT_USD = Pair("AKT_USD", price_precision=5, quantity_precision=0) +AKT_USDT = Pair("AKT_USDT", price_precision=5, quantity_precision=0) +ALGO_BTC = Pair("ALGO_BTC", price_precision=9, quantity_precision=0) +ALGO_USD = Pair("ALGO_USD", price_precision=5, quantity_precision=0) +ALGO_USDT = Pair("ALGO_USDT", price_precision=5, quantity_precision=0) +ALICE_BTC = Pair("ALICE_BTC", price_precision=8, quantity_precision=1) +ALICE_USD = Pair("ALICE_USD", price_precision=4, quantity_precision=1) +ALICE_USDT = Pair("ALICE_USDT", price_precision=4, quantity_precision=1) +ALI_BTC = Pair("ALI_BTC", price_precision=11, quantity_precision=0) +ALI_USD = Pair("ALI_USD", price_precision=6, quantity_precision=0) ALI_USDT = Pair("ALI_USDT", price_precision=6, quantity_precision=0) -ALPHA_USDT = Pair("ALPHA_USDT", price_precision=5, quantity_precision=1) -AMP_USDT = Pair("AMP_USDT", price_precision=5, quantity_precision=1) -ANKR_USDT = Pair("ANKR_USDT", price_precision=6, quantity_precision=1) -APE_BTC = Pair("APE_BTC", price_precision=8, quantity_precision=3) -APE_USDC = Pair("APE_USDC", price_precision=4, quantity_precision=2) -APE_USDT = Pair("APE_USDT", price_precision=4, quantity_precision=2) -API3_BTC = Pair("API3_BTC", price_precision=8, quantity_precision=3) -API3_USDC = Pair("API3_USDC", price_precision=4, quantity_precision=2) -API3_USDT = Pair("API3_USDT", price_precision=4, quantity_precision=2) +ALPHA_USD = Pair("ALPHA_USD", price_precision=5, quantity_precision=0) +ALPHA_USDT = Pair("ALPHA_USDT", price_precision=5, quantity_precision=0) +AMP_USD = Pair("AMP_USD", price_precision=7, quantity_precision=0) +AMP_USDT = Pair("AMP_USDT", price_precision=7, quantity_precision=0) +ANKR_USD = Pair("ANKR_USD", price_precision=6, quantity_precision=0) +ANKR_USDT = Pair("ANKR_USDT", price_precision=6, quantity_precision=0) +APE_BTC = Pair("APE_BTC", price_precision=8, quantity_precision=1) +APE_USD = Pair("APE_USD", price_precision=4, quantity_precision=1) +APE_USDT = Pair("APE_USDT", price_precision=4, quantity_precision=1) +API3_BTC = Pair("API3_BTC", price_precision=9, quantity_precision=1) +API3_USD = Pair("API3_USD", price_precision=4, quantity_precision=1) +API3_USDT = Pair("API3_USDT", price_precision=4, quantity_precision=1) +APT_USD = Pair("APT_USD", price_precision=4, quantity_precision=2) APT_USDT = Pair("APT_USDT", price_precision=4, quantity_precision=2) -ARPA_USDC = Pair("ARPA_USDC", price_precision=5, quantity_precision=1) -AR_USDC = Pair("AR_USDC", price_precision=3, quantity_precision=3) -AR_USDT = Pair("AR_USDT", price_precision=3, quantity_precision=3) +ARPA_USD = Pair("ARPA_USD", price_precision=6, quantity_precision=0) +AR_USD = Pair("AR_USD", price_precision=3, quantity_precision=2) +AR_USDT = Pair("AR_USDT", price_precision=3, quantity_precision=2) +ASTR_USD = Pair("ASTR_USD", price_precision=6, quantity_precision=0) ASTR_USDT = Pair("ASTR_USDT", price_precision=6, quantity_precision=0) -ATOM_BTC = Pair("ATOM_BTC", price_precision=7, quantity_precision=2) +ATOM_BTC = Pair("ATOM_BTC", price_precision=8, quantity_precision=2) ATOM_CRO = Pair("ATOM_CRO", price_precision=2, quantity_precision=2) -ATOM_USDC = Pair("ATOM_USDC", price_precision=3, quantity_precision=3) +ATOM_USD = Pair("ATOM_USD", price_precision=3, quantity_precision=2) ATOM_USDT = Pair("ATOM_USDT", price_precision=3, quantity_precision=2) -AUDIO_BTC = Pair("AUDIO_BTC", price_precision=9, quantity_precision=2) -AUDIO_USDC = Pair("AUDIO_USDC", price_precision=4, quantity_precision=2) -AUDIO_USDT = Pair("AUDIO_USDT", price_precision=4, quantity_precision=2) -AURORA_USDT = Pair("AURORA_USDT", price_precision=4, quantity_precision=2) -AUTO_USDT = Pair("AUTO_USDT", price_precision=2, quantity_precision=4) -AVAX_BTC = Pair("AVAX_BTC", price_precision=7, quantity_precision=3) -AVAX_USDC = Pair("AVAX_USDC", price_precision=3, quantity_precision=3) -AVAX_USDT = Pair("AVAX_USDT", price_precision=3, quantity_precision=3) -AXS_BTC = Pair("AXS_BTC", price_precision=7, quantity_precision=3) -AXS_USDC = Pair("AXS_USDC", price_precision=3, quantity_precision=3) -AXS_USDT = Pair("AXS_USDT", price_precision=4, quantity_precision=2) -BADGER_USDT = Pair("BADGER_USDT", price_precision=3, quantity_precision=3) -BAL_BTC = Pair("BAL_BTC", price_precision=8, quantity_precision=3) -BAL_USDT = Pair("BAL_USDT", price_precision=3, quantity_precision=3) -BAND_USDT = Pair("BAND_USDT", price_precision=4, quantity_precision=2) -BAT_USDT = Pair("BAT_USDT", price_precision=4, quantity_precision=2) -BCH_BTC = Pair("BCH_BTC", price_precision=6, quantity_precision=3) -BCH_USDT = Pair("BCH_USDT", price_precision=2, quantity_precision=5) -BICO_USDT = Pair("BICO_USDT", price_precision=4, quantity_precision=2) -BIFI_USDT = Pair("BIFI_USDT", price_precision=2, quantity_precision=5) -BNT_USDT = Pair("BNT_USDT", price_precision=4, quantity_precision=3) -BOND_USDC = Pair("BOND_USDC", price_precision=3, quantity_precision=3) -BOND_USDT = Pair("BOND_USDT", price_precision=3, quantity_precision=3) -BOSON_USDT = Pair("BOSON_USDT", price_precision=4, quantity_precision=2) -BRZ_USDT = Pair("BRZ_USDT", price_precision=5, quantity_precision=1) -BTC_USDC = Pair("BTC_USDC", price_precision=2, quantity_precision=6) -BTC_USDT = Pair("BTC_USDT", price_precision=2, quantity_precision=6) -BUSD_USDT = Pair("BUSD_USDT", price_precision=4, quantity_precision=2) -C98_USDT = Pair("C98_USDT", price_precision=4, quantity_precision=2) -CELR_USDC = Pair("CELR_USDC", price_precision=6, quantity_precision=0) -CELR_USDT = Pair("CELR_USDT", price_precision=6, quantity_precision=1) -CHESS_USDT = Pair("CHESS_USDT", price_precision=5, quantity_precision=1) -CHR_BTC = Pair("CHR_BTC", price_precision=10, quantity_precision=1) -CHR_USDT = Pair("CHR_USDT", price_precision=5, quantity_precision=1) -CHZ_BTC = Pair("CHZ_BTC", price_precision=10, quantity_precision=1) -CHZ_USDT = Pair("CHZ_USDT", price_precision=5, quantity_precision=2) -CKB_USDT = Pair("CKB_USDT", price_precision=6, quantity_precision=0) -COMP_BTC = Pair("COMP_BTC", price_precision=7, quantity_precision=4) -COMP_USDT = Pair("COMP_USDT", price_precision=2, quantity_precision=5) -COTI_BTC = Pair("COTI_BTC", price_precision=10, quantity_precision=1) -COTI_USDC = Pair("COTI_USDC", price_precision=5, quantity_precision=1) -COTI_USDT = Pair("COTI_USDT", price_precision=5, quantity_precision=1) -CQT_USDT = Pair("CQT_USDT", price_precision=4, quantity_precision=2) -CRO_BTC = Pair("CRO_BTC", price_precision=9, quantity_precision=2) -CRO_USDC = Pair("CRO_USDC", price_precision=5, quantity_precision=3) -CRO_USDT = Pair("CRO_USDT", price_precision=5, quantity_precision=3) -CRPT_USDT = Pair("CRPT_USDT", price_precision=5, quantity_precision=1) -CRV_BTC = Pair("CRV_BTC", price_precision=8, quantity_precision=2) -CRV_USDC = Pair("CRV_USDC", price_precision=4, quantity_precision=2) -CRV_USDT = Pair("CRV_USDT", price_precision=4, quantity_precision=4) -CSPR_BTC = Pair("CSPR_BTC", price_precision=10, quantity_precision=1) -CSPR_USDT = Pair("CSPR_USDT", price_precision=5, quantity_precision=1) -CTSI_USDT = Pair("CTSI_USDT", price_precision=5, quantity_precision=1) -CUDOS_USDT = Pair("CUDOS_USDT", price_precision=6, quantity_precision=0) -CVX_USDC = Pair("CVX_USDC", price_precision=3, quantity_precision=3) -CVX_USDT = Pair("CVX_USDT", price_precision=3, quantity_precision=3) -DAI_USDC = Pair("DAI_USDC", price_precision=4, quantity_precision=2) -DAI_USDT = Pair("DAI_USDT", price_precision=4, quantity_precision=3) -DAR_BTC = Pair("DAR_BTC", price_precision=9, quantity_precision=2) -DAR_USDC = Pair("DAR_USDC", price_precision=5, quantity_precision=1) -DAR_USDT = Pair("DAR_USDT", price_precision=4, quantity_precision=2) -DERC_USDC = Pair("DERC_USDC", price_precision=4, quantity_precision=2) -DERC_USDT = Pair("DERC_USDT", price_precision=4, quantity_precision=2) -DGB_USDC = Pair("DGB_USDC", price_precision=6, quantity_precision=0) -DIA_USDT = Pair("DIA_USDT", price_precision=4, quantity_precision=2) -DOGE_BTC = Pair("DOGE_BTC", price_precision=10, quantity_precision=1) -DOGE_USDC = Pair("DOGE_USDC", price_precision=5, quantity_precision=1) -DOGE_USDT = Pair("DOGE_USDT", price_precision=5, quantity_precision=2) -DOT_BTC = Pair("DOT_BTC", price_precision=7, quantity_precision=4) -DOT_USDC = Pair("DOT_USDC", price_precision=3, quantity_precision=3) -DOT_USDT = Pair("DOT_USDT", price_precision=4, quantity_precision=3) -DYDX_BTC = Pair("DYDX_BTC", price_precision=8, quantity_precision=3) -DYDX_USDC = Pair("DYDX_USDC", price_precision=3, quantity_precision=3) -DYDX_USDT = Pair("DYDX_USDT", price_precision=3, quantity_precision=3) -EFI_BTC = Pair("EFI_BTC", price_precision=9, quantity_precision=2) -EFI_USDT = Pair("EFI_USDT", price_precision=4, quantity_precision=2) -EGLD_BTC = Pair("EGLD_BTC", price_precision=7, quantity_precision=4) -EGLD_USDC = Pair("EGLD_USDC", price_precision=2, quantity_precision=4) -EGLD_USDT = Pair("EGLD_USDT", price_precision=4, quantity_precision=3) -ELON_USDC = Pair("ELON_USDC", price_precision=10, quantity_precision=0) -ELON_USDT = Pair("ELON_USDT", price_precision=10, quantity_precision=0) -ENJ_BTC = Pair("ENJ_BTC", price_precision=9, quantity_precision=2) -ENJ_USDC = Pair("ENJ_USDC", price_precision=4, quantity_precision=2) +AUDIO_BTC = Pair("AUDIO_BTC", price_precision=9, quantity_precision=0) +AUDIO_USD = Pair("AUDIO_USD", price_precision=5, quantity_precision=0) +AUDIO_USDT = Pair("AUDIO_USDT", price_precision=5, quantity_precision=0) +AURORA_USD = Pair("AURORA_USD", price_precision=4, quantity_precision=1) +AURORA_USDT = Pair("AURORA_USDT", price_precision=4, quantity_precision=1) +AUTO_USD = Pair("AUTO_USD", price_precision=2, quantity_precision=3) +AUTO_USDT = Pair("AUTO_USDT", price_precision=2, quantity_precision=3) +AVAX_BTC = Pair("AVAX_BTC", price_precision=8, quantity_precision=2) +AVAX_USD = Pair("AVAX_USD", price_precision=3, quantity_precision=2) +AVAX_USDT = Pair("AVAX_USDT", price_precision=3, quantity_precision=2) +AXS_BTC = Pair("AXS_BTC", price_precision=8, quantity_precision=2) +AXS_USD = Pair("AXS_USD", price_precision=3, quantity_precision=2) +AXS_USDT = Pair("AXS_USDT", price_precision=3, quantity_precision=2) +BADGER_USD = Pair("BADGER_USD", price_precision=4, quantity_precision=1) +BADGER_USDT = Pair("BADGER_USDT", price_precision=4, quantity_precision=1) +BAL_BTC = Pair("BAL_BTC", price_precision=8, quantity_precision=2) +BAL_USD = Pair("BAL_USD", price_precision=4, quantity_precision=2) +BAL_USDT = Pair("BAL_USDT", price_precision=4, quantity_precision=2) +BAND_USD = Pair("BAND_USD", price_precision=4, quantity_precision=1) +BAND_USDT = Pair("BAND_USDT", price_precision=4, quantity_precision=1) +BAT_USD = Pair("BAT_USD", price_precision=5, quantity_precision=0) +BAT_USDT = Pair("BAT_USDT", price_precision=5, quantity_precision=0) +BCH_BTC = Pair("BCH_BTC", price_precision=7, quantity_precision=3) +BCH_USD = Pair("BCH_USD", price_precision=2, quantity_precision=3) +BCH_USDT = Pair("BCH_USDT", price_precision=2, quantity_precision=3) +BICO_USD = Pair("BICO_USD", price_precision=5, quantity_precision=1) +BICO_USDT = Pair("BICO_USDT", price_precision=5, quantity_precision=1) +BIFI_USD = Pair("BIFI_USD", price_precision=2, quantity_precision=3) +BIFI_USDT = Pair("BIFI_USDT", price_precision=2, quantity_precision=3) +BNT_USD = Pair("BNT_USD", price_precision=5, quantity_precision=0) +BNT_USDT = Pair("BNT_USDT", price_precision=5, quantity_precision=0) +BOND_USD = Pair("BOND_USD", price_precision=4, quantity_precision=2) +BOND_USDT = Pair("BOND_USDT", price_precision=4, quantity_precision=2) +BOSON_USD = Pair("BOSON_USD", price_precision=5, quantity_precision=0) +BOSON_USDT = Pair("BOSON_USDT", price_precision=5, quantity_precision=0) +BRZ_USD = Pair("BRZ_USD", price_precision=5, quantity_precision=0) +BRZ_USDT = Pair("BRZ_USDT", price_precision=5, quantity_precision=0) +BTC_USD = Pair("BTC_USD", price_precision=2, quantity_precision=5) +BTC_USDT = Pair("BTC_USDT", price_precision=2, quantity_precision=5) +C98_USD = Pair("C98_USD", price_precision=5, quantity_precision=0) +C98_USDT = Pair("C98_USDT", price_precision=5, quantity_precision=0) +CELR_USD = Pair("CELR_USD", price_precision=6, quantity_precision=0) +CELR_USDT = Pair("CELR_USDT", price_precision=6, quantity_precision=0) +CHESS_USD = Pair("CHESS_USD", price_precision=5, quantity_precision=0) +CHESS_USDT = Pair("CHESS_USDT", price_precision=5, quantity_precision=0) +CHR_BTC = Pair("CHR_BTC", price_precision=10, quantity_precision=0) +CHR_USD = Pair("CHR_USD", price_precision=5, quantity_precision=0) +CHR_USDT = Pair("CHR_USDT", price_precision=5, quantity_precision=0) +CHZ_BTC = Pair("CHZ_BTC", price_precision=9, quantity_precision=0) +CHZ_USD = Pair("CHZ_USD", price_precision=5, quantity_precision=0) +CHZ_USDT = Pair("CHZ_USDT", price_precision=5, quantity_precision=0) +CKB_USD = Pair("CKB_USD", price_precision=7, quantity_precision=0) +CKB_USDT = Pair("CKB_USDT", price_precision=7, quantity_precision=0) +COMP_BTC = Pair("COMP_BTC", price_precision=7, quantity_precision=2) +COMP_USD = Pair("COMP_USD", price_precision=3, quantity_precision=2) +COMP_USDT = Pair("COMP_USDT", price_precision=3, quantity_precision=2) +COTI_BTC = Pair("COTI_BTC", price_precision=10, quantity_precision=0) +COTI_USD = Pair("COTI_USD", price_precision=6, quantity_precision=0) +COTI_USDT = Pair("COTI_USDT", price_precision=6, quantity_precision=0) +CQT_USD = Pair("CQT_USD", price_precision=6, quantity_precision=0) +CQT_USDT = Pair("CQT_USDT", price_precision=6, quantity_precision=0) +CRO_BTC = Pair("CRO_BTC", price_precision=10, quantity_precision=0) +CRO_USD = Pair("CRO_USD", price_precision=5, quantity_precision=0) +CRO_USDT = Pair("CRO_USDT", price_precision=5, quantity_precision=0) +CRPT_USD = Pair("CRPT_USD", price_precision=5, quantity_precision=0) +CRPT_USDT = Pair("CRPT_USDT", price_precision=5, quantity_precision=0) +CRV_BTC = Pair("CRV_BTC", price_precision=9, quantity_precision=1) +CRV_USD = Pair("CRV_USD", price_precision=4, quantity_precision=1) +CRV_USDT = Pair("CRV_USDT", price_precision=4, quantity_precision=1) +CSPR_BTC = Pair("CSPR_BTC", price_precision=10, quantity_precision=0) +CSPR_USD = Pair("CSPR_USD", price_precision=6, quantity_precision=0) +CSPR_USDT = Pair("CSPR_USDT", price_precision=6, quantity_precision=0) +CTSI_USD = Pair("CTSI_USD", price_precision=5, quantity_precision=0) +CTSI_USDT = Pair("CTSI_USDT", price_precision=5, quantity_precision=0) +CUDOS_USD = Pair("CUDOS_USD", price_precision=7, quantity_precision=0) +CUDOS_USDT = Pair("CUDOS_USDT", price_precision=7, quantity_precision=0) +CVX_USD = Pair("CVX_USD", price_precision=4, quantity_precision=2) +CVX_USDT = Pair("CVX_USDT", price_precision=4, quantity_precision=2) +DAI_USD = Pair("DAI_USD", price_precision=5, quantity_precision=1) +DAI_USDT = Pair("DAI_USDT", price_precision=5, quantity_precision=1) +DAR_BTC = Pair("DAR_BTC", price_precision=9, quantity_precision=0) +DAR_USD = Pair("DAR_USD", price_precision=5, quantity_precision=0) +DAR_USDT = Pair("DAR_USDT", price_precision=5, quantity_precision=0) +DERC_USD = Pair("DERC_USD", price_precision=5, quantity_precision=0) +DERC_USDT = Pair("DERC_USDT", price_precision=5, quantity_precision=0) +DGB_USD = Pair("DGB_USD", price_precision=6, quantity_precision=0) +DIA_USD = Pair("DIA_USD", price_precision=5, quantity_precision=0) +DIA_USDT = Pair("DIA_USDT", price_precision=5, quantity_precision=0) +DOGE_BTC = Pair("DOGE_BTC", price_precision=10, quantity_precision=0) +DOGE_USD = Pair("DOGE_USD", price_precision=6, quantity_precision=0) +DOGE_USDT = Pair("DOGE_USDT", price_precision=6, quantity_precision=0) +DOT_BTC = Pair("DOT_BTC", price_precision=8, quantity_precision=2) +DOT_USD = Pair("DOT_USD", price_precision=4, quantity_precision=2) +DOT_USDT = Pair("DOT_USDT", price_precision=4, quantity_precision=2) +DYDX_BTC = Pair("DYDX_BTC", price_precision=9, quantity_precision=1) +DYDX_USD = Pair("DYDX_USD", price_precision=4, quantity_precision=1) +DYDX_USDT = Pair("DYDX_USDT", price_precision=4, quantity_precision=1) +EFI_BTC = Pair("EFI_BTC", price_precision=10, quantity_precision=0) +EFI_USD = Pair("EFI_USD", price_precision=5, quantity_precision=0) +EFI_USDT = Pair("EFI_USDT", price_precision=5, quantity_precision=0) +EGLD_BTC = Pair("EGLD_BTC", price_precision=7, quantity_precision=3) +EGLD_USD = Pair("EGLD_USD", price_precision=3, quantity_precision=3) +EGLD_USDT = Pair("EGLD_USDT", price_precision=3, quantity_precision=3) +ELON_USD = Pair("ELON_USD", price_precision=11, quantity_precision=0) +ELON_USDT = Pair("ELON_USDT", price_precision=11, quantity_precision=0) +ENJ_BTC = Pair("ENJ_BTC", price_precision=9, quantity_precision=1) +ENJ_USD = Pair("ENJ_USD", price_precision=5, quantity_precision=1) ENJ_USDT = Pair("ENJ_USDT", price_precision=5, quantity_precision=1) -ENS_BTC = Pair("ENS_BTC", price_precision=8, quantity_precision=3) -ENS_USDC = Pair("ENS_USDC", price_precision=3, quantity_precision=3) -ENS_USDT = Pair("ENS_USDT", price_precision=3, quantity_precision=3) -EOS_BTC = Pair("EOS_BTC", price_precision=8, quantity_precision=2) -EOS_USDT = Pair("EOS_USDT", price_precision=4, quantity_precision=2) -EPX_BTC = Pair("EPX_BTC", price_precision=10, quantity_precision=0) -EPX_USDC = Pair("EPX_USDC", price_precision=7, quantity_precision=0) -EPX_USDT = Pair("EPX_USDT", price_precision=7, quantity_precision=0) -ERN_USDT = Pair("ERN_USDT", price_precision=4, quantity_precision=2) -ETC_BTC = Pair("ETC_BTC", price_precision=7, quantity_precision=3) -ETC_USDC = Pair("ETC_USDC", price_precision=3, quantity_precision=3) -ETC_USDT = Pair("ETC_USDT", price_precision=3, quantity_precision=3) +ENS_BTC = Pair("ENS_BTC", price_precision=8, quantity_precision=2) +ENS_USD = Pair("ENS_USD", price_precision=3, quantity_precision=2) +ENS_USDT = Pair("ENS_USDT", price_precision=3, quantity_precision=2) +EOS_BTC = Pair("EOS_BTC", price_precision=9, quantity_precision=1) +EOS_USD = Pair("EOS_USD", price_precision=4, quantity_precision=1) +EOS_USDT = Pair("EOS_USDT", price_precision=4, quantity_precision=1) +EPX_BTC = Pair("EPX_BTC", price_precision=12, quantity_precision=0) +EPX_USD = Pair("EPX_USD", price_precision=8, quantity_precision=0) +EPX_USDT = Pair("EPX_USDT", price_precision=8, quantity_precision=0) +ERN_USD = Pair("ERN_USD", price_precision=4, quantity_precision=1) +ERN_USDT = Pair("ERN_USDT", price_precision=4, quantity_precision=1) +ETC_BTC = Pair("ETC_BTC", price_precision=7, quantity_precision=2) +ETC_USD = Pair("ETC_USD", price_precision=3, quantity_precision=2) +ETC_USDT = Pair("ETC_USDT", price_precision=3, quantity_precision=2) +ETHW_USD = Pair("ETHW_USD", price_precision=4, quantity_precision=2) ETHW_USDT = Pair("ETHW_USDT", price_precision=4, quantity_precision=2) -ETH_BTC = Pair("ETH_BTC", price_precision=6, quantity_precision=5) -ETH_CRO = Pair("ETH_CRO", price_precision=2, quantity_precision=5) -ETH_USDC = Pair("ETH_USDC", price_precision=2, quantity_precision=5) -ETH_USDT = Pair("ETH_USDT", price_precision=2, quantity_precision=5) -FARM_USDC = Pair("FARM_USDC", price_precision=2, quantity_precision=4) -FER_USDC = Pair("FER_USDC", price_precision=6, quantity_precision=0) -FET_USDT = Pair("FET_USDT", price_precision=5, quantity_precision=1) -FIL_BTC = Pair("FIL_BTC", price_precision=7, quantity_precision=3) -FIL_USDC = Pair("FIL_USDC", price_precision=3, quantity_precision=3) -FIL_USDT = Pair("FIL_USDT", price_precision=3, quantity_precision=3) -FITFI_BTC = Pair("FITFI_BTC", price_precision=9, quantity_precision=2) -FITFI_USDT = Pair("FITFI_USDT", price_precision=5, quantity_precision=1) -FLOW_BTC = Pair("FLOW_BTC", price_precision=8, quantity_precision=2) -FLOW_USDC = Pair("FLOW_USDC", price_precision=4, quantity_precision=2) -FLOW_USDT = Pair("FLOW_USDT", price_precision=3, quantity_precision=4) -FLUX_USDT = Pair("FLUX_USDT", price_precision=4, quantity_precision=2) -FORTH_USDT = Pair("FORTH_USDT", price_precision=3, quantity_precision=3) -FTM_BTC = Pair("FTM_BTC", price_precision=9, quantity_precision=2) -FTM_USDC = Pair("FTM_USDC", price_precision=4, quantity_precision=2) -FTM_USDT = Pair("FTM_USDT", price_precision=4, quantity_precision=2) -FXS_BTC = Pair("FXS_BTC", price_precision=8, quantity_precision=3) -FXS_USDC = Pair("FXS_USDC", price_precision=4, quantity_precision=2) -FXS_USDT = Pair("FXS_USDT", price_precision=3, quantity_precision=2) -GALA_BTC = Pair("GALA_BTC", price_precision=9, quantity_precision=1) -GALA_USDC = Pair("GALA_USDC", price_precision=5, quantity_precision=1) +ETH_BTC = Pair("ETH_BTC", price_precision=6, quantity_precision=4) +ETH_CRO = Pair("ETH_CRO", price_precision=2, quantity_precision=4) +ETH_USD = Pair("ETH_USD", price_precision=2, quantity_precision=4) +ETH_USDT = Pair("ETH_USDT", price_precision=2, quantity_precision=4) +FARM_USD = Pair("FARM_USD", price_precision=3, quantity_precision=2) +FER_USD = Pair("FER_USD", price_precision=6, quantity_precision=0) +FET_USD = Pair("FET_USD", price_precision=6, quantity_precision=0) +FET_USDT = Pair("FET_USDT", price_precision=6, quantity_precision=0) +FIL_BTC = Pair("FIL_BTC", price_precision=8, quantity_precision=2) +FIL_USD = Pair("FIL_USD", price_precision=4, quantity_precision=2) +FIL_USDT = Pair("FIL_USDT", price_precision=4, quantity_precision=2) +FITFI_BTC = Pair("FITFI_BTC", price_precision=10, quantity_precision=0) +FITFI_USD = Pair("FITFI_USD", price_precision=6, quantity_precision=0) +FITFI_USDT = Pair("FITFI_USDT", price_precision=6, quantity_precision=0) +FLOW_BTC = Pair("FLOW_BTC", price_precision=8, quantity_precision=1) +FLOW_USD = Pair("FLOW_USD", price_precision=4, quantity_precision=1) +FLOW_USDT = Pair("FLOW_USDT", price_precision=4, quantity_precision=1) +FLUX_USD = Pair("FLUX_USD", price_precision=5, quantity_precision=1) +FLUX_USDT = Pair("FLUX_USDT", price_precision=5, quantity_precision=1) +FORTH_USD = Pair("FORTH_USD", price_precision=4, quantity_precision=1) +FORTH_USDT = Pair("FORTH_USDT", price_precision=4, quantity_precision=1) +FTM_BTC = Pair("FTM_BTC", price_precision=9, quantity_precision=0) +FTM_USD = Pair("FTM_USD", price_precision=5, quantity_precision=0) +FTM_USDT = Pair("FTM_USDT", price_precision=5, quantity_precision=0) +FXS_BTC = Pair("FXS_BTC", price_precision=8, quantity_precision=2) +FXS_USD = Pair("FXS_USD", price_precision=4, quantity_precision=2) +FXS_USDT = Pair("FXS_USDT", price_precision=4, quantity_precision=2) +GALA_BTC = Pair("GALA_BTC", price_precision=10, quantity_precision=0) +GALA_USD = Pair("GALA_USD", price_precision=6, quantity_precision=0) GALA_USDT = Pair("GALA_USDT", price_precision=6, quantity_precision=0) -GAL_USDC = Pair("GAL_USDC", price_precision=4, quantity_precision=2) -GAL_USDT = Pair("GAL_USDT", price_precision=4, quantity_precision=2) +GAL_USD = Pair("GAL_USD", price_precision=4, quantity_precision=1) +GAL_USDT = Pair("GAL_USDT", price_precision=4, quantity_precision=1) +GARI_USD = Pair("GARI_USD", price_precision=6, quantity_precision=0) GARI_USDT = Pair("GARI_USDT", price_precision=6, quantity_precision=0) -GHST_USDC = Pair("GHST_USDC", price_precision=4, quantity_precision=2) -GLMR_BTC = Pair("GLMR_BTC", price_precision=9, quantity_precision=2) -GLMR_USDT = Pair("GLMR_USDT", price_precision=4, quantity_precision=2) -GLM_USDT = Pair("GLM_USDT", price_precision=5, quantity_precision=1) -GMX_USDT = Pair("GMX_USDT", price_precision=3, quantity_precision=3) -GODS_USDC = Pair("GODS_USDC", price_precision=4, quantity_precision=2) -GODS_USDT = Pair("GODS_USDT", price_precision=4, quantity_precision=2) -GRT_BTC = Pair("GRT_BTC", price_precision=10, quantity_precision=1) -GRT_USDT = Pair("GRT_USDT", price_precision=5, quantity_precision=2) -GTC_USDT = Pair("GTC_USDT", price_precision=3, quantity_precision=3) -HBAR_BTC = Pair("HBAR_BTC", price_precision=10, quantity_precision=1) -HBAR_USDT = Pair("HBAR_USDT", price_precision=5, quantity_precision=1) -HERO_USDT = Pair("HERO_USDT", price_precision=6, quantity_precision=0) -HIGH_USDT = Pair("HIGH_USDT", price_precision=4, quantity_precision=2) -HNT_USDT = Pair("HNT_USDT", price_precision=3, quantity_precision=3) -HOD_USDT = Pair("HOD_USDT", price_precision=6, quantity_precision=0) -HOT_USDT = Pair("HOT_USDT", price_precision=6, quantity_precision=0) -ICP_BTC = Pair("ICP_BTC", price_precision=8, quantity_precision=3) -ICP_USDC = Pair("ICP_USDC", price_precision=3, quantity_precision=3) -ICP_USDT = Pair("ICP_USDT", price_precision=3, quantity_precision=3) -ICX_BTC = Pair("ICX_BTC", price_precision=8, quantity_precision=1) -ICX_USDT = Pair("ICX_USDT", price_precision=4, quantity_precision=2) -ILV_BTC = Pair("ILV_BTC", price_precision=6, quantity_precision=4) -ILV_USDT = Pair("ILV_USDT", price_precision=2, quantity_precision=4) -IMX_BTC = Pair("IMX_BTC", price_precision=9, quantity_precision=2) -IMX_USDC = Pair("IMX_USDC", price_precision=4, quantity_precision=2) -IMX_USDT = Pair("IMX_USDT", price_precision=4, quantity_precision=2) -INJ_USDC = Pair("INJ_USDC", price_precision=4, quantity_precision=2) -INJ_USDT = Pair("INJ_USDT", price_precision=3, quantity_precision=3) -IOTX_USDC = Pair("IOTX_USDC", price_precision=6, quantity_precision=0) -IOTX_USDT = Pair("IOTX_USDT", price_precision=5, quantity_precision=1) -IQ_USDT = Pair("IQ_USDT", price_precision=6, quantity_precision=0) -JASMY_BTC = Pair("JASMY_BTC", price_precision=10, quantity_precision=1) -JASMY_USDC = Pair("JASMY_USDC", price_precision=5, quantity_precision=1) -JASMY_USDT = Pair("JASMY_USDT", price_precision=5, quantity_precision=1) -JOE_USDT = Pair("JOE_USDT", price_precision=5, quantity_precision=1) -KAVA_USDT = Pair("KAVA_USDT", price_precision=4, quantity_precision=2) -KLAY_USDT = Pair("KLAY_USDT", price_precision=4, quantity_precision=2) -KNC_BTC = Pair("KNC_BTC", price_precision=9, quantity_precision=2) -KNC_USDT = Pair("KNC_USDT", price_precision=4, quantity_precision=3) -KP3R_USDT = Pair("KP3R_USDT", price_precision=2, quantity_precision=4) -KRL_USDT = Pair("KRL_USDT", price_precision=5, quantity_precision=1) -KSM_BTC = Pair("KSM_BTC", price_precision=7, quantity_precision=4) -KSM_USDC = Pair("KSM_USDC", price_precision=2, quantity_precision=4) -KSM_USDT = Pair("KSM_USDT", price_precision=3, quantity_precision=3) -LDO_BTC = Pair("LDO_BTC", price_precision=9, quantity_precision=2) -LDO_USDT = Pair("LDO_USDT", price_precision=4, quantity_precision=2) -LINK_BTC = Pair("LINK_BTC", price_precision=7, quantity_precision=2) -LINK_USDC = Pair("LINK_USDC", price_precision=3, quantity_precision=3) -LINK_USDT = Pair("LINK_USDT", price_precision=3, quantity_precision=2) +GHST_USD = Pair("GHST_USD", price_precision=4, quantity_precision=1) +GLMR_BTC = Pair("GLMR_BTC", price_precision=9, quantity_precision=1) +GLMR_USD = Pair("GLMR_USD", price_precision=5, quantity_precision=1) +GLMR_USDT = Pair("GLMR_USDT", price_precision=5, quantity_precision=1) +GLM_USD = Pair("GLM_USD", price_precision=5, quantity_precision=0) +GLM_USDT = Pair("GLM_USDT", price_precision=5, quantity_precision=0) +GMX_USD = Pair("GMX_USD", price_precision=3, quantity_precision=2) +GMX_USDT = Pair("GMX_USDT", price_precision=3, quantity_precision=2) +GODS_USD = Pair("GODS_USD", price_precision=5, quantity_precision=0) +GODS_USDT = Pair("GODS_USDT", price_precision=5, quantity_precision=0) +GRT_BTC = Pair("GRT_BTC", price_precision=10, quantity_precision=0) +GRT_USD = Pair("GRT_USD", price_precision=5, quantity_precision=0) +GRT_USDT = Pair("GRT_USDT", price_precision=5, quantity_precision=0) +GTC_USD = Pair("GTC_USD", price_precision=4, quantity_precision=1) +GTC_USDT = Pair("GTC_USDT", price_precision=4, quantity_precision=1) +HBAR_BTC = Pair("HBAR_BTC", price_precision=10, quantity_precision=0) +HBAR_USD = Pair("HBAR_USD", price_precision=6, quantity_precision=0) +HBAR_USDT = Pair("HBAR_USDT", price_precision=6, quantity_precision=0) +HERO_USD = Pair("HERO_USD", price_precision=7, quantity_precision=0) +HERO_USDT = Pair("HERO_USDT", price_precision=7, quantity_precision=0) +HIGH_USD = Pair("HIGH_USD", price_precision=4, quantity_precision=1) +HIGH_USDT = Pair("HIGH_USDT", price_precision=4, quantity_precision=1) +HNT_USD = Pair("HNT_USD", price_precision=4, quantity_precision=1) +HNT_USDT = Pair("HNT_USDT", price_precision=4, quantity_precision=1) +HOD_USD = Pair("HOD_USD", price_precision=7, quantity_precision=0) +HOD_USDT = Pair("HOD_USDT", price_precision=7, quantity_precision=0) +HOT_USD = Pair("HOT_USD", price_precision=7, quantity_precision=0) +HOT_USDT = Pair("HOT_USDT", price_precision=7, quantity_precision=0) +ICP_BTC = Pair("ICP_BTC", price_precision=8, quantity_precision=2) +ICP_USD = Pair("ICP_USD", price_precision=4, quantity_precision=2) +ICP_USDT = Pair("ICP_USDT", price_precision=4, quantity_precision=2) +ICX_BTC = Pair("ICX_BTC", price_precision=9, quantity_precision=0) +ICX_USD = Pair("ICX_USD", price_precision=5, quantity_precision=0) +ICX_USDT = Pair("ICX_USDT", price_precision=5, quantity_precision=0) +ILV_BTC = Pair("ILV_BTC", price_precision=7, quantity_precision=3) +ILV_USD = Pair("ILV_USD", price_precision=3, quantity_precision=3) +ILV_USDT = Pair("ILV_USDT", price_precision=3, quantity_precision=3) +IMX_BTC = Pair("IMX_BTC", price_precision=9, quantity_precision=1) +IMX_USD = Pair("IMX_USD", price_precision=5, quantity_precision=1) +IMX_USDT = Pair("IMX_USDT", price_precision=5, quantity_precision=1) +INJ_USD = Pair("INJ_USD", price_precision=4, quantity_precision=1) +INJ_USDT = Pair("INJ_USDT", price_precision=4, quantity_precision=1) +IOTX_USD = Pair("IOTX_USD", price_precision=6, quantity_precision=0) +IOTX_USDT = Pair("IOTX_USDT", price_precision=6, quantity_precision=0) +IQ_USD = Pair("IQ_USD", price_precision=7, quantity_precision=0) +IQ_USDT = Pair("IQ_USDT", price_precision=7, quantity_precision=0) +JASMY_BTC = Pair("JASMY_BTC", price_precision=11, quantity_precision=0) +JASMY_USD = Pair("JASMY_USD", price_precision=7, quantity_precision=0) +JASMY_USDT = Pair("JASMY_USDT", price_precision=7, quantity_precision=0) +JOE_USD = Pair("JOE_USD", price_precision=5, quantity_precision=0) +JOE_USDT = Pair("JOE_USDT", price_precision=5, quantity_precision=0) +KAVA_USD = Pair("KAVA_USD", price_precision=4, quantity_precision=1) +KAVA_USDT = Pair("KAVA_USDT", price_precision=4, quantity_precision=1) +KLAY_USD = Pair("KLAY_USD", price_precision=5, quantity_precision=0) +KLAY_USDT = Pair("KLAY_USDT", price_precision=5, quantity_precision=0) +KNC_BTC = Pair("KNC_BTC", price_precision=9, quantity_precision=1) +KNC_USD = Pair("KNC_USD", price_precision=4, quantity_precision=1) +KNC_USDT = Pair("KNC_USDT", price_precision=4, quantity_precision=1) +KP3R_USD = Pair("KP3R_USD", price_precision=2, quantity_precision=3) +KP3R_USDT = Pair("KP3R_USDT", price_precision=2, quantity_precision=3) +KRL_USD = Pair("KRL_USD", price_precision=5, quantity_precision=0) +KRL_USDT = Pair("KRL_USDT", price_precision=5, quantity_precision=0) +KSM_BTC = Pair("KSM_BTC", price_precision=7, quantity_precision=2) +KSM_USD = Pair("KSM_USD", price_precision=3, quantity_precision=2) +KSM_USDT = Pair("KSM_USDT", price_precision=3, quantity_precision=2) +LDO_BTC = Pair("LDO_BTC", price_precision=8, quantity_precision=1) +LDO_USD = Pair("LDO_USD", price_precision=4, quantity_precision=1) +LDO_USDT = Pair("LDO_USDT", price_precision=4, quantity_precision=1) +LINK_BTC = Pair("LINK_BTC", price_precision=8, quantity_precision=2) +LINK_USD = Pair("LINK_USD", price_precision=4, quantity_precision=2) +LINK_USDT = Pair("LINK_USDT", price_precision=4, quantity_precision=2) +LOKA_USD = Pair("LOKA_USD", price_precision=5, quantity_precision=1) LOKA_USDT = Pair("LOKA_USDT", price_precision=5, quantity_precision=1) -LPT_USDC = Pair("LPT_USDC", price_precision=3, quantity_precision=3) -LRC_USDT = Pair("LRC_USDT", price_precision=5, quantity_precision=2) -LSK_USDT = Pair("LSK_USDT", price_precision=4, quantity_precision=2) -LTC_BTC = Pair("LTC_BTC", price_precision=6, quantity_precision=4) -LTC_USDC = Pair("LTC_USDC", price_precision=2, quantity_precision=4) -LTC_USDT = Pair("LTC_USDT", price_precision=2, quantity_precision=5) -LUNA2_USDC = Pair("LUNA2_USDC", price_precision=4, quantity_precision=2) -LUNC_USDC = Pair("LUNC_USDC", price_precision=8, quantity_precision=0) +LPT_USD = Pair("LPT_USD", price_precision=3, quantity_precision=2) +LRC_USD = Pair("LRC_USD", price_precision=5, quantity_precision=0) +LRC_USDT = Pair("LRC_USDT", price_precision=5, quantity_precision=0) +LSK_USD = Pair("LSK_USD", price_precision=4, quantity_precision=1) +LSK_USDT = Pair("LSK_USDT", price_precision=4, quantity_precision=1) +LTC_BTC = Pair("LTC_BTC", price_precision=7, quantity_precision=3) +LTC_USD = Pair("LTC_USD", price_precision=3, quantity_precision=3) +LTC_USDT = Pair("LTC_USDT", price_precision=3, quantity_precision=3) +LUNA2_USD = Pair("LUNA2_USD", price_precision=4, quantity_precision=1) +LUNC_USD = Pair("LUNC_USD", price_precision=8, quantity_precision=0) MANA_BTC = Pair("MANA_BTC", price_precision=9, quantity_precision=1) -MANA_USDC = Pair("MANA_USDC", price_precision=4, quantity_precision=2) -MANA_USDT = Pair("MANA_USDT", price_precision=5, quantity_precision=2) -MASK_USDT = Pair("MASK_USDT", price_precision=4, quantity_precision=2) -MATIC_BTC = Pair("MATIC_BTC", price_precision=9, quantity_precision=0) -MATIC_USDC = Pair("MATIC_USDC", price_precision=5, quantity_precision=1) -MATIC_USDT = Pair("MATIC_USDT", price_precision=5, quantity_precision=2) -MBL_BTC = Pair("MBL_BTC", price_precision=10, quantity_precision=0) -MBL_USDT = Pair("MBL_USDT", price_precision=6, quantity_precision=0) -MC_USDT = Pair("MC_USDT", price_precision=4, quantity_precision=2) +MANA_USD = Pair("MANA_USD", price_precision=5, quantity_precision=1) +MANA_USDT = Pair("MANA_USDT", price_precision=5, quantity_precision=1) +MASK_USD = Pair("MASK_USD", price_precision=4, quantity_precision=1) +MASK_USDT = Pair("MASK_USDT", price_precision=4, quantity_precision=1) +MATIC_BTC = Pair("MATIC_BTC", price_precision=9, quantity_precision=1) +MATIC_USD = Pair("MATIC_USD", price_precision=5, quantity_precision=1) +MATIC_USDT = Pair("MATIC_USDT", price_precision=5, quantity_precision=1) +MBL_BTC = Pair("MBL_BTC", price_precision=11, quantity_precision=0) +MBL_USD = Pair("MBL_USD", price_precision=7, quantity_precision=0) +MBL_USDT = Pair("MBL_USDT", price_precision=7, quantity_precision=0) +MC_USD = Pair("MC_USD", price_precision=5, quantity_precision=1) +MC_USDT = Pair("MC_USDT", price_precision=5, quantity_precision=1) +MDT_USD = Pair("MDT_USD", price_precision=6, quantity_precision=0) MDT_USDT = Pair("MDT_USDT", price_precision=6, quantity_precision=0) -METIS_USDT = Pair("METIS_USDT", price_precision=3, quantity_precision=3) +METIS_USD = Pair("METIS_USD", price_precision=3, quantity_precision=2) +METIS_USDT = Pair("METIS_USDT", price_precision=3, quantity_precision=2) +MINA_USD = Pair("MINA_USD", price_precision=5, quantity_precision=1) MINA_USDT = Pair("MINA_USDT", price_precision=5, quantity_precision=1) -MKR_USDT = Pair("MKR_USDT", price_precision=2, quantity_precision=6) -MLN_USDC = Pair("MLN_USDC", price_precision=3, quantity_precision=3) -MMF_USDC = Pair("MMF_USDC", price_precision=4, quantity_precision=2) -MOVR_BTC = Pair("MOVR_BTC", price_precision=7, quantity_precision=4) -MOVR_USDT = Pair("MOVR_USDT", price_precision=2, quantity_precision=4) -MTD_USDC = Pair("MTD_USDC", price_precision=6, quantity_precision=0) -MULTI_BTC = Pair("MULTI_BTC", price_precision=8, quantity_precision=3) -MULTI_USDT = Pair("MULTI_USDT", price_precision=3, quantity_precision=3) -MXC_USDT = Pair("MXC_USDT", price_precision=5, quantity_precision=1) -NEAR_BTC = Pair("NEAR_BTC", price_precision=8, quantity_precision=2) -NEAR_USDC = Pair("NEAR_USDC", price_precision=3, quantity_precision=3) -NEAR_USDT = Pair("NEAR_USDT", price_precision=4, quantity_precision=2) -NEO_BTC = Pair("NEO_BTC", price_precision=7, quantity_precision=3) -NEO_USDT = Pair("NEO_USDT", price_precision=3, quantity_precision=4) -NKN_USDT = Pair("NKN_USDT", price_precision=5, quantity_precision=1) -NMR_USDT = Pair("NMR_USDT", price_precision=3, quantity_precision=3) -OCEAN_USDT = Pair("OCEAN_USDT", price_precision=4, quantity_precision=2) -OGN_BTC = Pair("OGN_BTC", price_precision=9, quantity_precision=2) -OGN_USDT = Pair("OGN_USDT", price_precision=4, quantity_precision=2) +MKR_USD = Pair("MKR_USD", price_precision=2, quantity_precision=4) +MKR_USDT = Pair("MKR_USDT", price_precision=2, quantity_precision=4) +MLN_USD = Pair("MLN_USD", price_precision=3, quantity_precision=2) +MMF_USD = Pair("MMF_USD", price_precision=6, quantity_precision=0) +MOVR_BTC = Pair("MOVR_BTC", price_precision=8, quantity_precision=2) +MOVR_USD = Pair("MOVR_USD", price_precision=3, quantity_precision=2) +MOVR_USDT = Pair("MOVR_USDT", price_precision=3, quantity_precision=2) +MTD_USD = Pair("MTD_USD", price_precision=5, quantity_precision=0) +MULTI_BTC = Pair("MULTI_BTC", price_precision=8, quantity_precision=2) +MULTI_USD = Pair("MULTI_USD", price_precision=4, quantity_precision=2) +MULTI_USDT = Pair("MULTI_USDT", price_precision=4, quantity_precision=2) +MXC_USD = Pair("MXC_USD", price_precision=6, quantity_precision=0) +MXC_USDT = Pair("MXC_USDT", price_precision=6, quantity_precision=0) +NEAR_BTC = Pair("NEAR_BTC", price_precision=8, quantity_precision=1) +NEAR_USD = Pair("NEAR_USD", price_precision=4, quantity_precision=1) +NEAR_USDT = Pair("NEAR_USDT", price_precision=4, quantity_precision=1) +NEO_BTC = Pair("NEO_BTC", price_precision=8, quantity_precision=2) +NEO_USD = Pair("NEO_USD", price_precision=4, quantity_precision=2) +NEO_USDT = Pair("NEO_USDT", price_precision=4, quantity_precision=2) +NKN_USD = Pair("NKN_USD", price_precision=6, quantity_precision=0) +NKN_USDT = Pair("NKN_USDT", price_precision=6, quantity_precision=0) +NMR_USD = Pair("NMR_USD", price_precision=3, quantity_precision=2) +NMR_USDT = Pair("NMR_USDT", price_precision=3, quantity_precision=2) +OCEAN_USD = Pair("OCEAN_USD", price_precision=5, quantity_precision=0) +OCEAN_USDT = Pair("OCEAN_USDT", price_precision=5, quantity_precision=0) +OGN_BTC = Pair("OGN_BTC", price_precision=10, quantity_precision=0) +OGN_USD = Pair("OGN_USD", price_precision=5, quantity_precision=0) +OGN_USDT = Pair("OGN_USDT", price_precision=5, quantity_precision=0) +OLE_USD = Pair("OLE_USD", price_precision=6, quantity_precision=0) OLE_USDT = Pair("OLE_USDT", price_precision=6, quantity_precision=0) -OMG_BTC = Pair("OMG_BTC", price_precision=8, quantity_precision=4) -OMG_USDT = Pair("OMG_USDT", price_precision=4, quantity_precision=4) -ONEINCH_BTC = Pair("1INCH_BTC", price_precision=9, quantity_precision=2) -ONEINCH_USDC = Pair("1INCH_USDC", price_precision=4, quantity_precision=2) -ONEINCH_USDT = Pair("1INCH_USDT", price_precision=4, quantity_precision=2) -ONE_BTC = Pair("ONE_BTC", price_precision=10, quantity_precision=1) -ONE_USDC = Pair("ONE_USDC", price_precision=5, quantity_precision=1) -ONE_USDT = Pair("ONE_USDT", price_precision=5, quantity_precision=1) -ONT_BTC = Pair("ONT_BTC", price_precision=8, quantity_precision=2) -ONT_USDT = Pair("ONT_USDT", price_precision=4, quantity_precision=2) -OP_BTC = Pair("OP_BTC", price_precision=9, quantity_precision=2) -OP_USDC = Pair("OP_USDC", price_precision=4, quantity_precision=2) -OP_USDT = Pair("OP_USDT", price_precision=4, quantity_precision=2) -OXT_USDT = Pair("OXT_USDT", price_precision=5, quantity_precision=1) -PAXG_USDT = Pair("PAXG_USDT", price_precision=2, quantity_precision=5) -PENDLE_USDT = Pair("PENDLE_USDT", price_precision=5, quantity_precision=1) -PERP_USDC = Pair("PERP_USDC", price_precision=5, quantity_precision=1) -PERP_USDT = Pair("PERP_USDT", price_precision=3, quantity_precision=3) -PLA_USDT = Pair("PLA_USDT", price_precision=5, quantity_precision=1) -POLS_USDT = Pair("POLS_USDT", price_precision=4, quantity_precision=2) +OMG_BTC = Pair("OMG_BTC", price_precision=9, quantity_precision=1) +OMG_USD = Pair("OMG_USD", price_precision=4, quantity_precision=1) +OMG_USDT = Pair("OMG_USDT", price_precision=4, quantity_precision=1) +ONEINCH_BTC = Pair("1INCH_BTC", price_precision=9, quantity_precision=1) +ONEINCH_USD = Pair("1INCH_USD", price_precision=5, quantity_precision=1) +ONEINCH_USDT = Pair("1INCH_USDT", price_precision=5, quantity_precision=1) +ONE_BTC = Pair("ONE_BTC", price_precision=10, quantity_precision=0) +ONE_USD = Pair("ONE_USD", price_precision=6, quantity_precision=0) +ONE_USDT = Pair("ONE_USDT", price_precision=6, quantity_precision=0) +ONT_BTC = Pair("ONT_BTC", price_precision=9, quantity_precision=0) +ONT_USD = Pair("ONT_USD", price_precision=5, quantity_precision=0) +ONT_USDT = Pair("ONT_USDT", price_precision=5, quantity_precision=0) +OP_BTC = Pair("OP_BTC", price_precision=9, quantity_precision=1) +OP_USD = Pair("OP_USD", price_precision=4, quantity_precision=1) +OP_USDT = Pair("OP_USDT", price_precision=4, quantity_precision=1) +OXT_USD = Pair("OXT_USD", price_precision=5, quantity_precision=0) +OXT_USDT = Pair("OXT_USDT", price_precision=5, quantity_precision=0) +PAXG_USD = Pair("PAXG_USD", price_precision=2, quantity_precision=4) +PAXG_USDT = Pair("PAXG_USDT", price_precision=2, quantity_precision=4) +PENDLE_USD = Pair("PENDLE_USD", price_precision=6, quantity_precision=0) +PENDLE_USDT = Pair("PENDLE_USDT", price_precision=6, quantity_precision=0) +PERP_USD = Pair("PERP_USD", price_precision=5, quantity_precision=1) +PERP_USDT = Pair("PERP_USDT", price_precision=5, quantity_precision=1) +PLA_USD = Pair("PLA_USD", price_precision=5, quantity_precision=0) +PLA_USDT = Pair("PLA_USDT", price_precision=5, quantity_precision=0) +POLS_USD = Pair("POLS_USD", price_precision=5, quantity_precision=1) +POLS_USDT = Pair("POLS_USDT", price_precision=5, quantity_precision=1) +POND_USD = Pair("POND_USD", price_precision=6, quantity_precision=0) POND_USDT = Pair("POND_USDT", price_precision=6, quantity_precision=0) -POWR_USDT = Pair("POWR_USDT", price_precision=5, quantity_precision=1) -PRQ_BTC = Pair("PRQ_BTC", price_precision=10, quantity_precision=1) -PRQ_USDT = Pair("PRQ_USDT", price_precision=5, quantity_precision=1) -PYR_BTC = Pair("PYR_BTC", price_precision=8, quantity_precision=3) -PYR_USDC = Pair("PYR_USDC", price_precision=3, quantity_precision=3) -PYR_USDT = Pair("PYR_USDT", price_precision=3, quantity_precision=3) -QI_USDT = Pair("QI_USDT", price_precision=5, quantity_precision=1) -QNT_USDC = Pair("QNT_USDC", price_precision=2, quantity_precision=4) -QNT_USDT = Pair("QNT_USDT", price_precision=2, quantity_precision=4) -QRDO_USDT = Pair("QRDO_USDT", price_precision=4, quantity_precision=2) -QTUM_USDT = Pair("QTUM_USDT", price_precision=4, quantity_precision=4) -QUICK_USDT = Pair("QUICK_USDT", price_precision=2, quantity_precision=4) -RADAR_BTC = Pair("RADAR_BTC", price_precision=10, quantity_precision=0) +POWR_USD = Pair("POWR_USD", price_precision=5, quantity_precision=0) +POWR_USDT = Pair("POWR_USDT", price_precision=5, quantity_precision=0) +PRQ_BTC = Pair("PRQ_BTC", price_precision=10, quantity_precision=0) +PRQ_USD = Pair("PRQ_USD", price_precision=5, quantity_precision=0) +PRQ_USDT = Pair("PRQ_USDT", price_precision=5, quantity_precision=0) +PYR_BTC = Pair("PYR_BTC", price_precision=8, quantity_precision=1) +PYR_USD = Pair("PYR_USD", price_precision=4, quantity_precision=1) +PYR_USDT = Pair("PYR_USDT", price_precision=4, quantity_precision=1) +QI_USD = Pair("QI_USD", price_precision=6, quantity_precision=0) +QI_USDT = Pair("QI_USDT", price_precision=6, quantity_precision=0) +QNT_USD = Pair("QNT_USD", price_precision=3, quantity_precision=3) +QNT_USDT = Pair("QNT_USDT", price_precision=3, quantity_precision=3) +QRDO_USD = Pair("QRDO_USD", price_precision=5, quantity_precision=0) +QRDO_USDT = Pair("QRDO_USDT", price_precision=5, quantity_precision=0) +QTUM_USD = Pair("QTUM_USD", price_precision=4, quantity_precision=1) +QTUM_USDT = Pair("QTUM_USDT", price_precision=4, quantity_precision=1) +QUICK_USD = Pair("QUICK_USD", price_precision=3, quantity_precision=3) +QUICK_USDT = Pair("QUICK_USDT", price_precision=3, quantity_precision=3) +RADAR_BTC = Pair("RADAR_BTC", price_precision=11, quantity_precision=0) +RADAR_USD = Pair("RADAR_USD", price_precision=6, quantity_precision=0) RADAR_USDT = Pair("RADAR_USDT", price_precision=6, quantity_precision=0) -RAD_USDC = Pair("RAD_USDC", price_precision=3, quantity_precision=3) -RAD_USDT = Pair("RAD_USDT", price_precision=4, quantity_precision=2) -RARE_USDT = Pair("RARE_USDT", price_precision=5, quantity_precision=1) -RARI_USDC = Pair("RARI_USDC", price_precision=3, quantity_precision=3) -RARI_USDT = Pair("RARI_USDT", price_precision=3, quantity_precision=3) -RAY_USDT = Pair("RAY_USDT", price_precision=4, quantity_precision=2) +RAD_USD = Pair("RAD_USD", price_precision=4, quantity_precision=1) +RAD_USDT = Pair("RAD_USDT", price_precision=4, quantity_precision=1) +RARE_USD = Pair("RARE_USD", price_precision=5, quantity_precision=0) +RARE_USDT = Pair("RARE_USDT", price_precision=5, quantity_precision=0) +RARI_USD = Pair("RARI_USD", price_precision=4, quantity_precision=1) +RARI_USDT = Pair("RARI_USDT", price_precision=4, quantity_precision=1) +RAY_USD = Pair("RAY_USD", price_precision=5, quantity_precision=1) +RAY_USDT = Pair("RAY_USDT", price_precision=5, quantity_precision=1) +REEF_USD = Pair("REEF_USD", price_precision=7, quantity_precision=0) REEF_USDT = Pair("REEF_USDT", price_precision=7, quantity_precision=0) -REN_USDT = Pair("REN_USDT", price_precision=5, quantity_precision=2) -REP_USDT = Pair("REP_USDT", price_precision=3, quantity_precision=3) -REQ_USDT = Pair("REQ_USDT", price_precision=5, quantity_precision=1) -RLC_USDT = Pair("RLC_USDT", price_precision=3, quantity_precision=3) -RLY_USDT = Pair("RLY_USDT", price_precision=5, quantity_precision=2) -RNDR_USDT = Pair("RNDR_USDT", price_precision=4, quantity_precision=2) -RSR_USDT = Pair("RSR_USDT", price_precision=5, quantity_precision=1) -RUNE_BTC = Pair("RUNE_BTC", price_precision=8, quantity_precision=3) -RUNE_USDC = Pair("RUNE_USDC", price_precision=3, quantity_precision=3) -RUNE_USDT = Pair("RUNE_USDT", price_precision=3, quantity_precision=3) -SAND_BTC = Pair("SAND_BTC", price_precision=8, quantity_precision=2) -SAND_USDC = Pair("SAND_USDC", price_precision=4, quantity_precision=2) -SAND_USDT = Pair("SAND_USDT", price_precision=5, quantity_precision=2) -SC_USDT = Pair("SC_USDT", price_precision=6, quantity_precision=0) -SDN_USDC = Pair("SDN_USDC", price_precision=4, quantity_precision=2) -SDN_USDT = Pair("SDN_USDT", price_precision=4, quantity_precision=2) -SHIB_USDC = Pair("SHIB_USDC", price_precision=9, quantity_precision=0) +REN_USD = Pair("REN_USD", price_precision=5, quantity_precision=0) +REN_USDT = Pair("REN_USDT", price_precision=5, quantity_precision=0) +REP_USD = Pair("REP_USD", price_precision=4, quantity_precision=2) +REP_USDT = Pair("REP_USDT", price_precision=4, quantity_precision=2) +REQ_USD = Pair("REQ_USD", price_precision=5, quantity_precision=0) +REQ_USDT = Pair("REQ_USDT", price_precision=5, quantity_precision=0) +RLC_USD = Pair("RLC_USD", price_precision=4, quantity_precision=1) +RLC_USDT = Pair("RLC_USDT", price_precision=4, quantity_precision=1) +RLY_USD = Pair("RLY_USD", price_precision=6, quantity_precision=0) +RLY_USDT = Pair("RLY_USDT", price_precision=6, quantity_precision=0) +RNDR_USD = Pair("RNDR_USD", price_precision=5, quantity_precision=1) +RNDR_USDT = Pair("RNDR_USDT", price_precision=5, quantity_precision=1) +RSR_USD = Pair("RSR_USD", price_precision=7, quantity_precision=0) +RSR_USDT = Pair("RSR_USDT", price_precision=7, quantity_precision=0) +RUNE_BTC = Pair("RUNE_BTC", price_precision=9, quantity_precision=1) +RUNE_USD = Pair("RUNE_USD", price_precision=4, quantity_precision=1) +RUNE_USDT = Pair("RUNE_USDT", price_precision=4, quantity_precision=1) +SAND_BTC = Pair("SAND_BTC", price_precision=9, quantity_precision=1) +SAND_USD = Pair("SAND_USD", price_precision=5, quantity_precision=1) +SAND_USDT = Pair("SAND_USDT", price_precision=5, quantity_precision=1) +SC_USD = Pair("SC_USD", price_precision=7, quantity_precision=0) +SC_USDT = Pair("SC_USDT", price_precision=7, quantity_precision=0) +SDN_USD = Pair("SDN_USD", price_precision=5, quantity_precision=0) +SDN_USDT = Pair("SDN_USDT", price_precision=5, quantity_precision=0) +SHIB_USD = Pair("SHIB_USD", price_precision=9, quantity_precision=0) SHIB_USDT = Pair("SHIB_USDT", price_precision=9, quantity_precision=0) -SKL_BTC = Pair("SKL_BTC", price_precision=10, quantity_precision=1) -SKL_USDT = Pair("SKL_USDT", price_precision=5, quantity_precision=2) -SLP_BTC = Pair("SLP_BTC", price_precision=10, quantity_precision=0) -SLP_USDC = Pair("SLP_USDC", price_precision=6, quantity_precision=0) -SLP_USDT = Pair("SLP_USDT", price_precision=5, quantity_precision=1) +SKL_BTC = Pair("SKL_BTC", price_precision=10, quantity_precision=0) +SKL_USD = Pair("SKL_USD", price_precision=6, quantity_precision=0) +SKL_USDT = Pair("SKL_USDT", price_precision=6, quantity_precision=0) +SLP_BTC = Pair("SLP_BTC", price_precision=11, quantity_precision=0) +SLP_USD = Pair("SLP_USD", price_precision=7, quantity_precision=0) +SLP_USDT = Pair("SLP_USDT", price_precision=7, quantity_precision=0) +SNT_USD = Pair("SNT_USD", price_precision=6, quantity_precision=0) SNT_USDT = Pair("SNT_USDT", price_precision=6, quantity_precision=0) -SNX_BTC = Pair("SNX_BTC", price_precision=8, quantity_precision=3) -SNX_USDT = Pair("SNX_USDT", price_precision=3, quantity_precision=3) -SOL_BTC = Pair("SOL_BTC", price_precision=7, quantity_precision=3) -SOL_USDC = Pair("SOL_USDC", price_precision=3, quantity_precision=3) -SOL_USDT = Pair("SOL_USDT", price_precision=3, quantity_precision=3) -SPELL_USDC = Pair("SPELL_USDC", price_precision=6, quantity_precision=0) +SNX_BTC = Pair("SNX_BTC", price_precision=8, quantity_precision=1) +SNX_USD = Pair("SNX_USD", price_precision=4, quantity_precision=1) +SNX_USDT = Pair("SNX_USDT", price_precision=4, quantity_precision=1) +SOL_BTC = Pair("SOL_BTC", price_precision=7, quantity_precision=2) +SOL_USD = Pair("SOL_USD", price_precision=3, quantity_precision=2) +SOL_USDT = Pair("SOL_USDT", price_precision=3, quantity_precision=2) +SPELL_USD = Pair("SPELL_USD", price_precision=7, quantity_precision=0) SPELL_USDT = Pair("SPELL_USDT", price_precision=7, quantity_precision=0) -SPS_USDT = Pair("SPS_USDT", price_precision=5, quantity_precision=1) -SRM_USDC = Pair("SRM_USDC", price_precision=4, quantity_precision=2) -SRM_USDT = Pair("SRM_USDT", price_precision=4, quantity_precision=2) -STORJ_USDT = Pair("STORJ_USDT", price_precision=4, quantity_precision=2) -STRAX_USDT = Pair("STRAX_USDT", price_precision=4, quantity_precision=2) -STX_BTC = Pair("STX_BTC", price_precision=9, quantity_precision=2) -STX_USDC = Pair("STX_USDC", price_precision=4, quantity_precision=2) -STX_USDT = Pair("STX_USDT", price_precision=4, quantity_precision=2) -SUPER_USDT = Pair("SUPER_USDT", price_precision=4, quantity_precision=2) -SUSHI_BTC = Pair("SUSHI_BTC", price_precision=8, quantity_precision=2) -SUSHI_USDT = Pair("SUSHI_USDT", price_precision=3, quantity_precision=3) -TFUEL_USDT = Pair("TFUEL_USDT", price_precision=5, quantity_precision=1) -THETA_USDC = Pair("THETA_USDC", price_precision=4, quantity_precision=2) -THETA_USDT = Pair("THETA_USDT", price_precision=4, quantity_precision=2) -TONIC_USDC = Pair("TONIC_USDC", price_precision=10, quantity_precision=0) -TONIC_USDT = Pair("TONIC_USDT", price_precision=10, quantity_precision=0) -TRB_USDC = Pair("TRB_USDC", price_precision=3, quantity_precision=3) -TRB_USDT = Pair("TRB_USDT", price_precision=3, quantity_precision=3) -TRIBE_USDT = Pair("TRIBE_USDT", price_precision=4, quantity_precision=2) -TRU_USDT = Pair("TRU_USDT", price_precision=5, quantity_precision=1) -T_USDT = Pair("T_USDT", price_precision=5, quantity_precision=1) -UMA_USDT = Pair("UMA_USDT", price_precision=3, quantity_precision=4) +SPS_USD = Pair("SPS_USD", price_precision=6, quantity_precision=0) +SPS_USDT = Pair("SPS_USDT", price_precision=6, quantity_precision=0) +SRM_USD = Pair("SRM_USD", price_precision=5, quantity_precision=1) +SRM_USDT = Pair("SRM_USDT", price_precision=5, quantity_precision=1) +STORJ_USD = Pair("STORJ_USD", price_precision=5, quantity_precision=1) +STORJ_USDT = Pair("STORJ_USDT", price_precision=5, quantity_precision=1) +STRAX_USD = Pair("STRAX_USD", price_precision=5, quantity_precision=1) +STRAX_USDT = Pair("STRAX_USDT", price_precision=5, quantity_precision=1) +STX_BTC = Pair("STX_BTC", price_precision=9, quantity_precision=0) +STX_USD = Pair("STX_USD", price_precision=5, quantity_precision=0) +STX_USDT = Pair("STX_USDT", price_precision=5, quantity_precision=0) +SUPER_USD = Pair("SUPER_USD", price_precision=5, quantity_precision=0) +SUPER_USDT = Pair("SUPER_USDT", price_precision=5, quantity_precision=0) +SUSHI_BTC = Pair("SUSHI_BTC", price_precision=9, quantity_precision=1) +SUSHI_USD = Pair("SUSHI_USD", price_precision=4, quantity_precision=1) +SUSHI_USDT = Pair("SUSHI_USDT", price_precision=4, quantity_precision=1) +TFUEL_USD = Pair("TFUEL_USD", price_precision=6, quantity_precision=0) +TFUEL_USDT = Pair("TFUEL_USDT", price_precision=6, quantity_precision=0) +THETA_USD = Pair("THETA_USD", price_precision=4, quantity_precision=1) +THETA_USDT = Pair("THETA_USDT", price_precision=4, quantity_precision=1) +TONIC_USD = Pair("TONIC_USD", price_precision=11, quantity_precision=0) +TONIC_USDT = Pair("TONIC_USDT", price_precision=11, quantity_precision=0) +TRB_USD = Pair("TRB_USD", price_precision=3, quantity_precision=2) +TRB_USDT = Pair("TRB_USDT", price_precision=3, quantity_precision=2) +TRIBE_USD = Pair("TRIBE_USD", price_precision=5, quantity_precision=0) +TRIBE_USDT = Pair("TRIBE_USDT", price_precision=5, quantity_precision=0) +TRU_USD = Pair("TRU_USD", price_precision=6, quantity_precision=0) +TRU_USDT = Pair("TRU_USDT", price_precision=6, quantity_precision=0) +T_USD = Pair("T_USD", price_precision=6, quantity_precision=0) +T_USDT = Pair("T_USDT", price_precision=6, quantity_precision=0) +UMA_USD = Pair("UMA_USD", price_precision=4, quantity_precision=1) +UMA_USDT = Pair("UMA_USDT", price_precision=4, quantity_precision=1) +UNFI_USD = Pair("UNFI_USD", price_precision=4, quantity_precision=2) UNFI_USDT = Pair("UNFI_USDT", price_precision=4, quantity_precision=2) -UNI_BTC = Pair("UNI_BTC", price_precision=8, quantity_precision=3) -UNI_USDC = Pair("UNI_USDC", price_precision=3, quantity_precision=3) -UNI_USDT = Pair("UNI_USDT", price_precision=4, quantity_precision=4) -USDC_USDT = Pair("USDC_USDT", price_precision=4, quantity_precision=2) -VELO_USDT = Pair("VELO_USDT", price_precision=6, quantity_precision=0) +UNI_BTC = Pair("UNI_BTC", price_precision=8, quantity_precision=2) +UNI_USD = Pair("UNI_USD", price_precision=4, quantity_precision=2) +UNI_USDT = Pair("UNI_USDT", price_precision=4, quantity_precision=2) +USDT_USD = Pair("USDT_USD", price_precision=5, quantity_precision=1) +VELO_USD = Pair("VELO_USD", price_precision=7, quantity_precision=0) +VELO_USDT = Pair("VELO_USDT", price_precision=7, quantity_precision=0) VET_BTC = Pair("VET_BTC", price_precision=10, quantity_precision=0) -VET_USDC = Pair("VET_USDC", price_precision=6, quantity_precision=0) +VET_USD = Pair("VET_USD", price_precision=6, quantity_precision=0) VET_USDT = Pair("VET_USDT", price_precision=6, quantity_precision=0) -VOXEL_USDT = Pair("VOXEL_USDT", price_precision=4, quantity_precision=2) -VRA_USDT = Pair("VRA_USDT", price_precision=6, quantity_precision=0) -VTHO_USDT = Pair("VTHO_USDT", price_precision=6, quantity_precision=0) -VVS_USDC = Pair("VVS_USDC", price_precision=8, quantity_precision=0) -VVS_USDT = Pair("VVS_USDT", price_precision=8, quantity_precision=0) -WAVES_BTC = Pair("WAVES_BTC", price_precision=8, quantity_precision=3) -WAVES_USDT = Pair("WAVES_USDT", price_precision=3, quantity_precision=3) -WAXP_USDT = Pair("WAXP_USDT", price_precision=5, quantity_precision=1) -WBTC_BTC = Pair("WBTC_BTC", price_precision=4, quantity_precision=6) -WBTC_USDC = Pair("WBTC_USDC", price_precision=2, quantity_precision=6) -WBTC_USDT = Pair("WBTC_USDT", price_precision=2, quantity_precision=6) -WEMIX_USDT = Pair("WEMIX_USDT", price_precision=4, quantity_precision=2) -WOO_USDT = Pair("WOO_USDT", price_precision=5, quantity_precision=1) -XLM_BTC = Pair("XLM_BTC", price_precision=9, quantity_precision=0) -XLM_USDC = Pair("XLM_USDC", price_precision=5, quantity_precision=1) -XLM_USDT = Pair("XLM_USDT", price_precision=5, quantity_precision=1) -XNO_USDT = Pair("XNO_USDT", price_precision=4, quantity_precision=2) +VOXEL_USD = Pair("VOXEL_USD", price_precision=5, quantity_precision=0) +VOXEL_USDT = Pair("VOXEL_USDT", price_precision=5, quantity_precision=0) +VRA_USD = Pair("VRA_USD", price_precision=7, quantity_precision=0) +VRA_USDT = Pair("VRA_USDT", price_precision=7, quantity_precision=0) +VTHO_USD = Pair("VTHO_USD", price_precision=7, quantity_precision=0) +VTHO_USDT = Pair("VTHO_USDT", price_precision=7, quantity_precision=0) +VVS_USD = Pair("VVS_USD", price_precision=10, quantity_precision=0) +VVS_USDT = Pair("VVS_USDT", price_precision=10, quantity_precision=0) +WAVES_BTC = Pair("WAVES_BTC", price_precision=8, quantity_precision=1) +WAVES_USD = Pair("WAVES_USD", price_precision=4, quantity_precision=1) +WAVES_USDT = Pair("WAVES_USDT", price_precision=4, quantity_precision=1) +WAXP_USD = Pair("WAXP_USD", price_precision=6, quantity_precision=0) +WAXP_USDT = Pair("WAXP_USDT", price_precision=6, quantity_precision=0) +WBTC_BTC = Pair("WBTC_BTC", price_precision=4, quantity_precision=5) +WBTC_USD = Pair("WBTC_USD", price_precision=2, quantity_precision=5) +WBTC_USDT = Pair("WBTC_USDT", price_precision=2, quantity_precision=5) +WEMIX_USD = Pair("WEMIX_USD", price_precision=4, quantity_precision=1) +WEMIX_USDT = Pair("WEMIX_USDT", price_precision=4, quantity_precision=1) +WOO_USD = Pair("WOO_USD", price_precision=5, quantity_precision=0) +WOO_USDT = Pair("WOO_USDT", price_precision=5, quantity_precision=0) +XLM_BTC = Pair("XLM_BTC", price_precision=10, quantity_precision=0) +XLM_USD = Pair("XLM_USD", price_precision=5, quantity_precision=0) +XLM_USDT = Pair("XLM_USDT", price_precision=5, quantity_precision=0) +XNO_USD = Pair("XNO_USD", price_precision=5, quantity_precision=1) +XNO_USDT = Pair("XNO_USDT", price_precision=5, quantity_precision=1) XRP_BTC = Pair("XRP_BTC", price_precision=9, quantity_precision=0) -XRP_USDC = Pair("XRP_USDC", price_precision=5, quantity_precision=1) -XRP_USDT = Pair("XRP_USDT", price_precision=5, quantity_precision=1) -XTZ_BTC = Pair("XTZ_BTC", price_precision=8, quantity_precision=2) -XTZ_USDT = Pair("XTZ_USDT", price_precision=4, quantity_precision=2) -XYO_USDC = Pair("XYO_USDC", price_precision=6, quantity_precision=0) -XYO_USDT = Pair("XYO_USDT", price_precision=6, quantity_precision=0) -YFI_BTC = Pair("YFI_BTC", price_precision=4, quantity_precision=6) -YFI_USDT = Pair("YFI_USDT", price_precision=2, quantity_precision=6) -YGG_BTC = Pair("YGG_BTC", price_precision=8, quantity_precision=2) -YGG_USDT = Pair("YGG_USDT", price_precision=4, quantity_precision=2) +XRP_USD = Pair("XRP_USD", price_precision=5, quantity_precision=0) +XRP_USDT = Pair("XRP_USDT", price_precision=5, quantity_precision=0) +XTZ_BTC = Pair("XTZ_BTC", price_precision=9, quantity_precision=1) +XTZ_USD = Pair("XTZ_USD", price_precision=4, quantity_precision=1) +XTZ_USDT = Pair("XTZ_USDT", price_precision=4, quantity_precision=1) +XYO_USD = Pair("XYO_USD", price_precision=7, quantity_precision=0) +XYO_USDT = Pair("XYO_USDT", price_precision=7, quantity_precision=0) +YFI_BTC = Pair("YFI_BTC", price_precision=5, quantity_precision=5) +YFI_USD = Pair("YFI_USD", price_precision=2, quantity_precision=5) +YFI_USDT = Pair("YFI_USDT", price_precision=2, quantity_precision=5) +YGG_BTC = Pair("YGG_BTC", price_precision=9, quantity_precision=0) +YGG_USD = Pair("YGG_USD", price_precision=5, quantity_precision=0) +YGG_USDT = Pair("YGG_USDT", price_precision=5, quantity_precision=0) +ZBC_USD = Pair("ZBC_USD", price_precision=6, quantity_precision=0) ZBC_USDT = Pair("ZBC_USDT", price_precision=6, quantity_precision=0) +ZED_USD = Pair("ZED_USD", price_precision=6, quantity_precision=0) ZED_USDT = Pair("ZED_USDT", price_precision=6, quantity_precision=0) -ZIL_BTC = Pair("ZIL_BTC", price_precision=10, quantity_precision=1) -ZIL_USDT = Pair("ZIL_USDT", price_precision=5, quantity_precision=1) -ZRX_USDT = Pair("ZRX_USDT", price_precision=4, quantity_precision=2) +ZIL_BTC = Pair("ZIL_BTC", price_precision=10, quantity_precision=0) +ZIL_USD = Pair("ZIL_USD", price_precision=6, quantity_precision=0) +ZIL_USDT = Pair("ZIL_USDT", price_precision=6, quantity_precision=0) +ZRX_USD = Pair("ZRX_USD", price_precision=5, quantity_precision=0) +ZRX_USDT = Pair("ZRX_USDT", price_precision=5, quantity_precision=0) def all(): diff --git a/src/cryptocom/exchange/private.py b/src/cryptocom/exchange/private.py index cccf4a3..be131e8 100644 --- a/src/cryptocom/exchange/private.py +++ b/src/cryptocom/exchange/private.py @@ -220,8 +220,8 @@ async def create_order( type_: OrderType, quantity: float, price: float = 0, - force_type: OrderForceType = OrderForceType.GOOD_TILL_CANCEL, - exec_type: OrderExecType = OrderExecType.MARKET, + force_type: OrderForceType = None, + exec_type: OrderExecType = None, client_id: int = None, ) -> int: """Create raw order with buy or sell side.""" @@ -230,10 +230,20 @@ async def create_order( "side": side.value, "type": type_.value, } - data["time_in_force"] = force_type.value - data["exec_inst"] = exec_type.value + if force_type: + data["time_in_force"] = force_type.value + + if exec_type: + data["exec_inst"] = exec_type.value + + old_quantity = quantity quantity = "{:.{}f}".format(quantity, pair.quantity_precision) + if old_quantity and not float(quantity): + raise ValueError( + "Your quantity {} is less then accepted precision {}" + "for pair: {}".format(old_quantity, quantity, pair) + ) if type_ == OrderType.MARKET and side == OrderSide.BUY: data["notional"] = quantity else: @@ -257,8 +267,8 @@ async def buy_limit( pair: Pair, quantity: float, price: float, - force_type: OrderForceType = OrderForceType.GOOD_TILL_CANCEL, - exec_type: OrderExecType = OrderExecType.MARKET, + force_type: OrderForceType = None, + exec_type: OrderExecType = None, client_id: int = None, ) -> int: """Buy limit order.""" @@ -270,6 +280,7 @@ async def buy_limit( price, force_type, exec_type, + client_id, ) async def sell_limit( @@ -277,8 +288,8 @@ async def sell_limit( pair: Pair, quantity: float, price: float, - force_type: OrderForceType = OrderForceType.GOOD_TILL_CANCEL, - exec_type: OrderExecType = OrderExecType.MARKET, + force_type: OrderForceType = None, + exec_type: OrderExecType = None, client_id: int = None, ) -> int: """Sell limit order.""" @@ -290,6 +301,7 @@ async def sell_limit( price, force_type, exec_type, + client_id, ) async def wait_for_status( @@ -401,7 +413,7 @@ async def cancel_open_orders(self, pair: Pair) -> None: {"params": {"instrument_name": pair.name}}, ) - async def listen_balance(self) -> Balance: + async def listen_balances(self) -> Balance: async for data in self.api.listen("user", "user.balance", sign=True): for bal in data.get("data", []): yield Balance( diff --git a/src/cryptocom/exchange/structs.py b/src/cryptocom/exchange/structs.py index db702d7..9e2b314 100644 --- a/src/cryptocom/exchange/structs.py +++ b/src/cryptocom/exchange/structs.py @@ -40,10 +40,10 @@ def quote_coin(self) -> Coin: return Coin(self.name.split("_")[1]) def round_price(self, price): - return round_down(price, self.price_precision) + return round_down(float(price), self.price_precision) def round_quantity(self, quantity): - return round_down(quantity, self.quantity_precision) + return round_down(float(quantity), self.quantity_precision) def __hash__(self): return self.name.__hash__() @@ -62,8 +62,8 @@ def __getitem__(self, name: str) -> Pair: @dataclass class MarketTicker: pair: Pair - buy_price: float - sell_price: float + buy_price: float | None + sell_price: float | None trade_price: float time: int volume: float @@ -75,9 +75,9 @@ class MarketTicker: def from_api(cls, pair, data): return cls( pair=pair, - buy_price=pair.round_price(data["b"]), - sell_price=pair.round_price(data["k"]), - trade_price=pair.round_price(data["a"]), + buy_price=pair.round_price(data["b"]) if data["b"] else None, + sell_price=pair.round_price(data["k"]) if data["k"] else None, + trade_price=pair.round_price(data["a"]) if data["a"] else None, time=int(data["t"] / 1000), volume=pair.round_quantity(data["v"]), high=pair.round_price(data["h"]), @@ -162,6 +162,12 @@ class OrderInBook: def volume(self) -> float: return self.pair.round_quantity(self.price * self.quantity) + @classmethod + def from_api(cls, order, pair, side): + order[0] = pair.round_price(order[0]) + order[1] = pair.round_quantity(order[1]) + return cls(*order, pair, side) + @dataclass class OrderBook: @@ -302,7 +308,7 @@ def is_expired(self): @cached_property def is_filled(self): - return self.status == OrderStatus.FILLED + return not self.remain_quantity @cached_property def is_pending(self): diff --git a/tests/test_market.py b/tests/test_market.py index 80b4d66..ba68898 100644 --- a/tests/test_market.py +++ b/tests/test_market.py @@ -41,7 +41,7 @@ async def test_get_price(exchange: cro.Exchange): @pytest.mark.asyncio async def test_get_orderbook(exchange: cro.Exchange): - depth = 150 + depth = 50 book = await exchange.get_orderbook(cro.pairs.CRO_USDT) assert book.buys and book.sells assert book.sells[0].price > book.buys[0].price @@ -61,10 +61,10 @@ async def test_get_candles(exchange: cro.Exchange): async def test_listen_candles(exchange: cro.Exchange): candles = {} pairs = ( - cro.pairs.BTC_USDC, + cro.pairs.BTC_USD, cro.pairs.ETH_USDT, cro.pairs.BTC_USDT, - cro.pairs.ETH_USDC, + cro.pairs.ETH_USD, ) default_count = 1 @@ -83,7 +83,7 @@ async def test_listen_candles(exchange: cro.Exchange): @pytest.mark.asyncio async def test_listen_trades(exchange: cro.Exchange): trades = [] - pairs = [cro.pairs.BTC_USDC, cro.pairs.BTC_USDT] + pairs = [cro.pairs.BTC_USD, cro.pairs.BTC_USDT] pairs_seen = set() async for trade in exchange.listen_trades(*pairs): trades.append(trade) @@ -94,9 +94,9 @@ async def test_listen_trades(exchange: cro.Exchange): @pytest.mark.asyncio async def test_listen_orderbook(exchange: cro.Exchange): - pairs = [cro.pairs.CRO_USDT, cro.pairs.CRO_USDC] + pairs = [cro.pairs.CRO_USDT, cro.pairs.CRO_USD] orderbooks = [] - depth = 150 + depth = 50 async for orderbook in exchange.listen_orderbook(*pairs): orderbooks.append(orderbook) diff --git a/tests/test_private.py b/tests/test_private.py index 98da00e..1032d00 100644 --- a/tests/test_private.py +++ b/tests/test_private.py @@ -1,11 +1,11 @@ import asyncio -import functools import time import async_timeout import pytest import cryptocom.exchange as cro +from cryptocom.exchange.helpers import round_up from cryptocom.exchange.structs import ( DepositStatus, Timeframe, @@ -13,38 +13,16 @@ ) -def retry(times: int): - """Retry function for unstable tests.""" - - def decorator(f): - @functools.wraps(f) - async def wrapper(account: cro.Account, *args, **kwargs): - nonlocal times - while True: - try: - return await f(account, *args, **kwargs) - except Exception as exc: - times -= 1 - if not times: - raise exc - while await account.get_open_orders(cro.pairs.CRO_USDT): - await account.cancel_open_orders(cro.pairs.CRO_USDT) - - return wrapper - - return decorator - - @pytest.mark.asyncio async def test_account_get_balance(account: cro.Account): balances = await account.get_balance() async with async_timeout.timeout(120): - while balances[cro.coins.CRO].available < 1: - await account.buy_market(cro.pairs.CRO_USDT, 0.1) + while balances[cro.coins.CRO].available < 10: + await account.buy_market(cro.pairs.CRO_USDT, 1) balances = await account.get_balance() - while balances[cro.coins.USDT].available < 1: - await account.sell_market(cro.pairs.CRO_USDT, 0.1) + while balances[cro.coins.USDT].available < 10: + await account.sell_market(cro.pairs.CRO_USDT, 10) balances = await account.get_balance() balances = await account.get_balance() @@ -93,17 +71,16 @@ async def test_deposit_withdrawal_history( @pytest.mark.asyncio -@retry(5) async def test_no_duplicate_mass_limit_orders( account: cro.Account, exchange: cro.Exchange, ): buy_price = round(await exchange.get_price(cro.pairs.CRO_USDT) / 2, 4) - orders_count = 50 + orders_count = 20 order_ids = await asyncio.gather( *[ account.buy_limit( - cro.pairs.CRO_USDT, 0.001, round(buy_price + i * 0.0001, 4) + cro.pairs.CRO_USDT, 1, round(buy_price + i * 0.0001, 4) ) for i in range(orders_count) ] @@ -125,23 +102,20 @@ async def test_no_duplicate_mass_limit_orders( @pytest.mark.asyncio -@retry(5) async def test_account_limit_orders( account: cro.Account, exchange: cro.Exchange ): buy_price = round(await exchange.get_price(cro.pairs.CRO_USDT) / 2, 4) order_ids = await asyncio.gather( *[ - account.buy_limit(cro.pairs.CRO_USDT, 0.001, buy_price) - for _ in range(25) + account.buy_limit(cro.pairs.CRO_USDT, 1, buy_price) + for _ in range(10) ] ) order_ids += await asyncio.gather( *[ - account.sell_limit( - cro.pairs.CRO_USDT, 0.001, round(buy_price * 4, 4) - ) - for _ in range(25) + account.sell_limit(cro.pairs.CRO_USDT, 1, round(buy_price * 4, 4)) + for _ in range(10) ] ) @@ -170,13 +144,15 @@ async def test_account_limit_orders( async def make_trades(account, exchange, order_ids): price = await exchange.get_price(cro.pairs.CRO_USDT) - order_id = await account.buy_market(cro.pairs.CRO_USDT, price / 10) + order_id = await account.buy_market(cro.pairs.CRO_USDT, 1) order = await account.get_order(order_id) - assert order.is_filled - assert order_id == order.id + assert order_id == order.id, (order_id, order.id) + assert order.is_filled, (order_id, order.id, order) order_ids["buy"].append(order.id) - order_id = await account.sell_market(cro.pairs.CRO_USDT, 0.1) + order_id = await account.sell_market( + cro.pairs.CRO_USDT, int(round_up(1 / price, 0)) + ) order = await account.get_order(order_id) assert order.is_filled assert order_id == order.id @@ -188,19 +164,29 @@ async def listen_orders(account: cro.Account, orders): orders.append(order) +async def listen_balances(account: cro.Account, balances): + async for balance in account.listen_balances(): + balances.append(balance) + + @pytest.mark.asyncio -@retry(5) async def test_account_market_orders( account: cro.Account, exchange: cro.Exchange ): order_ids = {"buy": [], "sell": []} orders = [] l_orders = [] + l_balances = [] + trades_count = 10 task = asyncio.create_task(listen_orders(account, l_orders)) - await asyncio.sleep(10) + task = asyncio.create_task(listen_balances(account, l_balances)) + await asyncio.sleep(20) await asyncio.gather( - *[make_trades(account, exchange, order_ids) for _ in range(10)] + *[ + make_trades(account, exchange, order_ids) + for _ in range(trades_count) + ] ) orders = await asyncio.gather( @@ -215,9 +201,12 @@ async def test_account_market_orders( assert order.trades, order assert l_orders + assert l_balances assert set(o.id for o in l_orders) == set(o.id for o in orders) - trades = await account.get_trades(cro.pairs.CRO_USDT, page_size=20) + trades = await account.get_trades( + cro.pairs.CRO_USDT, page_size=trades_count * 2 + ) for trade in trades: if trade.is_buy: assert trade.order_id in order_ids["buy"] @@ -226,7 +215,7 @@ async def test_account_market_orders( assert trade.order_id in order_ids["sell"] assert trade.order_id not in order_ids["buy"] - await asyncio.sleep(10) + await asyncio.sleep(20) assert len(orders) >= len(order_ids["buy"]) + len(order_ids["sell"])