From 3de42da29a52f618730218bda1cb7159410bef54 Mon Sep 17 00:00:00 2001 From: Sam Germain Date: Mon, 1 Nov 2021 07:52:40 -0600 Subject: [PATCH] All funding fee test_exchange tests pass --- freqtrade/exchange/exchange.py | 4 +++- tests/exchange/test_exchange.py | 31 ++++++++++++++++++++++++------- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index c046a83d8..7eda75450 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1743,6 +1743,7 @@ class Exchange: except ccxt.BaseError as e: raise OperationalException(e) from e + @retrier def _get_mark_price_history( self, pair: str, @@ -1784,7 +1785,7 @@ class Exchange: pair: str, amount: float, open_date: datetime, - close_date: Optional[datetime] + close_date: Optional[datetime] = None ) -> float: """ calculates the sum of all funding fees that occurred for a pair during a futures trade @@ -1816,6 +1817,7 @@ class Exchange: return fees + @retrier def get_funding_rate_history( self, pair: str, diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 8352ed173..4fa429839 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -3583,21 +3583,38 @@ def test_calculate_funding_fees( assert funding_fees == expected_fees +@pytest.mark.parametrize('name,expected_fees_8,expected_fees_10,expected_fees_12', [ + ('binance', -0.0009140999999999999, -0.0009140999999999999, -0.0009140999999999999), + ('kraken', -0.0014937, -0.0014937, 0.0045759), + ('ftx', 0.0010008000000000003, 0.0021084, 0.0146691), + ('gateio', -0.0009140999999999999, -0.0009140999999999999, -0.0009140999999999999), +]) def test_calculate_funding_fees_datetime_called( mocker, default_conf, funding_rate_history, - mark_ohlcv + mark_ohlcv, + name, + time_machine, + expected_fees_8, + expected_fees_10, + expected_fees_12 ): api_mock = MagicMock() api_mock.fetch_ohlcv = MagicMock(return_value=mark_ohlcv) api_mock.fetch_funding_rate_history = MagicMock(return_value=funding_rate_history) - datetime = MagicMock() - datetime.now = MagicMock() type(api_mock).has = PropertyMock(return_value={'fetchOHLCV': True}) type(api_mock).has = PropertyMock(return_value={'fetchFundingRateHistory': True}) - # TODO-lev: Add datetime MagicMock - exchange = get_patched_exchange(mocker, default_conf, api_mock) - exchange.calculate_funding_fees('ADA/USDT', 30.0, datetime("2021-09-01 00:00:00")) - assert datetime.now.call_count == 1 + exchange = get_patched_exchange(mocker, default_conf, api_mock, id=name) + d1 = datetime.strptime("2021-09-01 00:00:00 +0000", '%Y-%m-%d %H:%M:%S %z') + + time_machine.move_to("2021-09-01 08:00:00 +00:00") + funding_fees = exchange.calculate_funding_fees('ADA/USDT', 30.0, d1) + assert funding_fees == expected_fees_8 + time_machine.move_to("2021-09-01 10:00:00 +00:00") + funding_fees = exchange.calculate_funding_fees('ADA/USDT', 30.0, d1) + assert funding_fees == expected_fees_10 + time_machine.move_to("2021-09-01 12:00:00 +00:00") + funding_fees = exchange.calculate_funding_fees('ADA/USDT', 30.0, d1) + assert funding_fees == expected_fees_12