From a0ef89d9101093a090e603d854fe1f53ea69d081 Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 22 Sep 2021 20:48:05 +0200 Subject: [PATCH] Also support column-transition for V1 strategies --- freqtrade/strategy/interface.py | 16 ++++++++-------- tests/strategy/test_strategy_loading.py | 12 +++++++----- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/freqtrade/strategy/interface.py b/freqtrade/strategy/interface.py index 0d651ccbb..abaf7d224 100644 --- a/freqtrade/strategy/interface.py +++ b/freqtrade/strategy/interface.py @@ -959,13 +959,13 @@ class IStrategy(ABC, HyperStrategyMixin): if self._buy_fun_len == 2: warnings.warn("deprecated - check out the Sample strategy to see " "the current function headers!", DeprecationWarning) - return self.populate_buy_trend(dataframe) # type: ignore + df = self.populate_buy_trend(dataframe) # type: ignore else: df = self.populate_buy_trend(dataframe, metadata) - if 'enter_long' not in df.columns: - df = df.rename({'buy': 'enter_long', 'buy_tag': 'long_tag'}, axis='columns') + if 'enter_long' not in df.columns: + df = df.rename({'buy': 'enter_long', 'buy_tag': 'long_tag'}, axis='columns') - return df + return df def advise_exit(self, dataframe: DataFrame, metadata: dict) -> DataFrame: """ @@ -981,9 +981,9 @@ class IStrategy(ABC, HyperStrategyMixin): if self._sell_fun_len == 2: warnings.warn("deprecated - check out the Sample strategy to see " "the current function headers!", DeprecationWarning) - return self.populate_sell_trend(dataframe) # type: ignore + df = self.populate_sell_trend(dataframe) # type: ignore else: df = self.populate_sell_trend(dataframe, metadata) - if 'exit_long' not in df.columns: - df = df.rename({'sell': 'exit_long'}, axis='columns') - return df + if 'exit_long' not in df.columns: + df = df.rename({'sell': 'exit_long'}, axis='columns') + return df diff --git a/tests/strategy/test_strategy_loading.py b/tests/strategy/test_strategy_loading.py index 4e29e1ebc..e18a3710b 100644 --- a/tests/strategy/test_strategy_loading.py +++ b/tests/strategy/test_strategy_loading.py @@ -99,8 +99,10 @@ def test_load_strategy_noname(default_conf): StrategyResolver.load_strategy(default_conf) -def test_strategy_v2(result, default_conf): - default_conf.update({'strategy': 'StrategyTestV2'}) +@pytest.mark.filterwarnings("ignore:deprecated") +@pytest.mark.parametrize('strategy_name', ['StrategyTestV2', 'TestStrategyLegacyV1']) +def test_strategy_pre_v3(result, default_conf, strategy_name): + default_conf.update({'strategy': strategy_name}) strategy = StrategyResolver.load_strategy(default_conf) metadata = {'pair': 'ETH/BTC'} @@ -364,7 +366,7 @@ def test_deprecate_populate_indicators(result, default_conf): @pytest.mark.filterwarnings("ignore:deprecated") -def test_call_deprecated_function(result, monkeypatch, default_conf, caplog): +def test_call_deprecated_function(result, default_conf, caplog): default_location = Path(__file__).parent / "strats" del default_conf['timeframe'] default_conf.update({'strategy': 'TestStrategyLegacyV1', @@ -386,11 +388,11 @@ def test_call_deprecated_function(result, monkeypatch, default_conf, caplog): enterdf = strategy.advise_entry(result, metadata=metadata) assert isinstance(enterdf, DataFrame) - assert 'buy' in enterdf.columns + assert 'enter_long' in enterdf.columns exitdf = strategy.advise_exit(result, metadata=metadata) assert isinstance(exitdf, DataFrame) - assert 'sell' in exitdf + assert 'exit_long' in exitdf assert log_has("DEPRECATED: Please migrate to using 'timeframe' instead of 'ticker_interval'.", caplog)