import pytest from freqtrade.exceptions import OperationalException from freqtrade.leverage import interest from freqtrade.util import FtPrecise ten_mins = FtPrecise(1 / 6) five_hours = FtPrecise(5.0) twentyfive_hours = FtPrecise(25.0) @pytest.mark.parametrize( "exchange,interest_rate,hours,expected", [ ("binance", 0.0005, ten_mins, 0.00125), ("binance", 0.00025, ten_mins, 0.000625), ("binance", 0.00025, five_hours, 0.003125), ("binance", 0.00025, twentyfive_hours, 0.015625), # Kraken ("kraken", 0.0005, ten_mins, 0.06), ("kraken", 0.00025, ten_mins, 0.03), ("kraken", 0.00025, five_hours, 0.045), ("kraken", 0.00025, twentyfive_hours, 0.12), ], ) def test_interest(exchange, interest_rate, hours, expected): borrowed = FtPrecise(60.0) assert ( pytest.approx( float( interest( exchange_name=exchange, borrowed=borrowed, rate=FtPrecise(interest_rate), hours=hours, ) ) ) == expected ) def test_interest_exception(): with pytest.raises(OperationalException, match=r"Leverage not available on .* with freqtrade"): interest( exchange_name="bitmex", borrowed=FtPrecise(60.0), rate=FtPrecise(0.0005), hours=ten_mins )