@@ -137,6 +137,7 @@ def __init__(self, config: Config, exchange: Exchange | None = None) -> None:
137137 self .rejected_dict : dict [str , list ] = {}
138138
139139 self ._exchange_name = self .config ["exchange" ]["name" ]
140+ self .__initial_backtest = exchange is None
140141 if not exchange :
141142 exchange = ExchangeResolver .load_exchange (self .config , load_leverage_tiers = True )
142143 self .exchange = exchange
@@ -179,20 +180,7 @@ def __init__(self, config: Config, exchange: Exchange | None = None) -> None:
179180
180181 if len (self .pairlists .whitelist ) == 0 :
181182 raise OperationalException ("No pair in whitelist." )
182-
183- if self .config .get ("fee" , None ) is not None :
184- self .fee = self .config ["fee" ]
185- logger .info (f"Using fee { self .fee :.4%} from config." )
186- else :
187- fees = [
188- self .exchange .get_fee (
189- symbol = self .pairlists .whitelist [0 ],
190- taker_or_maker = mt , # type: ignore
191- )
192- for mt in ("taker" , "maker" )
193- ]
194- self .fee = max (fee for fee in fees if fee is not None )
195- logger .info (f"Using fee { self .fee :.4%} - worst case fee from exchange (lowest tier)." )
183+ self .set_fee ()
196184 self .precision_mode = self .exchange .precisionMode
197185 self .precision_mode_price = self .exchange .precision_mode_price
198186
@@ -238,6 +226,30 @@ def _validate_pairlists_for_backtesting(self):
238226 "PrecisionFilter not allowed for backtesting multiple strategies."
239227 )
240228
229+ def log_once (self , msg : str ) -> None :
230+ """
231+ Partial reimplementation of log_once from the Login mixin.
232+ only used by recursive, as __initial_backtest is false in all other cases.
233+
234+ """
235+ if self .__initial_backtest :
236+ logger .info (msg )
237+
238+ def set_fee (self ):
239+ if self .config .get ("fee" , None ) is not None :
240+ self .fee = self .config ["fee" ]
241+ self .log_once (f"Using fee { self .fee :.4%} from config." )
242+ else :
243+ fees = [
244+ self .exchange .get_fee (
245+ symbol = self .pairlists .whitelist [0 ],
246+ taker_or_maker = mt , # type: ignore
247+ )
248+ for mt in ("taker" , "maker" )
249+ ]
250+ self .fee = max (fee for fee in fees if fee is not None )
251+ self .log_once (f"Using fee { self .fee :.4%} - worst case fee from exchange (lowest tier)." )
252+
241253 @staticmethod
242254 def cleanup ():
243255 LoggingMixin .show_output = True
0 commit comments