コード例 #1
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")
コード例 #2
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:
             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)."
             )
コード例 #3
0
ファイル: configuration.py プロジェクト: yutiansut/OctoBot
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
コード例 #4
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)