2021-08-09 09:35:27 +00:00
|
|
|
import pytest
|
2021-08-06 07:15:18 +00:00
|
|
|
|
2022-12-28 16:42:35 +00:00
|
|
|
from freqtrade.exceptions import OperationalException
|
2021-08-09 09:35:27 +00:00
|
|
|
from freqtrade.leverage import interest
|
2022-08-10 18:56:04 +00:00
|
|
|
from freqtrade.util import FtPrecise
|
2021-08-09 06:00:50 +00:00
|
|
|
|
|
|
|
|
2022-08-10 18:56:04 +00:00
|
|
|
ten_mins = FtPrecise(1 / 6)
|
|
|
|
five_hours = FtPrecise(5.0)
|
|
|
|
twentyfive_hours = FtPrecise(25.0)
|
2021-08-09 06:00:50 +00:00
|
|
|
|
|
|
|
|
2021-08-09 09:35:27 +00:00
|
|
|
@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),
|
2021-08-09 06:00:50 +00:00
|
|
|
# Kraken
|
2021-08-09 09:35:27 +00:00
|
|
|
('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):
|
2022-08-10 18:56:04 +00:00
|
|
|
borrowed = FtPrecise(60.0)
|
2021-08-09 06:00:50 +00:00
|
|
|
|
2022-08-31 08:18:28 +00:00
|
|
|
assert pytest.approx(float(interest(
|
2021-08-09 09:35:27 +00:00
|
|
|
exchange_name=exchange,
|
|
|
|
borrowed=borrowed,
|
2022-08-10 18:56:04 +00:00
|
|
|
rate=FtPrecise(interest_rate),
|
2021-08-09 09:35:27 +00:00
|
|
|
hours=hours
|
2022-08-31 08:18:28 +00:00
|
|
|
))) == expected
|
2022-12-28 16:42:35 +00:00
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
)
|