mirror of
https://github.com/freqtrade/freqtrade.git
synced 2024-11-10 10:21:59 +00:00
181 lines
6.8 KiB
Python
181 lines
6.8 KiB
Python
"""
|
|
Functions to handle deprecated settings
|
|
"""
|
|
|
|
import logging
|
|
from typing import Optional
|
|
|
|
from freqtrade.constants import Config
|
|
from freqtrade.exceptions import ConfigurationError, OperationalException
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def check_conflicting_settings(
|
|
config: Config,
|
|
section_old: Optional[str],
|
|
name_old: str,
|
|
section_new: Optional[str],
|
|
name_new: str,
|
|
) -> None:
|
|
section_new_config = config.get(section_new, {}) if section_new else config
|
|
section_old_config = config.get(section_old, {}) if section_old else config
|
|
if name_new in section_new_config and name_old in section_old_config:
|
|
new_name = f"{section_new}.{name_new}" if section_new else f"{name_new}"
|
|
old_name = f"{section_old}.{name_old}" if section_old else f"{name_old}"
|
|
raise OperationalException(
|
|
f"Conflicting settings `{new_name}` and `{old_name}` "
|
|
"(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 `{new_name}` "
|
|
"setting instead."
|
|
)
|
|
|
|
|
|
def process_removed_setting(
|
|
config: Config, section1: str, name1: str, section2: Optional[str], name2: str
|
|
) -> None:
|
|
"""
|
|
:param section1: Removed section
|
|
:param name1: Removed setting name
|
|
:param section2: new section for this key
|
|
:param name2: new setting name
|
|
"""
|
|
section1_config = config.get(section1, {})
|
|
if name1 in section1_config:
|
|
section_2 = f"{section2}.{name2}" if section2 else f"{name2}"
|
|
raise ConfigurationError(
|
|
f"Setting `{section1}.{name1}` has been moved to `{section_2}. "
|
|
f"Please delete it from your configuration and use the `{section_2}` "
|
|
"setting instead."
|
|
)
|
|
|
|
|
|
def process_deprecated_setting(
|
|
config: Config,
|
|
section_old: Optional[str],
|
|
name_old: str,
|
|
section_new: Optional[str],
|
|
name_new: str,
|
|
) -> None:
|
|
check_conflicting_settings(config, section_old, name_old, section_new, name_new)
|
|
section_old_config = config.get(section_old, {}) if section_old else config
|
|
|
|
if name_old in section_old_config:
|
|
section_1 = f"{section_old}.{name_old}" if section_old else f"{name_old}"
|
|
section_2 = f"{section_new}.{name_new}" if section_new else f"{name_new}"
|
|
logger.warning(
|
|
"DEPRECATED: "
|
|
f"The `{section_1}` setting is deprecated and "
|
|
"will be removed in the next versions of Freqtrade. "
|
|
f"Please use the `{section_2}` setting in your configuration instead."
|
|
)
|
|
|
|
section_new_config = config.get(section_new, {}) if section_new else config
|
|
section_new_config[name_new] = section_old_config[name_old]
|
|
del section_old_config[name_old]
|
|
|
|
|
|
def process_temporary_deprecated_settings(config: Config) -> None:
|
|
# Kept for future deprecated / moved settings
|
|
# check_conflicting_settings(config, 'ask_strategy', 'use_sell_signal',
|
|
# 'experimental', 'use_sell_signal')
|
|
|
|
process_deprecated_setting(
|
|
config,
|
|
"ask_strategy",
|
|
"ignore_buying_expired_candle_after",
|
|
None,
|
|
"ignore_buying_expired_candle_after",
|
|
)
|
|
|
|
process_deprecated_setting(config, None, "forcebuy_enable", None, "force_entry_enable")
|
|
|
|
# New settings
|
|
if config.get("telegram"):
|
|
process_deprecated_setting(
|
|
config["telegram"], "notification_settings", "sell", "notification_settings", "exit"
|
|
)
|
|
process_deprecated_setting(
|
|
config["telegram"],
|
|
"notification_settings",
|
|
"sell_fill",
|
|
"notification_settings",
|
|
"exit_fill",
|
|
)
|
|
process_deprecated_setting(
|
|
config["telegram"],
|
|
"notification_settings",
|
|
"sell_cancel",
|
|
"notification_settings",
|
|
"exit_cancel",
|
|
)
|
|
process_deprecated_setting(
|
|
config["telegram"], "notification_settings", "buy", "notification_settings", "entry"
|
|
)
|
|
process_deprecated_setting(
|
|
config["telegram"],
|
|
"notification_settings",
|
|
"buy_fill",
|
|
"notification_settings",
|
|
"entry_fill",
|
|
)
|
|
process_deprecated_setting(
|
|
config["telegram"],
|
|
"notification_settings",
|
|
"buy_cancel",
|
|
"notification_settings",
|
|
"entry_cancel",
|
|
)
|
|
if config.get("webhook"):
|
|
process_deprecated_setting(config, "webhook", "webhookbuy", "webhook", "webhookentry")
|
|
process_deprecated_setting(
|
|
config, "webhook", "webhookbuycancel", "webhook", "webhookentrycancel"
|
|
)
|
|
process_deprecated_setting(
|
|
config, "webhook", "webhookbuyfill", "webhook", "webhookentryfill"
|
|
)
|
|
process_deprecated_setting(config, "webhook", "webhooksell", "webhook", "webhookexit")
|
|
process_deprecated_setting(
|
|
config, "webhook", "webhooksellcancel", "webhook", "webhookexitcancel"
|
|
)
|
|
process_deprecated_setting(
|
|
config, "webhook", "webhooksellfill", "webhook", "webhookexitfill"
|
|
)
|
|
|
|
# Legacy way - having them in experimental ...
|
|
|
|
process_removed_setting(config, "experimental", "use_sell_signal", None, "use_exit_signal")
|
|
process_removed_setting(config, "experimental", "sell_profit_only", None, "exit_profit_only")
|
|
process_removed_setting(
|
|
config, "experimental", "ignore_roi_if_buy_signal", None, "ignore_roi_if_entry_signal"
|
|
)
|
|
|
|
process_removed_setting(config, "ask_strategy", "use_sell_signal", None, "use_exit_signal")
|
|
process_removed_setting(config, "ask_strategy", "sell_profit_only", None, "exit_profit_only")
|
|
process_removed_setting(
|
|
config, "ask_strategy", "sell_profit_offset", None, "exit_profit_offset"
|
|
)
|
|
process_removed_setting(
|
|
config, "ask_strategy", "ignore_roi_if_buy_signal", None, "ignore_roi_if_entry_signal"
|
|
)
|
|
if config.get("edge", {}).get(
|
|
"enabled", False
|
|
) and "capital_available_percentage" in config.get("edge", {}):
|
|
raise ConfigurationError(
|
|
"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."
|
|
)
|
|
if "ticker_interval" in config:
|
|
raise ConfigurationError(
|
|
"DEPRECATED: 'ticker_interval' detected. "
|
|
"Please use 'timeframe' instead of 'ticker_interval."
|
|
)
|
|
|
|
if "protections" in config:
|
|
logger.warning("DEPRECATED: Setting 'protections' in the configuration is deprecated.")
|