Merge pull request #13053 from ABSllk/fix-bitget-stoploss

bitget - update  stopLossPrice mapping for futures
This commit is contained in:
Matthias
2026-04-14 21:15:05 +02:00
committed by GitHub
+32 -24
View File
@@ -38,6 +38,8 @@ class Bitget(Exchange):
_ft_has_futures: FtHas = { _ft_has_futures: FtHas = {
"funding_fee_candle_limit": 100, "funding_fee_candle_limit": 100,
"has_delisting": True, "has_delisting": True,
"stop_price_param": "stopLossPrice",
"stop_price_prop": "stopLossPrice",
"stop_price_type_field": "triggerType", "stop_price_type_field": "triggerType",
"stop_price_type_value_mapping": { "stop_price_type_value_mapping": {
PriceType.LAST: "fill_price", PriceType.LAST: "fill_price",
@@ -99,30 +101,36 @@ class Bitget(Exchange):
return order return order
def _fetch_stop_order_fallback(self, order_id: str, pair: str) -> CcxtOrder: def _fetch_stop_order_fallback(self, order_id: str, pair: str) -> CcxtOrder:
params2 = { # old stoploss orders
"stop": True, paramsold = {"stop": True}
} # new stoploss orders with stopLossPrice (used in futures starting 2026.4)
for method in ( paramsnew = {"planType": "profit_loss"}
self._api.fetch_open_orders, params_to_try = (
self._api.fetch_canceled_and_closed_orders, (paramsnew, paramsold) if self.trading_mode == TradingMode.FUTURES else (paramsold,)
): )
try:
orders = method(pair, params=params2) for params2 in params_to_try:
orders_f = [order for order in orders if order["id"] == order_id] for method in (
if orders_f: self._api.fetch_open_orders,
order = orders_f[0] self._api.fetch_canceled_and_closed_orders,
self._log_exchange_response("get_stop_order_fallback", order) ):
return self._convert_stop_order(pair, order_id, order) try:
except (ccxt.OrderNotFound, ccxt.InvalidOrder): orders = method(pair, params=params2)
pass orders_f = [order for order in orders if order["id"] == order_id]
except ccxt.DDoSProtection as e: if orders_f:
raise DDosProtection(e) from e order = orders_f[0]
except (ccxt.OperationFailed, ccxt.ExchangeError) as e: self._log_exchange_response("get_stop_order_fallback", order)
raise TemporaryError( return self._convert_stop_order(pair, order_id, order)
f"Could not get order due to {e.__class__.__name__}. Message: {e}" except (ccxt.OrderNotFound, ccxt.InvalidOrder):
) from e pass
except ccxt.BaseError as e: except ccxt.DDoSProtection as e:
raise OperationalException(e) from e raise DDosProtection(e) from e
except (ccxt.OperationFailed, ccxt.ExchangeError) as e:
raise TemporaryError(
f"Could not get order due to {e.__class__.__name__}. Message: {e}"
) from e
except ccxt.BaseError as e:
raise OperationalException(e) from e
raise RetryableOrderError(f"StoplossOrder not found (pair: {pair} id: {order_id}).") raise RetryableOrderError(f"StoplossOrder not found (pair: {pair} id: {order_id}).")
@retrier(retries=API_RETRY_COUNT) @retrier(retries=API_RETRY_COUNT)