From 9f863369bd6a584774a599393de060faabc03b12 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 27 Mar 2022 18:58:46 +0200 Subject: [PATCH] Migrate bid/ask strategy to entry/exit pricing --- freqtrade/configuration/config_validation.py | 23 +++++++++++++ tests/test_configuration.py | 34 ++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/freqtrade/configuration/config_validation.py b/freqtrade/configuration/config_validation.py index 6ed2ba9b4..2593dd39e 100644 --- a/freqtrade/configuration/config_validation.py +++ b/freqtrade/configuration/config_validation.py @@ -217,6 +217,7 @@ def validate_migrated_strategy_settings(conf: Dict[str, Any]) -> None: _validate_time_in_force(conf) _validate_order_types(conf) _validate_unfilledtimeout(conf) + _validate_pricing_rules(conf) def _validate_time_in_force(conf: Dict[str, Any]) -> None: @@ -279,3 +280,25 @@ def _validate_unfilledtimeout(conf: Dict[str, Any]) -> None: ]: process_deprecated_setting(conf, 'unfilledtimeout', o, 'unfilledtimeout', n) + + +def _validate_pricing_rules(conf: Dict[str, Any]) -> None: + + if conf.get('ask_strategy') or conf.get('bid_strategy'): + if conf.get('trading_mode', TradingMode.SPOT) != TradingMode.SPOT: + raise OperationalException( + "Please migrate your pricing settings to use the new wording.") + else: + + logger.warning( + "DEPRECATED: Using 'ask_strategy' and 'bid_strategy' is deprecated." + "Please migrate your settings to use 'entry_pricing' and 'exit_pricing'." + ) + conf['entry_pricing'] = {} + for obj in list(conf.get('bid_strategy').keys()): + process_deprecated_setting(conf, 'bid_strategy', obj, 'entry_pricing', obj) + del conf['bid_strategy'] + conf['exit_pricing'] = {} + for obj in list(conf.get('ask_strategy').keys()): + process_deprecated_setting(conf, 'ask_strategy', obj, 'exit_pricing', obj) + del conf['ask_strategy'] diff --git a/tests/test_configuration.py b/tests/test_configuration.py index 9de4ec1fd..808a926cb 100644 --- a/tests/test_configuration.py +++ b/tests/test_configuration.py @@ -1023,6 +1023,40 @@ def test__validate_unfilledtimeout(default_conf, caplog) -> None: validate_config_consistency(conf) +def test__validate_pricing_rules(default_conf, caplog) -> None: + def_conf = deepcopy(default_conf) + del def_conf['entry_pricing'] + del def_conf['exit_pricing'] + + def_conf['ask_strategy'] = { + 'price_side': 'ask', + 'use_order_book': True, + } + def_conf['bid_strategy'] = { + 'price_side': 'bid', + 'use_order_book': False, + } + conf = deepcopy(def_conf) + + validate_config_consistency(conf) + assert log_has_re( + r"DEPRECATED: Using 'ask_strategy' and 'bid_strategy' is.*", caplog) + assert conf['exit_pricing']['price_side'] == 'ask' + assert conf['exit_pricing']['use_order_book'] is True + assert conf['entry_pricing']['price_side'] == 'bid' + assert conf['entry_pricing']['use_order_book'] is False + assert 'ask_strategy' not in conf + assert 'bid_strategy' not in conf + + conf = deepcopy(def_conf) + + conf['trading_mode'] = 'futures' + with pytest.raises( + OperationalException, + match=r"Please migrate your pricing settings to use the new wording\."): + validate_config_consistency(conf) + + def test_load_config_test_comments() -> None: """ Load config with comments