Add test for "combine_funding_and_mark", fix bug
This commit is contained in:
parent
2df42a3035
commit
0d388b561b
@ -2437,9 +2437,11 @@ class Exchange:
|
||||
|
||||
else:
|
||||
# Fill up missing funding_rate candles with fallback value
|
||||
return mark_rates.merge(
|
||||
combined = mark_rates.merge(
|
||||
funding_rates, on='date', how="outer", suffixes=["_mark", "_fund"]
|
||||
)['open_fund'].fillna(futures_funding_rate)
|
||||
)
|
||||
combined['open_fund'] = combined['open_fund'].fillna(futures_funding_rate)
|
||||
return combined
|
||||
|
||||
def calculate_funding_fees(
|
||||
self,
|
||||
|
@ -3912,6 +3912,70 @@ def test_calculate_funding_fees(
|
||||
) == kraken_fee
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
'mark_price,funding_rate,futures_funding_rate', [
|
||||
(1000, 0.001, None),
|
||||
(1000, 0.001, 0.01),
|
||||
(1000, 0.001, 0.0),
|
||||
(1000, 0.001, -0.01),
|
||||
])
|
||||
def test_combine_funding_and_mark(
|
||||
default_conf,
|
||||
mocker,
|
||||
funding_rate,
|
||||
mark_price,
|
||||
futures_funding_rate,
|
||||
):
|
||||
exchange = get_patched_exchange(mocker, default_conf)
|
||||
prior2_date = timeframe_to_prev_date('1h', datetime.now(timezone.utc) - timedelta(hours=2))
|
||||
prior_date = timeframe_to_prev_date('1h', datetime.now(timezone.utc) - timedelta(hours=1))
|
||||
trade_date = timeframe_to_prev_date('1h', datetime.now(timezone.utc))
|
||||
funding_rates = DataFrame([
|
||||
{'date': prior2_date, 'open': funding_rate},
|
||||
{'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},
|
||||
])
|
||||
|
||||
df = exchange.combine_funding_and_mark(funding_rates, mark_rates, futures_funding_rate)
|
||||
assert 'open_mark' in df.columns
|
||||
assert 'open_fund' in df.columns
|
||||
assert len(df) == 3
|
||||
|
||||
funding_rates = DataFrame([
|
||||
{'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},
|
||||
])
|
||||
df = exchange.combine_funding_and_mark(funding_rates, mark_rates, futures_funding_rate)
|
||||
|
||||
if futures_funding_rate is not None:
|
||||
assert len(df) == 3
|
||||
assert df.iloc[0]['open_fund'] == futures_funding_rate
|
||||
assert df.iloc[1]['open_fund'] == futures_funding_rate
|
||||
assert df.iloc[2]['open_fund'] == funding_rate
|
||||
else:
|
||||
assert len(df) == 1
|
||||
|
||||
# Empty funding rates
|
||||
funding_rates = DataFrame([], columns=['date', 'open'])
|
||||
df = exchange.combine_funding_and_mark(funding_rates, mark_rates, futures_funding_rate)
|
||||
if futures_funding_rate is not None:
|
||||
assert len(df) == 3
|
||||
assert df.iloc[0]['open_fund'] == futures_funding_rate
|
||||
assert df.iloc[1]['open_fund'] == futures_funding_rate
|
||||
assert df.iloc[2]['open_fund'] == futures_funding_rate
|
||||
else:
|
||||
assert len(df) == 0
|
||||
|
||||
|
||||
def test_get_or_calculate_liquidation_price(mocker, default_conf):
|
||||
|
||||
api_mock = MagicMock()
|
||||
|
Loading…
Reference in New Issue
Block a user