예제 #1
0
 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).")
예제 #2
0
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
예제 #3
0
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")
예제 #4
0
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
예제 #5
0
    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.")
예제 #8
0
 def eval_impl(self):
     self.eval_note = AdvancedManager.get_class(
         self.config, MomentumAnalyser).bollinger_momentum_analysis(
             self.data[PriceStrings.STR_PRICE_CLOSE.value])
예제 #9
0
    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)