mirror of
https://github.com/freqtrade/freqtrade.git
synced 2025-12-15 20:31:43 +00:00
feat: set precision_mode_price when creating trade objects
This commit is contained in:
@@ -419,6 +419,11 @@ class Exchange:
|
|||||||
"""exchange ccxt precisionMode"""
|
"""exchange ccxt precisionMode"""
|
||||||
return self._api.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:
|
def additional_exchange_init(self) -> None:
|
||||||
"""
|
"""
|
||||||
Additional exchange initialization logic.
|
Additional exchange initialization logic.
|
||||||
|
|||||||
@@ -374,6 +374,7 @@ class FreqtradeBot(LoggingMixin):
|
|||||||
if trade.exchange != self.exchange.id:
|
if trade.exchange != self.exchange.id:
|
||||||
continue
|
continue
|
||||||
trade.precision_mode = self.exchange.precisionMode
|
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.amount_precision = self.exchange.get_precision_amount(trade.pair)
|
||||||
trade.price_precision = self.exchange.get_precision_price(trade.pair)
|
trade.price_precision = self.exchange.get_precision_price(trade.pair)
|
||||||
trade.contract_size = self.exchange.get_contract_size(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),
|
amount_precision=self.exchange.get_precision_amount(pair),
|
||||||
price_precision=self.exchange.get_precision_price(pair),
|
price_precision=self.exchange.get_precision_price(pair),
|
||||||
precision_mode=self.exchange.precisionMode,
|
precision_mode=self.exchange.precisionMode,
|
||||||
|
precision_mode_price=self.exchange.precision_mode_price,
|
||||||
contract_size=self.exchange.get_contract_size(pair),
|
contract_size=self.exchange.get_contract_size(pair),
|
||||||
)
|
)
|
||||||
stoploss = self.strategy.stoploss if not self.edge else self.edge.get_stoploss(pair)
|
stoploss = self.strategy.stoploss if not self.edge else self.edge.get_stoploss(pair)
|
||||||
|
|||||||
@@ -181,6 +181,7 @@ class Backtesting:
|
|||||||
self.fee = max(fee for fee in fees if fee is not None)
|
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).")
|
logger.info(f"Using fee {self.fee:.4%} - worst case fee from exchange (lowest tier).")
|
||||||
self.precision_mode = self.exchange.precisionMode
|
self.precision_mode = self.exchange.precisionMode
|
||||||
|
self.precision_mode_price = self.exchange.precision_mode_price
|
||||||
|
|
||||||
if self.config.get("freqai_backtest_live_models", False):
|
if self.config.get("freqai_backtest_live_models", False):
|
||||||
from freqtrade.freqai.utils import get_timerange_backtest_live_models
|
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:
|
if rate is not None and rate != close_rate:
|
||||||
close_rate = price_to_precision(
|
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.
|
# We can't place orders lower than current low.
|
||||||
# freqtrade does not support this in live, and the order would fill immediately
|
# 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)
|
# We can't place orders higher than current high (otherwise it'd be a stop limit entry)
|
||||||
# which freqtrade does not support in live.
|
# which freqtrade does not support in live.
|
||||||
if new_rate is not None and new_rate != propose_rate:
|
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":
|
if direction == "short":
|
||||||
propose_rate = max(propose_rate, row[LOW_IDX])
|
propose_rate = max(propose_rate, row[LOW_IDX])
|
||||||
else:
|
else:
|
||||||
@@ -1109,6 +1112,7 @@ class Backtesting:
|
|||||||
amount_precision=precision_amount,
|
amount_precision=precision_amount,
|
||||||
price_precision=precision_price,
|
price_precision=precision_price,
|
||||||
precision_mode=self.precision_mode,
|
precision_mode=self.precision_mode,
|
||||||
|
precision_mode_price=self.precision_mode_price,
|
||||||
contract_size=contract_size,
|
contract_size=contract_size,
|
||||||
orders=[],
|
orders=[],
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user