From 44a24685ac49081ce3ff0f7caefc5996106dd517 Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 1 Nov 2023 11:01:55 +0100 Subject: [PATCH] Add support for {base} and {quote} in informative decorator --- freqtrade/strategy/informative_decorator.py | 12 +++++++---- freqtrade/strategy/interface.py | 23 +++++++++++++++------ 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/freqtrade/strategy/informative_decorator.py b/freqtrade/strategy/informative_decorator.py index 3795f8126..15b18b67f 100644 --- a/freqtrade/strategy/informative_decorator.py +++ b/freqtrade/strategy/informative_decorator.py @@ -81,9 +81,12 @@ def __get_pair_formats(market: Optional[Dict[str, Any]]) -> Dict[str, str]: } -def _format_pair_name(config, pair: str) -> str: - return pair.format(stake_currency=config['stake_currency'], - stake=config['stake_currency']).upper() +def _format_pair_name(config, pair: str, market: Optional[Dict[str, Any]] = None) -> str: + return pair.format( + stake_currency=config['stake_currency'], + stake=config['stake_currency'], + **__get_pair_formats(market), + ).upper() def _create_and_merge_informative_pair(strategy, dataframe: DataFrame, metadata: dict, @@ -98,7 +101,8 @@ def _create_and_merge_informative_pair(strategy, dataframe: DataFrame, metadata: if asset: # Insert stake currency if needed. - asset = _format_pair_name(config, asset) + market1 = strategy.dp.market(metadata['pair']) + asset = _format_pair_name(config, asset, market1) else: # Not specifying an asset will define informative dataframe for current pair. asset = metadata['pair'] diff --git a/freqtrade/strategy/interface.py b/freqtrade/strategy/interface.py index 651ca14bf..bd846eb90 100644 --- a/freqtrade/strategy/interface.py +++ b/freqtrade/strategy/interface.py @@ -756,12 +756,23 @@ class IStrategy(ABC, HyperStrategyMixin): candle_type = (inf_data.candle_type if inf_data.candle_type else self.config.get('candle_type_def', CandleType.SPOT)) if inf_data.asset: - pair_tf = ( - _format_pair_name(self.config, inf_data.asset), - inf_data.timeframe, - candle_type, - ) - informative_pairs.append(pair_tf) + if any(s in inf_data.asset for s in ("{BASE}", "{base}")): + for pair in self.dp.current_whitelist(): + + pair_tf = ( + _format_pair_name(self.config, inf_data.asset, self.dp.market(pair)), + inf_data.timeframe, + candle_type, + ) + informative_pairs.append(pair_tf) + + else: + pair_tf = ( + _format_pair_name(self.config, inf_data.asset), + inf_data.timeframe, + candle_type, + ) + informative_pairs.append(pair_tf) else: for pair in self.dp.current_whitelist(): informative_pairs.append((pair, inf_data.timeframe, candle_type))