diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index 247323fef..1b4b3faf7 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -459,8 +459,9 @@ class FreqtradeBot(LoggingMixin): return else: logger.debug("Max adjustment entries is set to unlimited.") - current_rate = self.exchange.get_rate(trade.pair, refresh=True, side="buy") - current_rate_sell = self.exchange.get_rate(trade.pair, refresh=True, side="sell") + current_entry_rate = self.exchange.get_rate(trade.pair, refresh=True, side="buy") + current_exit_rate = self.exchange.get_rate(trade.pair, refresh=True, side="sell") + current_rate = current_entry_rate # backward compatibilty current_profit = trade.calc_profit_ratio(current_rate) min_stake_amount = self.exchange.get_min_pair_stake_amount(trade.pair, @@ -472,7 +473,8 @@ class FreqtradeBot(LoggingMixin): default_retval=None)( trade=trade, current_time=datetime.now(timezone.utc), current_rate=current_rate, current_profit=current_profit, min_stake=min_stake_amount, - max_stake=max_stake_amount, current_rate_sell=current_rate_sell) + max_stake=max_stake_amount, current_entry_rate=current_entry_rate, + current_exit_rate=current_exit_rate) if stake_amount is not None and stake_amount > 0.0: # We should increase our position @@ -480,7 +482,7 @@ class FreqtradeBot(LoggingMixin): if stake_amount is not None and stake_amount < 0.0: # We should decrease our position - amount = -stake_amount / current_rate_sell + amount = -stake_amount / current_exit_rate if trade.amount - amount < min_stake_amount: logger.info('Remaining amount would be too small') return diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 3e287cc5f..5c5bbfbe2 100644 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -383,14 +383,17 @@ class Backtesting: def _get_adjust_trade_entry_for_candle(self, trade: LocalTrade, row: Tuple ) -> LocalTrade: - current_rate = row[OPEN_IDX] + current_entry_rate = current_exit_rate = row[OPEN_IDX] + current_rate = current_entry_rate + current_profit = trade.calc_profit_ratio(current_rate) min_stake = self.exchange.get_min_pair_stake_amount(trade.pair, current_rate, -0.1) max_stake = self.wallets.get_available_stake_amount() stake_amount = strategy_safe_wrapper(self.strategy.adjust_trade_position, default_retval=None)( trade=trade, current_time=row[DATE_IDX].to_pydatetime(), current_rate=current_rate, - current_profit=current_profit, min_stake=min_stake, max_stake=max_stake) + current_profit=current_profit, min_stake=min_stake, max_stake=max_stake, + current_entry_rate=current_entry_rate, current_exit_rate=current_exit_rate) # Check if we should increase our position if stake_amount is not None and stake_amount > 0.0: diff --git a/tests/test_freqtradebot.py b/tests/test_freqtradebot.py index ea3236e2b..e4a6d2e47 100644 --- a/tests/test_freqtradebot.py +++ b/tests/test_freqtradebot.py @@ -1,6 +1,5 @@ # pragma pylint: disable=missing-docstring, C0103 # pragma pylint: disable=protected-access, too-many-lines, invalid-name, too-many-arguments - import logging import time from copy import deepcopy @@ -1049,6 +1048,7 @@ def test_handle_stoploss_on_exchange(mocker, default_conf_usdt, fee, caplog, trade.is_open = True trade.stoploss_last_update = arrow.utcnow().shift(hours=-1).datetime trade.stop_loss = 24 + trade.amount = limit_buy_order_usdt['amount'] freqtrade.config['trailing_stop'] = True stoploss = MagicMock(side_effect=InvalidOrderException())