From 28d8cd5d4c2a51ade919431a7720e67f04e8afc8 Mon Sep 17 00:00:00 2001 From: adriance Date: Sat, 19 Mar 2022 11:34:30 +0800 Subject: [PATCH] add proposed leverage --- freqtrade/freqtradebot.py | 17 ++++++++++------- freqtrade/strategy/interface.py | 2 +- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index c0af6e0e7..8a2686fc2 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -600,8 +600,9 @@ class FreqtradeBot(LoggingMixin): trade_side = 'short' if is_short else 'long' pos_adjust = trade is not None + proposed_leverage = self.config.get('leverage', 1.0) enter_limit_requested, stake_amount = self.get_valid_enter_price_and_stake( - pair, price, stake_amount, side, trade_side, enter_tag, trade) + pair, price, stake_amount, side, trade_side, enter_tag, trade, proposed_leverage) if not stake_amount: return False @@ -611,12 +612,12 @@ class FreqtradeBot(LoggingMixin): pair=pair, current_time=datetime.now(timezone.utc), current_rate=enter_limit_requested, - proposed_leverage=1.0, + proposed_leverage=proposed_leverage, max_leverage=max_leverage, side=trade_side, - ) if self.trading_mode != TradingMode.SPOT else 1.0 + ) # Cap leverage between 1.0 and max_leverage. - leverage = min(max(leverage, 1.0), max_leverage) + leverage = min(max(leverage, proposed_leverage), max_leverage) else: # Changing leverage currently not possible leverage = trade.leverage if trade else 1.0 @@ -774,7 +775,8 @@ class FreqtradeBot(LoggingMixin): self, pair: str, price: Optional[float], stake_amount: float, side: str, trade_side: str, entry_tag: Optional[str], - trade: Optional[Trade] + trade: Optional[Trade], + leverage: Optional[float] = 1.0 ) -> Tuple[float, float]: if price: @@ -797,8 +799,9 @@ class FreqtradeBot(LoggingMixin): # We do however also need min-stake to determine leverage, therefore this is ignored as # edge-case for now. min_stake_amount = self.exchange.get_min_pair_stake_amount( - pair, enter_limit_requested, self.strategy.stoploss) - max_stake_amount = self.exchange.get_max_pair_stake_amount(pair, enter_limit_requested) + pair, enter_limit_requested, self.strategy.stoploss, leverage) + max_stake_amount = self.exchange.get_max_pair_stake_amount( + pair, enter_limit_requested, leverage) if not self.edge and trade is None: stake_available = self.wallets.get_available_stake_amount() diff --git a/freqtrade/strategy/interface.py b/freqtrade/strategy/interface.py index 975e9d41f..485cf62b7 100644 --- a/freqtrade/strategy/interface.py +++ b/freqtrade/strategy/interface.py @@ -481,7 +481,7 @@ class IStrategy(ABC, HyperStrategyMixin): :param side: 'long' or 'short' - indicating the direction of the proposed trade :return: A leverage amount, which is between 1.0 and max_leverage. """ - return 1.0 + return proposed_leverage def informative_pairs(self) -> ListPairsWithTimeframes: """