def choose_pair( self, timestamp: Timestamp, price_query: Callable[[Asset, Asset, Timestamp], FVal], ) -> TradePair: """Choose a random pair to trade from the available pairs at the selected timestamp""" choices = set(list(self.asset_pairs['result'].keys())) found = False while len(choices) != 0: pair = random.choice(tuple(choices)) choices.remove(pair) pair = kraken_to_world_pair(pair) base, quote = pair_get_assets(pair) kbase = base.to_kraken() kquote = quote.to_kraken() if kbase in self.balances_dict or kquote in self.balances_dict: # Before choosing make sure that at the selected timestamp both of # the pair assets exist (had a price) if not assets_exist_at_time(base, quote, timestamp, price_query): continue found = True break if not found: raise ValueError( 'Could not find a pair to trade with the current funds') return trade_pair_from_assets(base, quote)
def choose_pair( self, timestamp: Timestamp, price_query: Callable[[Asset, Asset, Timestamp], FVal], ) -> TradePair: """Choose a random pair to trade from the available pairs at the selected timestamp""" choices = set(self._symbols_to_pair.keys()) found = False while len(choices) != 0: pair = random.choice(tuple(choices)) choices.remove(pair) binance_pair = self._symbols_to_pair[pair] bbase = binance_pair.binance_base_asset bquote = binance_pair.binance_quote_asset try: base = asset_from_binance(bbase) quote = asset_from_binance(bquote) except UnsupportedAsset: continue if bbase in self.balances_dict or bquote in self.balances_dict: if bbase in DISALLOWED_ASSETS or bquote in DISALLOWED_ASSETS: continue # Before choosing make sure that at the selected timestamp both of # the pair assets exist (had a price) if not assets_exist_at_time(base, quote, timestamp, price_query): continue found = True break if not found: raise ValueError('Could not find a pair to trade with the current funds') return trade_pair_from_assets(base, quote)