Added more update_funding_fee tests, set exchange of default conf
This commit is contained in:
		| @@ -29,6 +29,7 @@ class Binance(Exchange): | |||||||
|         "l2_limit_range": [5, 10, 20, 50, 100, 500, 1000], |         "l2_limit_range": [5, 10, 20, 50, 100, 500, 1000], | ||||||
|     } |     } | ||||||
|     funding_fee_times: List[int] = [0, 8, 16]  # hours of the day |     funding_fee_times: List[int] = [0, 8, 16]  # hours of the day | ||||||
|  |     # but the schedule won't check within this timeframe | ||||||
|  |  | ||||||
|     _supported_trading_mode_collateral_pairs: List[Tuple[TradingMode, Collateral]] = [ |     _supported_trading_mode_collateral_pairs: List[Tuple[TradingMode, Collateral]] = [ | ||||||
|         # TradingMode.SPOT always supported and not required in this list |         # TradingMode.SPOT always supported and not required in this list | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| """ Bybit exchange subclass """ | """ Bybit exchange subclass """ | ||||||
| import logging | import logging | ||||||
| from typing import Dict, List | from typing import Dict, List, Tuple | ||||||
|  |  | ||||||
|  | from freqtrade.enums import Collateral, TradingMode | ||||||
| from freqtrade.exchange import Exchange | from freqtrade.exchange import Exchange | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -23,3 +24,9 @@ class Bybit(Exchange): | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     funding_fee_times: List[int] = [0, 8, 16]  # hours of the day |     funding_fee_times: List[int] = [0, 8, 16]  # hours of the day | ||||||
|  |  | ||||||
|  |     _supported_trading_mode_collateral_pairs: List[Tuple[TradingMode, Collateral]] = [ | ||||||
|  |         # TradingMode.SPOT always supported and not required in this list | ||||||
|  |         # (TradingMode.FUTURES, Collateral.CROSS),  # TODO-lev: Uncomment once supported | ||||||
|  |         # (TradingMode.FUTURES, Collateral.ISOLATED) # TODO-lev: Uncomment once supported | ||||||
|  |     ] | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ class Ftx(Exchange): | |||||||
|         "stoploss_on_exchange": True, |         "stoploss_on_exchange": True, | ||||||
|         "ohlcv_candle_limit": 1500, |         "ohlcv_candle_limit": 1500, | ||||||
|     } |     } | ||||||
|     funding_fee_times: List[int] = list(range(0, 23)) |     funding_fee_times: List[int] = list(range(0, 24)) | ||||||
|  |  | ||||||
|     _supported_trading_mode_collateral_pairs: List[Tuple[TradingMode, Collateral]] = [ |     _supported_trading_mode_collateral_pairs: List[Tuple[TradingMode, Collateral]] = [ | ||||||
|         # TradingMode.SPOT always supported and not required in this list |         # TradingMode.SPOT always supported and not required in this list | ||||||
|   | |||||||
| @@ -111,10 +111,15 @@ class FreqtradeBot(LoggingMixin): | |||||||
|             self.trading_mode = TradingMode.SPOT |             self.trading_mode = TradingMode.SPOT | ||||||
|  |  | ||||||
|         if self.trading_mode == TradingMode.FUTURES: |         if self.trading_mode == TradingMode.FUTURES: | ||||||
|             for time_slot in self.exchange.funding_fee_times: |  | ||||||
|                 schedule.every().day.at(str(time(time_slot))).do(self.update_funding_fees) |             def update(): | ||||||
|  |                 self.update_funding_fees() | ||||||
|                 self.wallets.update() |                 self.wallets.update() | ||||||
|  |  | ||||||
|  |             for time_slot in self.exchange.funding_fee_times: | ||||||
|  |                 t = str(time(time_slot)) | ||||||
|  |                 schedule.every().day.at(t).do(update) | ||||||
|  |  | ||||||
|     def notify_status(self, msg: str) -> None: |     def notify_status(self, msg: str) -> None: | ||||||
|         """ |         """ | ||||||
|         Public method for users of this class (worker, etc.) to send notifications |         Public method for users of this class (worker, etc.) to send notifications | ||||||
|   | |||||||
| @@ -6,10 +6,10 @@ import time | |||||||
| from copy import deepcopy | from copy import deepcopy | ||||||
| from math import isclose | from math import isclose | ||||||
| from unittest.mock import ANY, MagicMock, PropertyMock | from unittest.mock import ANY, MagicMock, PropertyMock | ||||||
| import schedule |  | ||||||
|  |  | ||||||
| import arrow | import arrow | ||||||
| import pytest | import pytest | ||||||
|  | import schedule | ||||||
|  |  | ||||||
| from freqtrade.constants import CANCEL_REASON, MATH_CLOSE_PREC, UNLIMITED_STAKE_AMOUNT | from freqtrade.constants import CANCEL_REASON, MATH_CLOSE_PREC, UNLIMITED_STAKE_AMOUNT | ||||||
| from freqtrade.enums import RPCMessageType, RunMode, SellType, State, TradingMode | from freqtrade.enums import RPCMessageType, RunMode, SellType, State, TradingMode | ||||||
| @@ -4281,40 +4281,29 @@ def test_get_valid_price(mocker, default_conf_usdt) -> None: | |||||||
|     assert valid_price_at_min_alwd < proposed_price |     assert valid_price_at_min_alwd < proposed_price | ||||||
|  |  | ||||||
|  |  | ||||||
| @pytest.mark.parametrize('exchange,trading_mode,calls', [ | @pytest.mark.parametrize('exchange,trading_mode,calls,t1,t2', [ | ||||||
|     ("ftx", TradingMode.SPOT, 0), |     ("ftx", TradingMode.SPOT, 0, "2021-09-01 00:00:00", "2021-09-01 08:00:00"), | ||||||
|     ("ftx", TradingMode.MARGIN, 0), |     ("ftx", TradingMode.MARGIN, 0, "2021-09-01 00:00:00", "2021-09-01 08:00:00"), | ||||||
|     ("binance", TradingMode.FUTURES, 2), |     ("binance", TradingMode.FUTURES, 1, "2021-09-01 00:00:01", "2021-09-01 08:00:00"), | ||||||
|     ("kraken", TradingMode.FUTURES, 3), |     ("kraken", TradingMode.FUTURES, 2, "2021-09-01 00:00:01", "2021-09-01 08:00:00"), | ||||||
|     ("ftx", TradingMode.FUTURES, 9), |     ("ftx", TradingMode.FUTURES, 8, "2021-09-01 00:00:01", "2021-09-01 08:00:00"), | ||||||
|  |     ("binance", TradingMode.FUTURES, 2, "2021-08-31 23:59:59", "2021-09-01 08:00:01"), | ||||||
|  |     ("kraken", TradingMode.FUTURES, 3, "2021-08-31 23:59:59", "2021-09-01 08:00:01"), | ||||||
|  |     ("ftx", TradingMode.FUTURES, 9, "2021-08-31 23:59:59", "2021-09-01 08:00:01"), | ||||||
| ]) | ]) | ||||||
| def test_update_funding_fees(mocker, default_conf, exchange, trading_mode, calls, time_machine): | def test_update_funding_fees(mocker, default_conf, exchange, trading_mode, calls, time_machine, | ||||||
|     time_machine.move_to("2021-09-01 00:00:00 +00:00") |                              t1, t2): | ||||||
|  |     time_machine.move_to(f"{t1} +00:00") | ||||||
|  |  | ||||||
|     patch_RPCManager(mocker) |     patch_RPCManager(mocker) | ||||||
|     patch_exchange(mocker, id=exchange) |     patch_exchange(mocker, id=exchange) | ||||||
|     mocker.patch('freqtrade.freqtradebot.FreqtradeBot.update_funding_fees', return_value=True) |     mocker.patch('freqtrade.freqtradebot.FreqtradeBot.update_funding_fees', return_value=True) | ||||||
|     default_conf['trading_mode'] = trading_mode |     default_conf['trading_mode'] = trading_mode | ||||||
|     default_conf['collateral'] = 'isolated' |     default_conf['collateral'] = 'isolated' | ||||||
|  |     default_conf['exchange']['name'] = exchange | ||||||
|     freqtrade = get_patched_freqtradebot(mocker, default_conf) |     freqtrade = get_patched_freqtradebot(mocker, default_conf) | ||||||
|  |  | ||||||
|     # trade = Trade( |     time_machine.move_to(f"{t2} +00:00") | ||||||
|     #     id=2, |  | ||||||
|     #     pair='ADA/USDT', |  | ||||||
|     #     stake_amount=60.0, |  | ||||||
|     #     open_rate=2.0, |  | ||||||
|     #     amount=30.0, |  | ||||||
|     #     is_open=True, |  | ||||||
|     #     open_date=arrow.utcnow().datetime, |  | ||||||
|     #     fee_open=fee.return_value, |  | ||||||
|     #     fee_close=fee.return_value, |  | ||||||
|     #     exchange='binance', |  | ||||||
|     #     is_short=False, |  | ||||||
|     #     leverage=3.0, |  | ||||||
|     #     trading_mode=trading_mode |  | ||||||
|     # ) |  | ||||||
|  |  | ||||||
|     time_machine.move_to("2021-09-01 08:00:00 +00:00") |  | ||||||
|     schedule.run_pending() |     schedule.run_pending() | ||||||
|  |  | ||||||
|     assert freqtrade.update_funding_fees.call_count == calls |     assert freqtrade.update_funding_fees.call_count == calls | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user