diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 187a5f64e..0559ceceb 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -39,7 +39,7 @@ from freqtrade.exchange.common import ( calculate_backoff, ) from freqtrade.resolvers.exchange_resolver import ExchangeResolver -from freqtrade.util import dt_now, dt_ts +from freqtrade.util import dt_now, dt_ts, dt_utc from tests.conftest import ( EXMS, generate_test_data_raw, @@ -5398,28 +5398,35 @@ def test_get_max_leverage_from_margin(default_conf, mocker, pair, nominal_value, @pytest.mark.parametrize( "size,funding_rate,mark_price,funding_fee", [ - (10, 0.0001, 2.0, 0.002), - (10, 0.0002, 2.0, 0.004), - (10, 0.0002, 2.5, 0.005), + (10, 0.0001, 1.0, 0.002), + (10, 0.0002, 1.0, 0.004), + (10, 0.0002, 1.25, 0.005), (10, 0.0002, nan, 0.0), ], ) def test_calculate_funding_fees(default_conf, mocker, size, funding_rate, mark_price, funding_fee): exchange = get_patched_exchange(mocker, default_conf) - prior_date = timeframe_to_prev_date("1h", datetime.now(UTC) - timedelta(hours=1)) - trade_date = timeframe_to_prev_date("1h", datetime.now(UTC)) + # Include microseconds to ensure it's not problematic. + now_dt = dt_utc(2026, 4, 3, 12, 5, 0, 12345) + trade_date = timeframe_to_prev_date("1h", now_dt) + prior_date = timeframe_to_prev_date("1h", trade_date - timedelta(hours=1)) + prior2_date = timeframe_to_prev_date("1h", now_dt - timedelta(hours=2)) funding_rates = DataFrame( [ - {"date": prior_date, "open": funding_rate}, # Line not used. + {"date": prior2_date, "open": funding_rate}, # Line not used. + {"date": prior_date, "open": funding_rate}, {"date": trade_date, "open": funding_rate}, ] ) mark_rates = DataFrame( [ + {"date": prior2_date, "open": mark_price}, {"date": prior_date, "open": mark_price}, {"date": trade_date, "open": mark_price}, ] ) + funding_rates["date"] = funding_rates["date"].dt.as_unit("ms") + mark_rates["date"] = mark_rates["date"].dt.as_unit("ms") df = exchange.combine_funding_and_mark(funding_rates, mark_rates) assert ( @@ -5427,8 +5434,8 @@ def test_calculate_funding_fees(default_conf, mocker, size, funding_rate, mark_p df, amount=size, is_short=True, - open_date=trade_date, - close_date=trade_date, + open_date=now_dt - timedelta(hours=1, minutes=30), + close_date=now_dt, ) == funding_fee )