diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index e96a9e324..4c11937b2 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1562,13 +1562,22 @@ class Exchange: is_short: bool ) -> Tuple[float, float]: """ + Gets the rate of interest for borrowed currency when margin trading :param pair: base/quote currency pair :param maker_or_taker: "maker" if limit order, "taker" if market order :param is_short: True if requesting base interest, False if requesting quote interest :return: (open_interest, rollover_interest) """ - # TODO-lev: implement - return (0.0005, 0.0005) + try: + # TODO-lev: implement, currently there is no ccxt method for this + return (0.0005, 0.0005) + except ccxt.DDoSProtection as e: + raise DDosProtection(e) from e + except (ccxt.NetworkError, ccxt.ExchangeError) as e: + raise TemporaryError( + f'Could not set leverage due to {e.__class__.__name__}. Message: {e}') from e + except ccxt.BaseError as e: + raise OperationalException(e) from e @retrier def fill_leverage_brackets(self): diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index bcb27c8ed..f7c0b0f38 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -3031,6 +3031,30 @@ def test_get_interest_rate( pair, maker_or_taker, is_short) == (borrow_rate, interest_rate) +@pytest.mark.parametrize("exchange_name", [("binance"), ("ftx"), ("kraken")]) +@pytest.mark.parametrize("maker_or_taker", [("maker"), ("taker")]) +@pytest.mark.parametrize("is_short", [(True), (False)]) +def test_get_interest_rate_exceptions(mocker, default_conf, exchange_name, maker_or_taker, is_short): + + # api_mock = MagicMock() + # # TODO-lev: get_interest_rate currently not implemented on CCXT, so this may need to be renamed + # api_mock.get_interest_rate = MagicMock() + # type(api_mock).has = PropertyMock(return_value={'getInterestRate': True}) + + # ccxt_exceptionhandlers( + # mocker, + # default_conf, + # api_mock, + # exchange_name, + # "get_interest_rate", + # "get_interest_rate", + # pair="XRP/USDT", + # is_short=is_short, + # maker_or_taker="maker_or_taker" + # ) + return + + @pytest.mark.parametrize("collateral", [ (Collateral.CROSS), (Collateral.ISOLATED)