from bfxapi.rest.bfx_rest import BfxRest from retrying_async import retry from bfxbot.currency import Symbol class BfxWrapper(BfxRest): def __init__(self, api_key: str, api_secret: str): super().__init__(API_KEY=api_key, API_SECRET=api_secret) @retry() async def get_public_ticker(self, symbol): if isinstance(symbol, Symbol): symbol = str(symbol) return await super().get_public_ticker(symbol) @retry() async def get_active_position(self): return await super().get_active_position() @retry() async def get_active_orders(self, symbol): if isinstance(symbol, Symbol): symbol = str(symbol) return await super().get_active_orders(symbol) @retry() async def get_trades(self, symbol, start, end): if isinstance(symbol, Symbol): symbol = str(symbol) return await super().get_trades(symbol, start, end) async def get_current_prices(self, symbol) -> (float, float, float): if isinstance(symbol, Symbol): symbol = str(symbol) tickers = await self.get_public_ticker(symbol) bid_price = tickers[0] ask_price = tickers[2] ticker_price = tickers[6] return bid_price, ask_price, ticker_price async def get_usd_balance(self): balance = 0.0 wallets = await self.get_wallets() for w in wallets: if w.currency == "USD": balance += w.balance else: current_price = await self.get_current_prices(f"t{w.currency}USD") balance += current_price * w.balance return balance async def get_balance_delta(self, symbol: Symbol, start: float, end: float): trades = await self.get_trades(symbol, start, end) return sum([t.amount for t in trades])