From 6a1c379398e0b793b6db8c0f9ff63cf90af3d4f1 Mon Sep 17 00:00:00 2001 From: bassdeth1 <127886110+bassdeth1@users.noreply.github.com> Date: Wed, 17 Apr 2024 16:42:24 -0400 Subject: [PATCH] Update default_strategy.py --- .../strategies/default_strategy.py | 57 ++++++++++--------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/binance_trade_bot/strategies/default_strategy.py b/binance_trade_bot/strategies/default_strategy.py index e599cba7..44d5c38b 100644 --- a/binance_trade_bot/strategies/default_strategy.py +++ b/binance_trade_bot/strategies/default_strategy.py @@ -1,6 +1,7 @@ import random import sys from datetime import datetime +import concurrent.futures from binance_trade_bot.auto_trader import AutoTrader @@ -14,33 +15,34 @@ def scout(self): """ Scout for potential jumps from the current coin to another coin """ - current_coin = self.db.get_current_coin() - # Display on the console, the current coin+Bridge, so users can see *some* activity and not think the bot has - # stopped. Not logging though to reduce log size. - print( - f"{datetime.now()} - CONSOLE - INFO - I am scouting the best trades. " - f"Current coin: {current_coin + self.config.BRIDGE} ", - end="\r", - ) + with concurrent.futures.ThreadPoolExecutor() as executor: + current_coin = self.db.get_current_coin() + print( + f"{datetime.now()} - CONSOLA - INFO - Estoy buscando los mejores intercambios. " + f"Moneda actual: {current_coin + self.config.BRIDGE} ", + end="\r", + ) + + future_price = executor.submit(self.manager.get_ticker_price, current_coin + self.config.BRIDGE) + current_coin_price = future_price.result() + + if current_coin_price is None: + self.logger.info(f"Skipping scouting... current coin {current_coin + self.config.BRIDGE} not found") + return - current_coin_price = self.manager.get_ticker_price(current_coin + self.config.BRIDGE) - - if current_coin_price is None: - self.logger.info(f"Skipping scouting... current coin {current_coin + self.config.BRIDGE} not found") - return - - self._jump_to_best_coin(current_coin, current_coin_price) + self._jump_to_best_coin(current_coin, current_coin_price) def bridge_scout(self): - current_coin = self.db.get_current_coin() - if self.manager.get_currency_balance(current_coin.symbol) > self.manager.get_min_notional( - current_coin.symbol, self.config.BRIDGE.symbol - ): - # Only scout if we don't have enough of the current coin - return - new_coin = super().bridge_scout() - if new_coin is not None: - self.db.set_current_coin(new_coin) + with concurrent.futures.ThreadPoolExecutor() as executor: + current_coin = self.db.get_current_coin() + if self.manager.get_currency_balance(current_coin.symbol) > self.manager.get_min_notional( + current_coin.symbol, self.config.BRIDGE.symbol + ): + return + new_coin = super().bridge_scout() + if new_coin is not None: + future_set_coin = executor.submit(self.db.set_current_coin, new_coin) + future_set_coin.result() # Wait for the operation to complete. def initialize_current_coin(self): """ @@ -51,13 +53,14 @@ def initialize_current_coin(self): if not current_coin_symbol: current_coin_symbol = random.choice(self.config.SUPPORTED_COIN_LIST) - self.logger.info(f"Setting initial coin to {current_coin_symbol}") + self.logger.info(f"Estableciendo moneda inicial en {current_coin_symbol}") if current_coin_symbol not in self.config.SUPPORTED_COIN_LIST: sys.exit("***\nERROR!\nSince there is no backup file, a proper coin name must be provided at init\n***") - self.db.set_current_coin(current_coin_symbol) + with concurrent.futures.ThreadPoolExecutor() as executor: + future_set_initial_coin = executor.submit(self.db.set_current_coin, current_coin_symbol) + future_set_initial_coin.result() # Wait for the operation to complete. - # if we don't have a configuration, we selected a coin at random... Buy it so we can start trading. if self.config.CURRENT_COIN_SYMBOL == "": current_coin = self.db.get_current_coin() self.logger.info(f"Purchasing {current_coin} to begin trading")