def __init__(self, config): self.start_time = time.time() self.config = config self.startup_config = copy.deepcopy(config) self.edited_config = copy.deepcopy(config) self.ready = False self.watcher = None # tools: used for alternative operations on a bot on the fly (ex: backtesting started from web interface) self.tools = { BOT_TOOLS_BACKTESTING: None, BOT_TOOLS_STRATEGY_OPTIMIZER: None, BOT_TOOLS_RECORDER: None, } # Logger self.logger = get_logger(self.__class__.__name__) # Advanced AdvancedManager.init_advanced_classes_if_necessary(self.config) # Debug tools self.performance_analyser = None if CONFIG_DEBUG_OPTION_PERF in self.config and self.config[ CONFIG_DEBUG_OPTION_PERF]: self.performance_analyser = PerformanceAnalyser() # Init time frames using enabled strategies EvaluatorCreator.init_time_frames_from_strategies(self.config) self.time_frames = TimeFrameManager.get_config_time_frame(self.config) # Init relevant evaluator names list using enabled strategies self.relevant_evaluators = EvaluatorCreator.get_relevant_evaluators_from_strategies( self.config) # Backtesting self.backtesting_enabled = Backtesting.enabled(self.config) # Add services to self.config[CONFIG_CATEGORY_SERVICES] ServiceCreator.create_services(self.config, self.backtesting_enabled) # Notifier self.config[CONFIG_NOTIFICATION_INSTANCE] = Notification(self.config) # Notify starting if self.config[CONFIG_NOTIFICATION_INSTANCE].enabled( CONFIG_NOTIFICATION_GLOBAL_INFO): self.config[CONFIG_NOTIFICATION_INSTANCE].notify_with_all( NOTIFICATION_STARTING_MESSAGE, False) self.symbol_threads_manager = {} self.exchange_traders = {} self.exchange_trader_simulators = {} self.trading_mode = None self.exchange_trading_modes = {} self.exchanges_list = {} self.symbol_evaluator_list = {} self.crypto_currency_evaluator_list = {} self.dispatchers_list = [] self.symbol_time_frame_updater_threads = []
def __init__(self, config): self.start_time = time.time() self.config = config self.ready = False # Logger self.logger = logging.getLogger(self.__class__.__name__) # Advanced AdvancedManager.create_class_list(self.config) # Debug tools self.performance_analyser = None if CONFIG_DEBUG_OPTION_PERF in self.config and self.config[ CONFIG_DEBUG_OPTION_PERF]: self.performance_analyser = PerformanceAnalyser() # Init time frames using enabled strategies EvaluatorCreator.init_time_frames_from_strategies(self.config) self.time_frames = TimeFrameManager.get_config_time_frame(self.config) # Init relevant evaluator names list using enabled strategies self.relevant_evaluators = EvaluatorCreator.get_relevant_evaluators_from_strategies( self.config) # Add services to self.config[CONFIG_CATEGORY_SERVICES] ServiceCreator.create_services(self.config) # Notifier self.config[CONFIG_NOTIFICATION_INSTANCE] = Notification(self.config) # Notify starting if self.config[CONFIG_NOTIFICATION_INSTANCE].enabled( CONFIG_NOTIFICATION_GLOBAL_INFO): self.config[CONFIG_NOTIFICATION_INSTANCE].notify_with_all( NOTIFICATION_STARTING_MESSAGE) # Backtesting self.backtesting_enabled = None self.symbol_threads_manager = {} self.exchange_traders = {} self.exchange_trader_simulators = {} self.exchanges_list = {} self.symbol_evaluator_list = {} self.crypto_currency_evaluator_list = {} self.dispatchers_list = [] self.symbol_time_frame_updater_threads = []
def stop_threads(self): # Notify stopping self.config[CONFIG_NOTIFICATION_INSTANCE].notify_with_all(NOTIFICATION_STOPPING_MESSAGE) self.logger.info("Stopping threads ...") for thread in self.symbol_time_frame_updater_threads: thread.stop() for manager in self.symbol_threads_manager.values(): manager.stop_threads() for crypto_currency_evaluator in self.crypto_currency_evaluator_list.values(): crypto_currency_evaluator.stop_threads() for trader in self.exchange_traders.values(): trader.stop_order_manager() for trader_simulator in self.exchange_trader_simulators.values(): trader_simulator.stop_order_manager() for thread in self.dispatchers_list: thread.stop() if self.performance_analyser: self.performance_analyser.stop() # stop services for service_instance in ServiceCreator.get_service_instances(self.config): try: service_instance.stop() except Exception as e: raise e self.logger.info("Threads stopped.")
def __init__(self): # Logger fileConfig('config/logging_config.ini') self.logger = logging.getLogger(self.__class__.__name__) sys.excepthook = self.log_uncaught_exceptions # Version self.logger.info("Version : {0}".format(VERSION)) # Config self.logger.info("Load config file...") self.config = load_config() # Advanced AdvancedManager.create_class_list(self.config) # Interfaces self.web_app = WebApp(self.config) if self.web_app.enabled(): self.web_app.start() # Debug tools self.performance_analyser = None if CONFIG_DEBUG_OPTION_PERF in self.config and self.config[ CONFIG_DEBUG_OPTION_PERF]: self.performance_analyser = PerformanceAnalyser() # TODO : CONFIG TEMP LOCATION self.time_frames = [ TimeFrames.THIRTY_MINUTES, TimeFrames.ONE_HOUR, TimeFrames.FOUR_HOURS, TimeFrames.ONE_DAY ] self.exchanges = [ccxt.binance] # Add services to self.config[CONFIG_CATEGORY_SERVICES] ServiceCreator.create_services(self.config) # Notifier self.config[CONFIG_NOTIFICATION_INSTANCE] = Notification(self.config) self.symbols_threads_manager = [] self.exchange_traders = {} self.exchange_trader_simulators = {} self.exchanges_list = {} self.symbol_evaluator_list = [] self.dispatchers_list = []
def __init__(self, config): self.start_time = time.time() self.config = config self.ready = False # Logger self.logger = logging.getLogger(self.__class__.__name__) # Advanced AdvancedManager.create_class_list(self.config) # Debug tools self.performance_analyser = None if CONFIG_DEBUG_OPTION_PERF in self.config and self.config[CONFIG_DEBUG_OPTION_PERF]: self.performance_analyser = PerformanceAnalyser() self.time_frames = TimeFrameManager.get_config_time_frame(self.config) # Add services to self.config[CONFIG_CATEGORY_SERVICES] ServiceCreator.create_services(self.config) # Notifier self.config[CONFIG_NOTIFICATION_INSTANCE] = Notification(self.config) # Notify starting self.config[CONFIG_NOTIFICATION_INSTANCE].notify_with_all(NOTIFICATION_STARTING_MESSAGE) # Backtesting self.backtesting_enabled = None self.symbol_threads_manager = {} self.exchange_traders = {} self.exchange_trader_simulators = {} self.exchanges_list = {} self.symbol_evaluator_list = {} self.crypto_currency_evaluator_list = {} self.dispatchers_list = [] self.symbol_time_frame_updater_threads = []
def stop_threads(self): # Notify stopping if self.config[CONFIG_NOTIFICATION_INSTANCE].enabled( CONFIG_NOTIFICATION_GLOBAL_INFO): self.config[CONFIG_NOTIFICATION_INSTANCE].notify_with_all( NOTIFICATION_STOPPING_MESSAGE) self.logger.info("Stopping threads ...") for thread in self.symbol_time_frame_updater_threads: thread.stop() for manager in self.symbol_threads_manager.values(): manager.stop_threads() for crypto_currency_evaluator in self.crypto_currency_evaluator_list.values( ): crypto_currency_evaluator.stop_threads() for trader in self.exchange_traders.values(): trader.stop_order_manager() for trader_simulator in self.exchange_trader_simulators.values(): trader_simulator.stop_order_manager() for thread in self.dispatchers_list: thread.stop() if self.performance_analyser: self.performance_analyser.stop() # stop services for service_instance in ServiceCreator.get_service_instances( self.config): try: service_instance.stop() except Exception as e: raise e # stop exchanges threads for exchange in self.exchanges_list.values(): exchange.stop() self.logger.info("Threads stopped.")
def stop_threads(self): stop_coroutines = [] # Notify stopping if self.config[CONFIG_NOTIFICATION_INSTANCE].enabled( CONFIG_NOTIFICATION_GLOBAL_INFO): # To be improved with a full async implementation # To be done : "asyncio.run" --> replaced by a simple await # PR discussion : https://github.com/Drakkar-Software/OctoBot/pull/563#discussion_r248088266 stop_coroutines.append( self.config[CONFIG_NOTIFICATION_INSTANCE].notify_with_all( NOTIFICATION_STOPPING_MESSAGE)) self.logger.info("Stopping threads ...") if self.main_task_group: self.main_task_group.cancel() for thread in self.dispatchers_list: thread.stop() # stop services for service_instance in ServiceCreator.get_service_instances( self.config): try: service_instance.stop() except Exception as e: raise e # stop exchanges threads for exchange in self.exchanges_list.values(): stop_coroutines.append(exchange.stop()) loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) asyncio.run(get_gather_wrapper(stop_coroutines)) self.logger.info("Threads stopped.")