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],
}
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]] = [
# TradingMode.SPOT always supported and not required in this list

View File

@ -1,7 +1,8 @@
""" Bybit exchange subclass """
import logging
from typing import Dict, List
from typing import Dict, List, Tuple
from freqtrade.enums import Collateral, TradingMode
from freqtrade.exchange import Exchange
@ -23,3 +24,9 @@ class Bybit(Exchange):
}
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,
"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]] = [
# TradingMode.SPOT always supported and not required in this list

View File

@ -111,10 +111,15 @@ class FreqtradeBot(LoggingMixin):
self.trading_mode = TradingMode.SPOT
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()
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:
"""
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 math import isclose
from unittest.mock import ANY, MagicMock, PropertyMock
import schedule
import arrow
import pytest
import schedule
from freqtrade.constants import CANCEL_REASON, MATH_CLOSE_PREC, UNLIMITED_STAKE_AMOUNT
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
@pytest.mark.parametrize('exchange,trading_mode,calls', [
("ftx", TradingMode.SPOT, 0),
("ftx", TradingMode.MARGIN, 0),
("binance", TradingMode.FUTURES, 2),
("kraken", TradingMode.FUTURES, 3),
("ftx", TradingMode.FUTURES, 9),
@pytest.mark.parametrize('exchange,trading_mode,calls,t1,t2', [
("ftx", TradingMode.SPOT, 0, "2021-09-01 00:00:00", "2021-09-01 08:00:00"),
("ftx", TradingMode.MARGIN, 0, "2021-09-01 00:00:00", "2021-09-01 08:00:00"),
("binance", TradingMode.FUTURES, 1, "2021-09-01 00:00:01", "2021-09-01 08:00:00"),
("kraken", TradingMode.FUTURES, 2, "2021-09-01 00:00:01", "2021-09-01 08:00:00"),
("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):
time_machine.move_to("2021-09-01 00:00:00 +00:00")
def test_update_funding_fees(mocker, default_conf, exchange, trading_mode, calls, time_machine,
t1, t2):
time_machine.move_to(f"{t1} +00:00")
patch_RPCManager(mocker)
patch_exchange(mocker, id=exchange)
mocker.patch('freqtrade.freqtradebot.FreqtradeBot.update_funding_fees', return_value=True)
default_conf['trading_mode'] = trading_mode
default_conf['collateral'] = 'isolated'
default_conf['exchange']['name'] = exchange
freqtrade = get_patched_freqtradebot(mocker, default_conf)
# trade = Trade(
# 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")
time_machine.move_to(f"{t2} +00:00")
schedule.run_pending()
assert freqtrade.update_funding_fees.call_count == calls