def get_activated_trading_mode(config): if CONFIG_TRADING_TENTACLES in config: try: trading_modes = [ class_str for class_str, activated in config[CONFIG_TRADING_TENTACLES].items() if activated and get_class_from_string(class_str, AbstractTradingMode, modes, error_when_not_found=True) ] if len(trading_modes) > 1: raise ConfigTradingError( f"More than one activated trading mode found in your {CONFIG_TRADING_FILE_PATH} file, " f"please activate only one") elif trading_modes: trading_mode_class = get_deep_class_from_string( trading_modes[0], modes) if trading_mode_class is not None: return AdvancedManager.get_class(config, trading_mode_class) except ModuleNotFoundError as e: get_logger("get_activated_trading_mode").error( f"Error when loading a trading mode: {e} " f"referenced in {CONFIG_TRADING_FILE_PATH} file") raise ConfigTradingError( f"Please ensure your {CONFIG_TRADING_FILE_PATH} file is valid and at least one trading " f"mode is activated")
def _init_strategies_instances(self, symbol, all_strategy_instances): all_strategy_classes = [s.__class__ for s in all_strategy_instances] required_strategies, required_strategies_min_count = self.get_required_strategies( ) missing_strategies = [] found_strategy_count = 0 for required_class in required_strategies: if required_class in all_strategy_classes: self.strategy_instances_by_classes[symbol][required_class] = \ all_strategy_instances[all_strategy_classes.index(required_class)] found_strategy_count += 1 else: subclass = AdvancedManager.get_class(self.config, required_class) if subclass in all_strategy_classes: self.strategy_instances_by_classes[symbol][required_class] = \ all_strategy_instances[all_strategy_classes.index(subclass)] found_strategy_count += 1 if required_class not in self.strategy_instances_by_classes[ symbol]: missing_strategies.append(required_class) if found_strategy_count < required_strategies_min_count: for missing_strategy in missing_strategies: self.logger.error( f"No instance of {missing_strategy.__name__} or advanced equivalent found, " f"{self.get_name()} trading mode can't work properly ! Maybe this strategy is " f"disabled in tentacles/Evaluator/evaluator_config.json (missing " f"{required_strategies_min_count-found_strategy_count} out of " f"{required_strategies_min_count} minimum required strategies)." )
def _get_advanced_class_details(class_name, klass, is_trading_mode=False, is_strategy=False): from tentacles_management.advanced_manager import AdvancedManager details = {} config = get_bot().get_config() advanced_class = AdvancedManager.get_class(config, klass) if advanced_class and advanced_class.get_name() != class_name: details[NAME_KEY] = advanced_class.get_name() details[DESCRIPTION_KEY] = advanced_class.get_description() details[BASE_CLASSES_KEY] = [ k.get_name() for k in advanced_class.__bases__ ] if is_trading_mode: required_strategies, required_strategies_count = klass.get_required_strategies_names_and_count( ) details[REQUIREMENTS_KEY] = [ strategy for strategy in required_strategies ] details[REQUIREMENTS_COUNT_KEY] = required_strategies_count elif is_strategy: details[REQUIREMENTS_KEY] = [ evaluator for evaluator in advanced_class.get_required_evaluators(config) ] details[DEFAULT_CONFIG_KEY] = [ evaluator for evaluator in advanced_class.get_default_evaluators(config) ] return details
async def eval_impl(self): interest_over_time = self.simplified_pytrends.interest_over_time() trend = numpy.array([d["data"] for d in interest_over_time]) # compute bollinger bands self.eval_note = AdvancedManager.get_class( self.config, StatisticAnalysis).analyse_recent_trend_changes(trend, numpy.sqrt)