Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
tools = WebInterface.tools
previous_independant_backtesting = tools[BOT_TOOLS_BACKTESTING]
if tools[BOT_TOOLS_STRATEGY_OPTIMIZER] and is_optimizer_in_progress(tools[BOT_TOOLS_STRATEGY_OPTIMIZER]):
return False, "Optimizer already running"
elif previous_independant_backtesting and \
is_independent_backtesting_in_progress(previous_independant_backtesting):
return False, "A backtesting is already running"
else:
if previous_independant_backtesting:
run_in_bot_main_loop(stop_independent_backtesting(previous_independant_backtesting))
if reset_tentacle_config:
tentacles_setup_config = get_tentacles_setup_config()
else:
tentacles_setup_config = get_bot_api().get_edited_tentacles_config()
config = get_global_config()
independent_backtesting = create_independent_backtesting(config,
tentacles_setup_config,
files,
run_on_common_part_only=run_on_common_part_only)
run_in_bot_main_loop(initialize_and_run_independent_backtesting(independent_backtesting), blocking=False)
tools[BOT_TOOLS_BACKTESTING] = independent_backtesting
tools[BOT_TOOLS_BACKTESTING_SOURCE] = source
return True, "Backtesting started"
except Exception as e:
LOGGER.exception(e)
return False, f"Error when starting backtesting: {e}"
async def initialize(self):
try:
await self.initializer.create()
self.independent_backtesting = create_independent_backtesting(
self.config,
self.tentacles_setup_config,
get_backtesting_data_files(self.config),
run_on_common_part_only=self.run_on_common_part_only)
await initialize_and_run_independent_backtesting(self.independent_backtesting, log_errors=False)
await join_independent_backtesting(self.independent_backtesting)
if self.log_report:
log_independent_backtesting_report(self.independent_backtesting)
await 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(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
def start_optimizer(strategy, time_frames, evaluators, risks):
try:
tools = WebInterface.tools
optimizer = tools[BOT_TOOLS_STRATEGY_OPTIMIZER]
if optimizer is not None and is_optimizer_computing(optimizer):
return False, "Optimizer already running"
independent_backtesting = tools[BOT_TOOLS_BACKTESTING]
if independent_backtesting and is_independent_backtesting_in_progress(independent_backtesting):
return False, "A backtesting is already running"
else:
formatted_time_frames = parse_time_frames(time_frames)
float_risks = [float(risk) for risk in risks]
temp_independent_backtesting = create_independent_backtesting(get_global_config(), None, [])
optimizer_config = run_in_bot_async_executor(
initialize_independent_backtesting_config(temp_independent_backtesting)
)
optimizer = create_strategy_optimizer(optimizer_config,
get_bot_api().get_edited_tentacles_config(),
strategy)
tools[BOT_TOOLS_STRATEGY_OPTIMIZER] = optimizer
thread = threading.Thread(target=find_optimal_configuration,
args=(optimizer, evaluators, formatted_time_frames, float_risks),
name=f"{optimizer.get_name()}-WebInterface-runner")
thread.start()
return True, "Optimizer started"
except Exception as e:
LOGGER.exception(e, True, f"Error when starting optimizer: {e}")
raise e