diff --git a/freqtrade/analyze.py b/freqtrade/analyze.py index dcf66b0a2..a4703d0f2 100644 --- a/freqtrade/analyze.py +++ b/freqtrade/analyze.py @@ -65,7 +65,7 @@ class Analyze(object): frame.drop(frame.tail(1).index, inplace=True) # eliminate partial candle return frame - def populate_indicators(self, dataframe: DataFrame, pair: str = None) -> DataFrame: + def populate_indicators(self, dataframe: DataFrame, pair: str) -> DataFrame: """ Adds several different TA indicators to the given DataFrame @@ -75,7 +75,7 @@ class Analyze(object): """ return self.strategy.advise_indicators(dataframe=dataframe, pair=pair) - def populate_buy_trend(self, dataframe: DataFrame, pair: str = None) -> DataFrame: + def populate_buy_trend(self, dataframe: DataFrame, pair: str) -> DataFrame: """ Based on TA indicators, populates the buy signal for the given dataframe :param dataframe: DataFrame @@ -83,7 +83,7 @@ class Analyze(object): """ return self.strategy.advise_buy(dataframe=dataframe, pair=pair) - def populate_sell_trend(self, dataframe: DataFrame, pair: str = None) -> DataFrame: + def populate_sell_trend(self, dataframe: DataFrame, pair: str) -> DataFrame: """ Based on TA indicators, populates the sell signal for the given dataframe :param dataframe: DataFrame @@ -215,5 +215,5 @@ class Analyze(object): """ Creates a dataframe and populates indicators for given ticker data """ - return {pair: self.populate_indicators(self.parse_ticker_dataframe(pair_data)) + return {pair: self.populate_indicators(self.parse_ticker_dataframe(pair_data), pair) for pair, pair_data in tickerdata.items()} diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 713f23ecc..c5d0649c9 100644 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -162,7 +162,7 @@ class Backtesting(object): pair_data['buy'], pair_data['sell'] = 0, 0 # cleanup from previous run ticker_data = self.populate_sell_trend( - self.populate_buy_trend(pair_data))[headers].copy() + self.populate_buy_trend(pair_data, pair), pair)[headers].copy() # to avoid using data from future, we buy/sell with signal from previous candle ticker_data.loc[:, 'buy'] = ticker_data['buy'].shift(1) diff --git a/freqtrade/tests/optimize/test_backtesting.py b/freqtrade/tests/optimize/test_backtesting.py index e1876d15b..585223f59 100644 --- a/freqtrade/tests/optimize/test_backtesting.py +++ b/freqtrade/tests/optimize/test_backtesting.py @@ -142,7 +142,7 @@ def _trend(signals, buy_value, sell_value): return signals -def _trend_alternate(dataframe=None): +def _trend_alternate(dataframe=None, pair=None): signals = dataframe low = signals['low'] n = len(low) @@ -534,7 +534,7 @@ def test_backtest_ticks(default_conf, fee, mocker): def test_backtest_clash_buy_sell(mocker, default_conf): # Override the default buy trend function in our default_strategy - def fun(dataframe=None): + def fun(dataframe=None, pair=None): buy_value = 1 sell_value = 1 return _trend(dataframe, buy_value, sell_value) @@ -550,7 +550,7 @@ def test_backtest_clash_buy_sell(mocker, default_conf): def test_backtest_only_sell(mocker, default_conf): # Override the default buy trend function in our default_strategy - def fun(dataframe=None): + def fun(dataframe=None, pair=None): buy_value = 0 sell_value = 1 return _trend(dataframe, buy_value, sell_value) diff --git a/freqtrade/tests/test_analyze.py b/freqtrade/tests/test_analyze.py index e8d0816aa..86555fea7 100644 --- a/freqtrade/tests/test_analyze.py +++ b/freqtrade/tests/test_analyze.py @@ -56,13 +56,15 @@ def test_dataframe_correct_columns(result): def test_populates_buy_trend(result): # Load the default strategy for the unit test, because this logic is done in main.py - dataframe = _ANALYZE.populate_buy_trend(_ANALYZE.populate_indicators(result)) + dataframe = _ANALYZE.populate_buy_trend( + _ANALYZE.populate_indicators(result, 'UNITTEST/BTC'), 'UNITTEST/BTC') assert 'buy' in dataframe.columns def test_populates_sell_trend(result): # Load the default strategy for the unit test, because this logic is done in main.py - dataframe = _ANALYZE.populate_sell_trend(_ANALYZE.populate_indicators(result)) + dataframe = _ANALYZE.populate_sell_trend( + _ANALYZE.populate_indicators(result, 'UNITTEST/BTC'), 'UNITTEST/BTC') assert 'sell' in dataframe.columns