diff --git a/docs/strategy-customization.md b/docs/strategy-customization.md index 221c863ec..260e253c4 100644 --- a/docs/strategy-customization.md +++ b/docs/strategy-customization.md @@ -617,9 +617,8 @@ Please always check the mode of operation to select the correct method to get da ### *available_pairs* ``` python -if self.dp: - for pair, timeframe in self.dp.available_pairs: - print(f"available {pair}, {timeframe}") +for pair, timeframe in self.dp.available_pairs: + print(f"available {pair}, {timeframe}") ``` ### *current_whitelist()* @@ -653,10 +652,9 @@ This is where calling `self.dp.current_whitelist()` comes in handy. ``` python # fetch live / historical candle (OHLCV) data for the first informative pair -if self.dp: - inf_pair, inf_timeframe = self.informative_pairs()[0] - informative = self.dp.get_pair_dataframe(pair=inf_pair, - timeframe=inf_timeframe) +inf_pair, inf_timeframe = self.informative_pairs()[0] +informative = self.dp.get_pair_dataframe(pair=inf_pair, + timeframe=inf_timeframe) ``` !!! Warning "Warning about backtesting" @@ -671,10 +669,9 @@ It can also be used in specific callbacks to get the signal that caused the acti ``` python # fetch current dataframe -if self.dp: - if self.dp.runmode.value in ('live', 'dry_run'): - dataframe, last_updated = self.dp.get_analyzed_dataframe(pair=metadata['pair'], - timeframe=self.timeframe) +if self.dp.runmode.value in ('live', 'dry_run'): + dataframe, last_updated = self.dp.get_analyzed_dataframe(pair=metadata['pair'], + timeframe=self.timeframe) ``` !!! Note "No data available" @@ -684,11 +681,10 @@ if self.dp: ### *orderbook(pair, maximum)* ``` python -if self.dp: - if self.dp.runmode.value in ('live', 'dry_run'): - ob = self.dp.orderbook(metadata['pair'], 1) - dataframe['best_bid'] = ob['bids'][0][0] - dataframe['best_ask'] = ob['asks'][0][0] +if self.dp.runmode.value in ('live', 'dry_run'): + ob = self.dp.orderbook(metadata['pair'], 1) + dataframe['best_bid'] = ob['bids'][0][0] + dataframe['best_ask'] = ob['asks'][0][0] ``` The orderbook structure is aligned with the order structure from [ccxt](https://github.com/ccxt/ccxt/wiki/Manual#order-book-structure), so the result will look as follows: @@ -717,12 +713,11 @@ Therefore, using `ob['bids'][0][0]` as demonstrated above will result in using t ### *ticker(pair)* ``` python -if self.dp: - if self.dp.runmode.value in ('live', 'dry_run'): - ticker = self.dp.ticker(metadata['pair']) - dataframe['last_price'] = ticker['last'] - dataframe['volume24h'] = ticker['quoteVolume'] - dataframe['vwap'] = ticker['vwap'] +if self.dp.runmode.value in ('live', 'dry_run'): + ticker = self.dp.ticker(metadata['pair']) + dataframe['last_price'] = ticker['last'] + dataframe['volume24h'] = ticker['quoteVolume'] + dataframe['vwap'] = ticker['vwap'] ``` !!! Warning diff --git a/freqtrade/strategy/interface.py b/freqtrade/strategy/interface.py index f41369189..79dbd4c69 100644 --- a/freqtrade/strategy/interface.py +++ b/freqtrade/strategy/interface.py @@ -617,9 +617,6 @@ class IStrategy(ABC, HyperStrategyMixin): ) informative_pairs.append(pair_tf) else: - if not self.dp: - raise OperationalException('@informative decorator with unspecified asset ' - 'requires DataProvider instance.') for pair in self.dp.current_whitelist(): informative_pairs.append((pair, inf_data.timeframe, candle_type)) return list(set(informative_pairs)) @@ -713,10 +710,9 @@ class IStrategy(ABC, HyperStrategyMixin): # Defs that only make change on new candle data. dataframe = self.analyze_ticker(dataframe, metadata) self._last_candle_seen_per_pair[pair] = dataframe.iloc[-1]['date'] - if self.dp: - self.dp._set_cached_df( - pair, self.timeframe, dataframe, - candle_type=self.config.get('candle_type_def', CandleType.SPOT)) + self.dp._set_cached_df( + pair, self.timeframe, dataframe, + candle_type=self.config.get('candle_type_def', CandleType.SPOT)) else: logger.debug("Skipping TA Analysis for already analyzed candle") dataframe[SignalType.ENTER_LONG.value] = 0 @@ -737,8 +733,6 @@ class IStrategy(ABC, HyperStrategyMixin): The analyzed dataframe is then accessible via `dp.get_analyzed_dataframe()`. :param pair: Pair to analyze. """ - if not self.dp: - raise OperationalException("DataProvider not found.") dataframe = self.dp.ohlcv( pair, self.timeframe, candle_type=self.config.get('candle_type_def', CandleType.SPOT) )