Added more update_funding_fee tests, set exchange of default conf
This commit is contained in:
parent
a4a5c1aad0
commit
e367f84b06
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user