test: improve liquidation-calculation test

Move maintenance margin to parameter, add tests from bybit page
This commit is contained in:
Matthias
2025-03-08 17:27:25 +01:00
parent 538139ef31
commit cd971cff4f

View File

@@ -6077,44 +6077,47 @@ def test_get_liquidation_price1(mocker, default_conf):
@pytest.mark.parametrize("liquidation_buffer", [0.0])
@pytest.mark.parametrize(
"is_short,trading_mode,exchange_name,margin_mode,leverage,open_rate,amount,expected_liq",
"is_short,trading_mode,exchange_name,margin_mode,leverage,open_rate,amount,mramt,expected_liq",
[
(False, "spot", "binance", "", 5.0, 10.0, 1.0, None),
(True, "spot", "binance", "", 5.0, 10.0, 1.0, None),
(False, "spot", "gate", "", 5.0, 10.0, 1.0, None),
(True, "spot", "gate", "", 5.0, 10.0, 1.0, None),
(False, "spot", "okx", "", 5.0, 10.0, 1.0, None),
(True, "spot", "okx", "", 5.0, 10.0, 1.0, None),
(False, "spot", "binance", "", 5.0, 10.0, 1.0, (0.01, 0.01), None),
(True, "spot", "binance", "", 5.0, 10.0, 1.0, (0.01, 0.01), None),
(False, "spot", "gate", "", 5.0, 10.0, 1.0, (0.01, 0.01), None),
(True, "spot", "gate", "", 5.0, 10.0, 1.0, (0.01, 0.01), None),
(False, "spot", "okx", "", 5.0, 10.0, 1.0, (0.01, 0.01), None),
(True, "spot", "okx", "", 5.0, 10.0, 1.0, (0.01, 0.01), None),
# Binance, short
(True, "futures", "binance", "isolated", 5.0, 10.0, 1.0, 11.89108910891089),
(True, "futures", "binance", "isolated", 3.0, 10.0, 1.0, 13.211221122079207),
(True, "futures", "binance", "isolated", 5.0, 8.0, 1.0, 9.514851485148514),
(True, "futures", "binance", "isolated", 5.0, 10.0, 0.6, 11.897689768976898),
(True, "futures", "binance", "isolated", 5.0, 10.0, 1.0, (0.01, 0.01), 11.89108910891089),
(True, "futures", "binance", "isolated", 3.0, 10.0, 1.0, (0.01, 0.01), 13.211221122079207),
(True, "futures", "binance", "isolated", 5.0, 8.0, 1.0, (0.01, 0.01), 9.514851485148514),
(True, "futures", "binance", "isolated", 5.0, 10.0, 0.6, (0.01, 0.01), 11.897689768976898),
# Binance, long
(False, "futures", "binance", "isolated", 5, 10, 1.0, 8.070707070707071),
(False, "futures", "binance", "isolated", 5, 8, 1.0, 6.454545454545454),
(False, "futures", "binance", "isolated", 3, 10, 1.0, 6.723905723905723),
(False, "futures", "binance", "isolated", 5, 10, 0.6, 8.063973063973064),
(False, "futures", "binance", "isolated", 5, 10, 1.0, (0.01, 0.01), 8.070707070707071),
(False, "futures", "binance", "isolated", 5, 8, 1.0, (0.01, 0.01), 6.454545454545454),
(False, "futures", "binance", "isolated", 3, 10, 1.0, (0.01, 0.01), 6.723905723905723),
(False, "futures", "binance", "isolated", 5, 10, 0.6, (0.01, 0.01), 8.063973063973064),
# Gate/okx, short
(True, "futures", "gate", "isolated", 5, 10, 1.0, 11.87413417771621),
(True, "futures", "gate", "isolated", 5, 10, 2.0, 11.87413417771621),
(True, "futures", "gate", "isolated", 3, 10, 1.0, 13.193482419684678),
(True, "futures", "gate", "isolated", 5, 8, 1.0, 9.499307342172967),
(True, "futures", "okx", "isolated", 3, 10, 1.0, 13.193482419684678),
(True, "futures", "gate", "isolated", 5, 10, 1.0, (0.01, 0.01), 11.87413417771621),
(True, "futures", "gate", "isolated", 5, 10, 2.0, (0.01, 0.01), 11.87413417771621),
(True, "futures", "gate", "isolated", 3, 10, 1.0, (0.01, 0.01), 13.193482419684678),
(True, "futures", "gate", "isolated", 5, 8, 1.0, (0.01, 0.01), 9.499307342172967),
(True, "futures", "okx", "isolated", 3, 10, 1.0, (0.01, 0.01), 13.193482419684678),
# Gate/okx, long
(False, "futures", "gate", "isolated", 5.0, 10.0, 1.0, 8.085708510208207),
(False, "futures", "gate", "isolated", 3.0, 10.0, 1.0, 6.738090425173506),
(False, "futures", "okx", "isolated", 3.0, 10.0, 1.0, 6.738090425173506),
(False, "futures", "gate", "isolated", 5.0, 10.0, 1.0, (0.01, 0.01), 8.085708510208207),
(False, "futures", "gate", "isolated", 3.0, 10.0, 1.0, (0.01, 0.01), 6.738090425173506),
(False, "futures", "okx", "isolated", 3.0, 10.0, 1.0, (0.01, 0.01), 6.738090425173506),
# bybit, long
(False, "futures", "bybit", "isolated", 1.0, 10.0, 1.0, 0.1),
(False, "futures", "bybit", "isolated", 3.0, 10.0, 1.0, 6.7666666),
(False, "futures", "bybit", "isolated", 5.0, 10.0, 1.0, 8.1),
(False, "futures", "bybit", "isolated", 10.0, 10.0, 1.0, 9.1),
(False, "futures", "bybit", "isolated", 1.0, 10.0, 1.0, (0.01, 0.01), 0.1),
(False, "futures", "bybit", "isolated", 3.0, 10.0, 1.0, (0.01, 0.01), 6.7666666),
(False, "futures", "bybit", "isolated", 5.0, 10.0, 1.0, (0.01, 0.01), 8.1),
(False, "futures", "bybit", "isolated", 10.0, 10.0, 1.0, (0.01, 0.01), 9.1),
# From the bybit example - without additional margin
(False, "futures", "bybit", "isolated", 50.0, 40000.0, 1.0, (0.005, None), 39400),
(False, "futures", "bybit", "isolated", 50.0, 20000.0, 1.0, (0.005, None), 19700),
# bybit, short
(True, "futures", "bybit", "isolated", 1.0, 10.0, 1.0, 19.9),
(True, "futures", "bybit", "isolated", 3.0, 10.0, 1.0, 13.233333),
(True, "futures", "bybit", "isolated", 5.0, 10.0, 1.0, 11.9),
(True, "futures", "bybit", "isolated", 10.0, 10.0, 1.0, 10.9),
(True, "futures", "bybit", "isolated", 1.0, 10.0, 1.0, (0.01, 0.01), 19.9),
(True, "futures", "bybit", "isolated", 3.0, 10.0, 1.0, (0.01, 0.01), 13.233333),
(True, "futures", "bybit", "isolated", 5.0, 10.0, 1.0, (0.01, 0.01), 11.9),
(True, "futures", "bybit", "isolated", 10.0, 10.0, 1.0, (0.01, 0.01), 10.9),
],
)
def test_get_liquidation_price(
@@ -6127,6 +6130,7 @@ def test_get_liquidation_price(
leverage,
open_rate,
amount,
mramt,
expected_liq,
liquidation_buffer,
):
@@ -6190,7 +6194,7 @@ def test_get_liquidation_price(
mocker.patch(f"{EXMS}.price_to_precision", lambda s, x, y, **kwargs: y)
exchange = get_patched_exchange(mocker, default_conf_usdt, exchange=exchange_name)
exchange.get_maintenance_ratio_and_amt = MagicMock(return_value=(0.01, 0.01))
exchange.get_maintenance_ratio_and_amt = MagicMock(return_value=mramt)
exchange.name = exchange_name
# default_conf_usdt.update({
# "dry_run": False,