Added more update_funding_fee tests, set exchange of default conf

This commit is contained in:
Sam Germain 2021-10-06 01:39:02 -06:00
parent a4a5c1aad0
commit e367f84b06
5 changed files with 32 additions and 30 deletions

View File

@ -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

View File

@ -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
]

View File

@ -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

View File

@ -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

View File

@ -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