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: get_logger(self.get_name()).error(f"No instance of {missing_strategy.__name__} " f"or advanced equivalent found, {self.get_name()} trading " "mode can't work properly ! Maybe this strategy is disabled in" f" 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 evaluator.Util.advanced_manager import AdvancedManager name = "name" description = "description" requirements = "requirements" 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] = advanced_class.get_name() details[description] = advanced_class.get_description() if is_trading_mode: details[requirements] = [ strategy.get_name() for strategy in advanced_class.get_required_strategies() ] elif is_strategy: details[requirements] = [ evaluator for evaluator in advanced_class.get_required_evaluators(config) ] return details
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 _get_advanced_class_details(class_name, klass, is_trading_mode=False, is_strategy=False): from evaluator.Util.advanced_manager import AdvancedManager name = "name" description = "description" requirements = "requirements" requirements_count_key = "requirements-min-count" default_config_key = "default-config" 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] = advanced_class.get_name() details[description] = advanced_class.get_description() if is_trading_mode: required_strategies, required_strategies_count = klass.get_required_strategies_names_and_count( ) details[requirements] = [ strategy for strategy in required_strategies ] details[requirements_count_key] = required_strategies_count elif is_strategy: details[requirements] = [ 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)
def eval_impl(self): interest_over_time_df = self.pytrends.interest_over_time() # compute bollinger bands self.eval_note = AdvancedManager.get_class( self.config, StatisticAnalysis).analyse_recent_trend_changes( interest_over_time_df[self.symbol].astype('float64').values, numpy.sqrt)
def _init_strategies_instances(self, symbol, all_strategy_instances): all_strategy_classes = [s.__class__ for s in all_strategy_instances] for required_class in self.get_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)] 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)] if required_class not in self.strategy_instances_by_classes[symbol]: get_logger(self.get_name()).error(f"No instance of {required_class.__name__} " f"or advanced equivalent found, {self.get_name()} trading " "mode can't work properly ! Maybe this strategy is disabled in" " tentacles/Evaluator/evaluator_config.json.")
def eval_impl(self): self.eval_note = AdvancedManager.get_class( self.config, MomentumAnalyser).bollinger_momentum_analysis( self.data[PriceStrings.STR_PRICE_CLOSE.value])
def eval_impl(self): interest_over_time_df = self.pytrends.interest_over_time() # compute bollinger bands self.eval_note = AdvancedManager.get_class(self.config, StatisticAnalysis).analyse_recent_trend_changes( interest_over_time_df[self.symbol], numpy.sqrt)