Пример #1
0
    def __init__(self, config, strategy_name):
        self.is_properly_initialized = False
        self.logger = get_logger(self.get_name())
        AdvancedManager.init_advanced_classes_if_necessary(config)
        self.trading_mode = get_activated_trading_mode(config)
        self.config = create_blank_config_using_loaded_one(config)
        self.strategy_class = get_class_from_string(
            strategy_name, StrategiesEvaluator, Strategies,
            evaluator_parent_inspection)
        self.run_results = []
        self.results_report = []
        self.sorted_results_by_time_frame = {}
        self.sorted_results_through_all_time_frame = {}
        self.all_time_frames = []
        self.all_TAs = []
        self.risks = []
        self.current_test_suite = None
        self.errors = set()

        self.is_computing = False
        self.run_id = 0
        self.total_nb_runs = 0

        if not self.strategy_class:
            self.logger.error(
                f"Impossible to find a strategy matching class name: {strategy_name} in installed "
                f"strategies. Please make sure to enter the name of the class, "
                f"ex: FullMixedStrategiesEvaluator")
        else:
            self.is_properly_initialized = True
Пример #2
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 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")
Пример #3
0
def get_time_frames_list(strategy_name):
    if strategy_name:
        strategy_class = get_class_from_string(strategy_name, StrategiesEvaluator,
                                               Strategies, evaluator_parent_inspection)
        return [tf.value for tf in strategy_class.get_required_time_frames(get_bot().get_config())]
    else:
        return []
Пример #4
0
 def _register_only_strategy(self, strategy_evaluator_class):
     for evaluator_name in self.config[CONFIG_EVALUATOR]:
         if get_class_from_string(evaluator_name, StrategiesEvaluator,
                                  Strategies,
                                  evaluator_parent_inspection) is not None:
             self.config[CONFIG_EVALUATOR][evaluator_name] = False
     self.config[CONFIG_EVALUATOR][
         strategy_evaluator_class.get_name()] = True
Пример #5
0
def get_evaluators_list(strategy_name):
    if strategy_name:
        strategy_class = get_class_from_string(strategy_name, StrategiesEvaluator,
                                               Strategies, evaluator_parent_inspection)
        evaluators = EvaluatorCreator.get_relevant_TAs_for_strategy(strategy_class, get_bot().get_config())
        return set(evaluator.get_name() for evaluator in evaluators)
    else:
        return []
Пример #6
0
 def _register_only_trading_mode(self, trading_mode_class):
     for trading_mode_name in self.config[CONFIG_TRADING_TENTACLES]:
         if get_class_from_string(
                 trading_mode_name, AbstractTradingMode, modes,
                 trading_mode_parent_inspection) is not None:
             self.config[CONFIG_TRADING_TENTACLES][
                 trading_mode_name] = False
     self.config[CONFIG_TRADING_TENTACLES][
         trading_mode_class.get_name()] = True
Пример #7
0
 def _check_required_evaluators(self):
     if self.symbol_tasks_manager:
         etm = next(iter(self.symbol_tasks_manager.values()))
         ta_list = etm.get_evaluator().get_ta_eval_list()
         if self.octobot.get_relevant_evaluators() != CONFIG_EVALUATORS_WILDCARD:
             for required_eval in self.octobot.get_relevant_evaluators():
                 required_class = get_class_from_string(required_eval, TAEvaluator, TA, evaluator_parent_inspection)
                 if required_class and not self._class_is_in_list(ta_list, required_class):
                     self.logger.error(f"Missing technical analysis evaluator {required_class.get_name()} for "
                                       f"current strategy. Activate it in OctoBot advanced configuration interface "
                                       f"to allow activated strategy(ies) to work properly.")
Пример #8
0
def _get_strategy_activation_state():
    import trading.trader.modes as modes
    import evaluator.Strategies as strategies
    trading_mode_key = "trading-modes"
    strategies_key = "strategies"
    activation = "activation"
    description = "description"
    advanced_class_key = "advanced_class"
    strategy_config = {
        trading_mode_key: {},
        strategies_key: {}
    }
    strategy_config_classes = {
        trading_mode_key: {},
        strategies_key: {}
    }

    trading_config = _get_trading_config()
    for key, val in trading_config.items():
        config_class = get_class_from_string(key, modes.AbstractTradingMode, modes, trading_mode_parent_inspection)
        if config_class:
            strategy_config[trading_mode_key][key] = {}
            strategy_config[trading_mode_key][key][activation] = val
            strategy_config[trading_mode_key][key][description] = config_class.get_description()
            strategy_config[trading_mode_key][key][advanced_class_key] = \
                _get_advanced_class_details(key, config_class, is_trading_mode=True)
            strategy_config_classes[trading_mode_key][key] = config_class

    evaluator_config = _get_evaluator_config()
    for key, val in evaluator_config.items():
        config_class = get_class_from_string(key, strategies.StrategiesEvaluator,
                                             strategies, evaluator_parent_inspection)
        if config_class:
            strategy_config[strategies_key][key] = {}
            strategy_config[strategies_key][key][activation] = val
            strategy_config[strategies_key][key][description] = config_class.get_description()
            strategy_config[strategies_key][key][advanced_class_key] = \
                _get_advanced_class_details(key, config_class, is_strategy=True)
            strategy_config_classes[strategies_key][key] = config_class

    return strategy_config, strategy_config_classes
Пример #9
0
def _fill_evaluator_config(evaluator_name, activated, eval_type_key,
                           evaluator_type, detailed_config, is_strategy=False):
    activation = "activation"
    description = "description"
    advanced_class_key = "advanced_class"
    klass = get_class_from_string(evaluator_name, AbstractEvaluator, evaluator_type, evaluator_parent_inspection)
    if klass:
        detailed_config[eval_type_key][evaluator_name] = {}
        detailed_config[eval_type_key][evaluator_name][activation] = activated
        detailed_config[eval_type_key][evaluator_name][description] = klass.get_description()
        detailed_config[eval_type_key][evaluator_name][advanced_class_key] = \
            _get_advanced_class_details(evaluator_name, klass, is_strategy=is_strategy)
        return True, klass
    return False, klass
Пример #10
0
 def _is_relevant_evaluation_config(evaluator):
     return get_class_from_string(evaluator, TAEvaluator, TA,
                                  evaluator_parent_inspection) is not None