""" Functions to handle deprecated settings """ import logging from typing import Any, Dict from freqtrade.exceptions import OperationalException logger = logging.getLogger(__name__) def check_conflicting_settings(config: Dict[str, Any], section1: str, name1: str, section2: str, name2: str) -> None: 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) -> None: 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') if not config.get('pairlists') and not config.get('pairlists'): config['pairlists'] = [{'method': 'StaticPairList'}] logger.warning( "DEPRECATED: " "Pairlists must be defined explicitly in the future." "Defaulting to StaticPairList for now.") if config.get('pairlist', {}).get("method") == 'VolumePairList': logger.warning( "DEPRECATED: " f"Using VolumePairList in pairlist is deprecated and must be moved to pairlists. " "Please refer to the docs on configuration details") pl = {'method': 'VolumePairList'} pl.update(config.get('pairlist', {}).get('config')) config['pairlists'].append(pl) if config.get('pairlist', {}).get('config', {}).get('precision_filter'): logger.warning( "DEPRECATED: " f"Using precision_filter setting is deprecated and has been replaced by" "PrecisionFilter. Please refer to the docs on configuration details") config['pairlists'].append({'method': 'PrecisionFilter'}) if (config.get('edge', {}).get('enabled', False) and 'capital_available_percentage' in config.get('edge', {})): logger.warning( "DEPRECATED: " "Using 'edge.capital_available_percentage' has been deprecated in favor of " "'tradable_balance_ratio'. Please migrate your configuration to " "'tradable_balance_ratio' and remove 'capital_available_percentage' " "from the edge configuration." )