fix: extract triggerPrice from priceTriggerOptions for stoploss orders

CCXT's krakenfutures parse_order misses triggerPrice when the
/orders/status endpoint nests it inside priceTriggerOptions.
Override _order_contracts_to_amount to populate triggerPrice and
stopPrice from info.order.priceTriggerOptions.triggerPrice.
This commit is contained in:
matstedt
2026-02-17 20:33:27 +01:00
committed by Matthias
parent 3c4b07ce46
commit 0dfd7324bd
2 changed files with 88 additions and 0 deletions
+69
View File
@@ -55,6 +55,75 @@ def test_krakenfutures_ohlcv_candle_limit_funding_rate(mocker, default_conf):
assert ex.ohlcv_candle_limit("1h", candle_type=CandleType.FUNDING_RATE) == 700
# --- _order_contracts_to_amount trigger price fix tests ---
def test_krakenfutures_order_contracts_fixes_missing_trigger_price(mocker, default_conf):
"""Extract triggerPrice from info.order.priceTriggerOptions when CCXT misses it."""
ex = get_patched_exchange(mocker, default_conf, exchange="krakenfutures")
order = {
"id": "abc",
"symbol": "BTC/USD:USD",
"triggerPrice": None,
"stopPrice": None,
"info": {
"order": {
"type": "TRIGGER_ORDER",
"priceTriggerOptions": {
"triggerPrice": 71641,
"triggerSignal": "LAST_PRICE",
},
},
"status": "TRIGGER_PLACED",
},
}
result = ex._order_contracts_to_amount(order)
assert result["triggerPrice"] == 71641.0
assert result["stopPrice"] == 71641.0
def test_krakenfutures_order_contracts_preserves_existing_trigger_price(mocker, default_conf):
"""Don't overwrite triggerPrice when CCXT already parsed it correctly."""
ex = get_patched_exchange(mocker, default_conf, exchange="krakenfutures")
order = {
"id": "abc",
"symbol": "BTC/USD:USD",
"triggerPrice": 70000.0,
"stopPrice": 70000.0,
"info": {
"order": {
"priceTriggerOptions": {
"triggerPrice": 71641,
},
},
},
}
result = ex._order_contracts_to_amount(order)
assert result["triggerPrice"] == 70000.0
assert result["stopPrice"] == 70000.0
def test_krakenfutures_order_contracts_no_trigger_options(mocker, default_conf):
"""Regular (non-trigger) orders should pass through unchanged."""
ex = get_patched_exchange(mocker, default_conf, exchange="krakenfutures")
order = {
"id": "abc",
"symbol": "BTC/USD:USD",
"triggerPrice": None,
"stopPrice": None,
"info": {
"order": {
"type": "lmt",
"orderId": "abc",
},
"status": "placed",
},
}
result = ex._order_contracts_to_amount(order)
assert result["triggerPrice"] is None
assert result["stopPrice"] is None
# --- fetch_order fallback tests ---