Пример #1
0
    def load_config(self) -> Dict[str, Any]:
        """
        Extract information for sys.argv and load the bot configuration
        :return: Configuration dictionary
        """
        # Load all configs
        config: Dict[str,
                     Any] = self.load_from_files(self.args.get("config", []))

        # Keep a copy of the original configuration file
        config['original_config'] = deepcopy(config)

        self._process_logging_options(config)

        self._process_runmode(config)

        self._process_common_options(config)

        self._process_trading_options(config)

        self._process_optimize_options(config)

        self._process_plot_options(config)

        # Check if the exchange set by the user is supported
        check_exchange(
            config,
            config.get('experimental', {}).get('block_bad_exchanges', True))

        self._resolve_pairs_list(config)

        process_temporary_deprecated_settings(config)

        return config
def test_process_temporary_deprecated_settings(mocker, default_conf, setting,
                                               caplog):
    patched_configuration_load_config_file(mocker, default_conf)

    # Create sections for new and deprecated settings
    # (they may not exist in the config)
    default_conf[setting[0]] = {}
    default_conf[setting[3]] = {}
    # Assign new setting
    default_conf[setting[0]][setting[1]] = setting[2]
    # Assign deprecated setting
    default_conf[setting[3]][setting[4]] = setting[5]

    # New and deprecated settings are conflicting ones
    with pytest.raises(OperationalException, match=r'DEPRECATED'):
        process_temporary_deprecated_settings(default_conf)

    caplog.clear()

    # Delete new setting
    del default_conf[setting[0]][setting[1]]

    process_temporary_deprecated_settings(default_conf)
    assert log_has_re('DEPRECATED', caplog)
    # The value of the new setting shall have been set to the
    # value of the deprecated one
    assert default_conf[setting[0]][setting[1]] == setting[5]
Пример #3
0
def test_process_deprecated_setting_edge(mocker, edge_conf, caplog):
    patched_configuration_load_config_file(mocker, edge_conf)
    edge_conf.update({'edge': {
        'enabled': True,
        'capital_available_percentage': 0.5,
    }})

    process_temporary_deprecated_settings(edge_conf)
    assert log_has_re(r"DEPRECATED.*Using 'edge.capital_available_percentage'*", caplog)
Пример #4
0
def test_process_deprecated_protections(default_conf, caplog):
    message = "DEPRECATED: Setting 'protections' in the configuration is deprecated."
    config = deepcopy(default_conf)
    process_temporary_deprecated_settings(config)
    assert not log_has(message, caplog)

    config['protections'] = []
    process_temporary_deprecated_settings(config)
    assert log_has(message, caplog)
Пример #5
0
def test_process_deprecated_setting_edge(mocker, edge_conf):
    patched_configuration_load_config_file(mocker, edge_conf)
    edge_conf.update({'edge': {
        'enabled': True,
        'capital_available_percentage': 0.5,
    }})

    with pytest.raises(OperationalException,
                       match=r"DEPRECATED.*Using 'edge.capital_available_percentage'*"):
        process_temporary_deprecated_settings(edge_conf)
Пример #6
0
def test_process_deprecated_setting_pairlists(mocker, default_conf, caplog):
    patched_configuration_load_config_file(mocker, default_conf)
    default_conf.update({'pairlist': {
        'method': 'VolumePairList',
        'config': {'precision_filter': True}
    }})

    process_temporary_deprecated_settings(default_conf)
    assert log_has_re(r'DEPRECATED.*precision_filter.*', caplog)
    assert log_has_re(r'DEPRECATED.*in pairlist is deprecated and must be moved*', caplog)
Пример #7
0
def test_process_removed_settings(mocker, default_conf, setting):
    patched_configuration_load_config_file(mocker, default_conf)

    # Create sections for new and deprecated settings
    # (they may not exist in the config)
    default_conf[setting[0]] = {}
    # Assign removed setting
    default_conf[setting[0]][setting[1]] = setting[2]

    # New and deprecated settings are conflicting ones
    with pytest.raises(OperationalException,
                       match=r'Setting .* has been moved'):
        process_temporary_deprecated_settings(default_conf)
Пример #8
0
def test_process_deprecated_ticker_interval(default_conf, caplog):
    message = "DEPRECATED: Please use 'timeframe' instead of 'ticker_interval."
    config = deepcopy(default_conf)

    process_temporary_deprecated_settings(config)
    assert not log_has(message, caplog)

    del config['timeframe']
    config['ticker_interval'] = '15m'
    with pytest.raises(
            OperationalException,
            match=r"DEPRECATED: 'ticker_interval' detected. Please use.*"):
        process_temporary_deprecated_settings(config)
Пример #9
0
    def load_config(self) -> Dict[str, Any]:
        """
        Extract information for sys.argv and load the bot configuration
        :return: Configuration dictionary
        """
        # Load all configs
        config: Dict[str, Any] = load_from_files(self.args.get("config", []))

        # Load environment variables
        env_data = enironment_vars_to_dict()
        config = deep_merge_dicts(env_data, config)

        # Normalize config
        if 'internals' not in config:
            config['internals'] = {}

        if 'pairlists' not in config:
            config['pairlists'] = []

        # Keep a copy of the original configuration file
        config['original_config'] = deepcopy(config)

        self._process_logging_options(config)

        self._process_runmode(config)

        self._process_common_options(config)

        self._process_trading_options(config)

        self._process_optimize_options(config)

        self._process_plot_options(config)

        self._process_data_options(config)

        # Check if the exchange set by the user is supported
        check_exchange(
            config,
            config.get('experimental', {}).get('block_bad_exchanges', True))

        self._resolve_pairs_list(config)

        process_temporary_deprecated_settings(config)

        return config
Пример #10
0
def test_process_deprecated_ticker_interval(mocker, default_conf, caplog):
    message = "DEPRECATED: Please use 'timeframe' instead of 'ticker_interval."
    config = deepcopy(default_conf)
    process_temporary_deprecated_settings(config)
    assert not log_has(message, caplog)

    del config['timeframe']
    config['ticker_interval'] = '15m'
    process_temporary_deprecated_settings(config)
    assert log_has(message, caplog)
    assert config['ticker_interval'] == '15m'

    config = deepcopy(default_conf)
    # Have both timeframe and ticker interval in config
    # Can also happen when using ticker_interval in configuration, and --timeframe as cli argument
    config['timeframe'] = '5m'
    config['ticker_interval'] = '4h'
    with pytest.raises(OperationalException,
                       match=r"Both 'timeframe' and 'ticker_interval' detected."):
        process_temporary_deprecated_settings(config)