diff --git a/freqtrade/configuration/configuration.py b/freqtrade/configuration/configuration.py index 764593d0f..84d58f754 100644 --- a/freqtrade/configuration/configuration.py +++ b/freqtrade/configuration/configuration.py @@ -9,8 +9,9 @@ from typing import Any, Callable, Dict, List, Optional from freqtrade import OperationalException, constants from freqtrade.configuration.check_exchange import check_exchange -from freqtrade.configuration.config_validation import ( - validate_config_consistency, validate_config_schema) +from freqtrade.configuration.config_validation import (validate_config_consistency, + validate_config_schema) +from freqtrade.configuration.deprecated_settings import process_temporary_deprecated_settings from freqtrade.configuration.directory_operations import (create_datadir, create_userdata_dir) from freqtrade.configuration.load_config import load_config_file @@ -75,6 +76,10 @@ class Configuration: # Normalize config if 'internals' not in config: config['internals'] = {} + # TODO: This can be deleted along with removal of deprecated + # experimental settings + if 'ask_strategy' not in config: + config['ask_strategy'] = {} # validate configuration before returning logger.info('Validating configuration ...') @@ -106,6 +111,8 @@ class Configuration: self._resolve_pairs_list(config) + process_temporary_deprecated_settings(config) + validate_config_consistency(config) return config diff --git a/freqtrade/configuration/deprecated_settings.py b/freqtrade/configuration/deprecated_settings.py new file mode 100644 index 000000000..927497c56 --- /dev/null +++ b/freqtrade/configuration/deprecated_settings.py @@ -0,0 +1,59 @@ +""" +Functions to handle deprecated warnings +""" + +import logging +from typing import Any, Dict + +from freqtrade import OperationalException + + +logger = logging.getLogger(__name__) + + +def check_conflicting_settings(config: Dict[str, Any], + section1: str, name1: str, + section2: str, name2: str): + section1_config = config.get(section1, {}) + section2_config = config.get(section2, {}) + if name1 in section1_config and name2 in section2_config: + raise OperationalException( + f"Conflicting settings `{section1}.{name1}` and `{section2}.{name2}` " + "(DEPRECATED) detected in the configuration file. " + "This deprecated setting will be removed in the next versions of Freqtrade. " + f"Please delete it from your configuration and use the `{section1}.{name1}` " + "setting instead." + ) + + +def process_deprecated_setting(config: Dict[str, Any], + section1: str, name1: str, + section2: str, name2: str): + section2_config = config.get(section2, {}) + + if name2 in section2_config: + logger.warning( + "DEPRECATED: " + f"The `{section2}.{name2}` setting is deprecated and " + "will be removed in the next versions of Freqtrade. " + f"Please use the `{section1}.{name1}` setting in your configuration instead." + ) + section1_config = config.get(section1, {}) + section1_config[name1] = section2_config[name2] + + +def process_temporary_deprecated_settings(config: Dict[str, Any]) -> None: + + check_conflicting_settings(config, 'ask_strategy', 'use_sell_signal', + 'experimental', 'use_sell_signal') + check_conflicting_settings(config, 'ask_strategy', 'sell_profit_only', + 'experimental', 'sell_profit_only') + check_conflicting_settings(config, 'ask_strategy', 'ignore_roi_if_buy_signal', + 'experimental', 'ignore_roi_if_buy_signal') + + process_deprecated_setting(config, 'ask_strategy', 'use_sell_signal', + 'experimental', 'use_sell_signal') + process_deprecated_setting(config, 'ask_strategy', 'sell_profit_only', + 'experimental', 'sell_profit_only') + process_deprecated_setting(config, 'ask_strategy', 'ignore_roi_if_buy_signal', + 'experimental', 'ignore_roi_if_buy_signal')