diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 631f5587d..dc9c1d0bb 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -419,6 +419,11 @@ class Exchange: """exchange ccxt precisionMode""" return self._api.precisionMode + @property + def precision_mode_price(self) -> int: + """exchange ccxt precisionMode""" + return self._api.precisionMode + def additional_exchange_init(self) -> None: """ Additional exchange initialization logic. diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index 5a33e9fa6..c970e440b 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -374,6 +374,7 @@ class FreqtradeBot(LoggingMixin): if trade.exchange != self.exchange.id: continue trade.precision_mode = self.exchange.precisionMode + trade.precision_mode_price = self.exchange.precision_mode_price trade.amount_precision = self.exchange.get_precision_amount(trade.pair) trade.price_precision = self.exchange.get_precision_price(trade.pair) trade.contract_size = self.exchange.get_contract_size(trade.pair) @@ -992,6 +993,7 @@ class FreqtradeBot(LoggingMixin): amount_precision=self.exchange.get_precision_amount(pair), price_precision=self.exchange.get_precision_price(pair), precision_mode=self.exchange.precisionMode, + precision_mode_price=self.exchange.precision_mode_price, contract_size=self.exchange.get_contract_size(pair), ) stoploss = self.strategy.stoploss if not self.edge else self.edge.get_stoploss(pair) diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index c9bdf4c65..f02b1b002 100644 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -181,6 +181,7 @@ class Backtesting: self.fee = max(fee for fee in fees if fee is not None) logger.info(f"Using fee {self.fee:.4%} - worst case fee from exchange (lowest tier).") self.precision_mode = self.exchange.precisionMode + self.precision_mode_price = self.exchange.precision_mode_price if self.config.get("freqai_backtest_live_models", False): from freqtrade.freqai.utils import get_timerange_backtest_live_models @@ -785,7 +786,7 @@ class Backtesting: ) if rate is not None and rate != close_rate: close_rate = price_to_precision( - rate, trade.price_precision, self.precision_mode + rate, trade.price_precision, self.precision_mode_price ) # We can't place orders lower than current low. # freqtrade does not support this in live, and the order would fill immediately @@ -929,7 +930,9 @@ class Backtesting: # We can't place orders higher than current high (otherwise it'd be a stop limit entry) # which freqtrade does not support in live. if new_rate is not None and new_rate != propose_rate: - propose_rate = price_to_precision(new_rate, price_precision, self.precision_mode) + propose_rate = price_to_precision( + new_rate, price_precision, self.precision_mode_price + ) if direction == "short": propose_rate = max(propose_rate, row[LOW_IDX]) else: @@ -1109,6 +1112,7 @@ class Backtesting: amount_precision=precision_amount, price_precision=precision_price, precision_mode=self.precision_mode, + precision_mode_price=self.precision_mode_price, contract_size=contract_size, orders=[], )