From 39230364fd52ddfd441db4478baaaf603d535698 Mon Sep 17 00:00:00 2001 From: hroff-1902 Date: Sat, 8 Jun 2019 07:09:23 +0300 Subject: [PATCH] add timeframe to strategy and hyperopt metadata --- freqtrade/edge/__init__.py | 6 +++--- freqtrade/optimize/backtesting.py | 6 +++--- freqtrade/optimize/default_hyperopt.py | 1 - freqtrade/optimize/hyperopt.py | 2 +- freqtrade/strategy/interface.py | 8 +++++--- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/freqtrade/edge/__init__.py b/freqtrade/edge/__init__.py index 3ddff4772..808a31a49 100644 --- a/freqtrade/edge/__init__.py +++ b/freqtrade/edge/__init__.py @@ -47,7 +47,6 @@ class Edge(): self.exchange = exchange self.strategy = strategy self.ticker_interval = self.strategy.ticker_interval - self.tickerdata_to_dataframe = self.strategy.tickerdata_to_dataframe self.advise_sell = self.strategy.advise_sell self.advise_buy = self.strategy.advise_buy @@ -112,7 +111,7 @@ class Edge(): logger.critical("No data found. Edge is stopped ...") return False - preprocessed = self.tickerdata_to_dataframe(data) + preprocessed = self.strategy.tickerdata_to_dataframe(data, self.ticker_interval) # Print timeframe min_date, max_date = history.get_timeframe(preprocessed) @@ -130,8 +129,9 @@ class Edge(): pair_data = pair_data.sort_values(by=['date']) pair_data = pair_data.reset_index(drop=True) + metadata = {'pair': pair, 'timeframe': self.ticker_interval} ticker_data = self.advise_sell( - self.advise_buy(pair_data, {'pair': pair}), {'pair': pair})[headers].copy() + self.advise_buy(pair_data, metadata), metadata)[headers].copy() trades += self._find_trades_for_stoploss_range(ticker_data, pair, self._stoploss_range) diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 76c6556fa..31a02018d 100644 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -94,7 +94,6 @@ class Backtesting(object): self.ticker_interval = self.config.get('ticker_interval') self.ticker_interval_mins = timeframe_to_minutes(self.ticker_interval) - self.tickerdata_to_dataframe = strategy.tickerdata_to_dataframe self.advise_buy = strategy.advise_buy self.advise_sell = strategy.advise_sell # Set stoploss_on_exchange to false for backtesting, @@ -219,8 +218,9 @@ class Backtesting(object): for pair, pair_data in processed.items(): pair_data['buy'], pair_data['sell'] = 0, 0 # cleanup from previous run + metadata = {'pair': pair, 'timeframe': self.ticker_interval} ticker_data = self.advise_sell( - self.advise_buy(pair_data, {'pair': pair}), {'pair': pair})[headers].copy() + self.advise_buy(pair_data, metadata), metadata)[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) @@ -439,7 +439,7 @@ class Backtesting(object): (max_date - min_date).days ) # need to reprocess data every time to populate signals - preprocessed = self.strategy.tickerdata_to_dataframe(data) + preprocessed = self.strategy.tickerdata_to_dataframe(data, self.ticker_interval) # Execute backtest and print results all_results[self.strategy.get_strategy_name()] = self.backtest( diff --git a/freqtrade/optimize/default_hyperopt.py b/freqtrade/optimize/default_hyperopt.py index 7f1cb2435..050791bff 100644 --- a/freqtrade/optimize/default_hyperopt.py +++ b/freqtrade/optimize/default_hyperopt.py @@ -105,7 +105,6 @@ class DefaultHyperOpts(IHyperOpt): """ Sell strategy Hyperopt will build and use """ - # print(params) conditions = [] # GUARDS AND TRENDS if 'sell-mfi-enabled' in params and params['sell-mfi-enabled']: diff --git a/freqtrade/optimize/hyperopt.py b/freqtrade/optimize/hyperopt.py index d19d54031..0a6deb632 100644 --- a/freqtrade/optimize/hyperopt.py +++ b/freqtrade/optimize/hyperopt.py @@ -296,7 +296,7 @@ class Hyperopt(Backtesting): self.strategy.advise_indicators = \ self.custom_hyperopt.populate_indicators # type: ignore - dump(self.strategy.tickerdata_to_dataframe(data), TICKERDATA_PICKLE) + dump(self.strategy.tickerdata_to_dataframe(data, self.ticker_interval), TICKERDATA_PICKLE) # We don't need exchange instance anymore while running hyperopt self.exchange = None # type: ignore diff --git a/freqtrade/strategy/interface.py b/freqtrade/strategy/interface.py index caf56f13e..be5a6813a 100644 --- a/freqtrade/strategy/interface.py +++ b/freqtrade/strategy/interface.py @@ -198,7 +198,7 @@ class IStrategy(ABC): return False, False try: - dataframe = self.analyze_ticker(dataframe, {'pair': pair}) + dataframe = self.analyze_ticker(dataframe, {'pair': pair, 'timeframe': interval}) except ValueError as error: logger.warning( 'Unable to analyze ticker for pair %s: %s', @@ -362,11 +362,13 @@ class IStrategy(ABC): return False - def tickerdata_to_dataframe(self, tickerdata: Dict[str, List]) -> Dict[str, DataFrame]: + def tickerdata_to_dataframe(self, tickerdata: Dict[str, List], + ticker_interval: str) -> Dict[str, DataFrame]: """ Creates a dataframe and populates indicators for given ticker data """ - return {pair: self.advise_indicators(pair_data, {'pair': pair}) + return {pair: self.advise_indicators(pair_data, + {'pair': pair, 'timeframe': ticker_interval}) for pair, pair_data in tickerdata.items()} def advise_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame: