async def run_independent_backtesting(data_files, timeout=10, use_loggers=True, run_on_common_part_only=True): independent_backtesting = None try: config_to_use = load_test_config() if use_loggers: init_logger() independent_backtesting = create_independent_backtesting( config_to_use, load_test_tentacles_config(), data_files, "", run_on_common_part_only=run_on_common_part_only) await initialize_and_run_independent_backtesting( independent_backtesting, log_errors=False) await independent_backtesting.join_backtesting_updater(timeout) return independent_backtesting except MissingTimeFrame: # ignore this exception: is due to missing of the only required time frame return independent_backtesting except asyncio.TimeoutError as e: get_logger().exception( e, True, f"Timeout after waiting for backtesting for {timeout} seconds.") # stop backtesting to prevent zombie tasks await stop_independent_backtesting(independent_backtesting) raise except Exception as e: get_logger().exception(e, True, str(e)) # stop backtesting to prevent zombie tasks await stop_independent_backtesting(independent_backtesting) raise
async def _run_backtesting(config, tentacles_setup_config): backtesting = create_independent_backtesting(config, tentacles_setup_config, [DATA_FILES["ETH/USDT"]], "") await initialize_and_run_independent_backtesting(backtesting, log_errors=False) await join_independent_backtesting(backtesting) return backtesting
async def initialize(self): try: await self.initializer.create() self.independent_backtesting = octobot_backtesting_api.create_independent_backtesting( self.config, self.tentacles_setup_config, backtesting_api.get_backtesting_data_files(self.config), run_on_common_part_only=self.run_on_common_part_only) await octobot_backtesting_api.initialize_and_run_independent_backtesting(self.independent_backtesting, log_errors=False) await octobot_backtesting_api.join_independent_backtesting(self.independent_backtesting) if self.log_report: octobot_backtesting_api.log_independent_backtesting_report(self.independent_backtesting) await octobot_backtesting_api.stop_independent_backtesting(self.independent_backtesting, memory_check=False) except Exception as e: self.logger.error(f"Error when starting backtesting: {e}") finally: self.task_manager.stop_tasks()
async def _run_backtesting_with_current_config(self, data_file_to_use): independent_backtesting = None try: config_to_use = copy.deepcopy(self.config) independent_backtesting = octobot_backtesting_api.create_independent_backtesting( config_to_use, self.tentacles_setup_config, [data_file_to_use], "") await octobot_backtesting_api.initialize_and_run_independent_backtesting( independent_backtesting, log_errors=False) await octobot_backtesting_api.join_independent_backtesting( independent_backtesting) return independent_backtesting except backtesting_errors.MissingTimeFrame: # ignore this exception: is due to missing of the only required time frame return independent_backtesting except Exception as e: self.logger.exception(e, True, str(e)) return independent_backtesting
async def initialize(self): try: await self.initializer.create() join_backtesting_timeout = constants.BACKTESTING_DEFAULT_JOIN_TIMEOUT if self.enable_join_timeout else None self.independent_backtesting = octobot_backtesting_api.create_independent_backtesting( self.config, self.tentacles_setup_config, backtesting_api.get_backtesting_data_files(self.config), run_on_common_part_only=self.run_on_common_part_only, join_backtesting_timeout=join_backtesting_timeout) await octobot_backtesting_api.initialize_and_run_independent_backtesting( self.independent_backtesting, log_errors=False) await octobot_backtesting_api.join_independent_backtesting( self.independent_backtesting, timeout=join_backtesting_timeout) if self.log_report: octobot_backtesting_api.log_independent_backtesting_report( self.independent_backtesting) await octobot_backtesting_api.stop_independent_backtesting( self.independent_backtesting, memory_check=False) except Exception as e: self.logger.error( f"Error when starting backtesting: {e.__class__.__name__}") finally: self.task_manager.stop_tasks()