@@ -38,6 +38,8 @@ class Bitget(Exchange):
3838 _ft_has_futures : FtHas = {
3939 "funding_fee_candle_limit" : 100 ,
4040 "has_delisting" : True ,
41+ "stop_price_param" : "stopLossPrice" ,
42+ "stop_price_prop" : "stopLossPrice" ,
4143 "stop_price_type_field" : "triggerType" ,
4244 "stop_price_type_value_mapping" : {
4345 PriceType .LAST : "fill_price" ,
@@ -99,30 +101,36 @@ def _convert_stop_order(self, pair: str, order_id: str, order: CcxtOrder) -> Ccx
99101 return order
100102
101103 def _fetch_stop_order_fallback (self , order_id : str , pair : str ) -> CcxtOrder :
102- params2 = {
103- "stop" : True ,
104- }
105- for method in (
106- self ._api .fetch_open_orders ,
107- self ._api .fetch_canceled_and_closed_orders ,
108- ):
109- try :
110- orders = method (pair , params = params2 )
111- orders_f = [order for order in orders if order ["id" ] == order_id ]
112- if orders_f :
113- order = orders_f [0 ]
114- self ._log_exchange_response ("get_stop_order_fallback" , order )
115- return self ._convert_stop_order (pair , order_id , order )
116- except (ccxt .OrderNotFound , ccxt .InvalidOrder ):
117- pass
118- except ccxt .DDoSProtection as e :
119- raise DDosProtection (e ) from e
120- except (ccxt .OperationFailed , ccxt .ExchangeError ) as e :
121- raise TemporaryError (
122- f"Could not get order due to { e .__class__ .__name__ } . Message: { e } "
123- ) from e
124- except ccxt .BaseError as e :
125- raise OperationalException (e ) from e
104+ # old stoploss orders
105+ paramsold = {"stop" : True }
106+ # new stoploss orders with stopLossPrice (used in futures starting 2026.4)
107+ paramsnew = {"planType" : "profit_loss" }
108+ params_to_try = (
109+ (paramsnew , paramsold ) if self .trading_mode == TradingMode .FUTURES else (paramsold ,)
110+ )
111+
112+ for params2 in params_to_try :
113+ for method in (
114+ self ._api .fetch_open_orders ,
115+ self ._api .fetch_canceled_and_closed_orders ,
116+ ):
117+ try :
118+ orders = method (pair , params = params2 )
119+ orders_f = [order for order in orders if order ["id" ] == order_id ]
120+ if orders_f :
121+ order = orders_f [0 ]
122+ self ._log_exchange_response ("get_stop_order_fallback" , order )
123+ return self ._convert_stop_order (pair , order_id , order )
124+ except (ccxt .OrderNotFound , ccxt .InvalidOrder ):
125+ pass
126+ except ccxt .DDoSProtection as e :
127+ raise DDosProtection (e ) from e
128+ except (ccxt .OperationFailed , ccxt .ExchangeError ) as e :
129+ raise TemporaryError (
130+ f"Could not get order due to { e .__class__ .__name__ } . Message: { e } "
131+ ) from e
132+ except ccxt .BaseError as e :
133+ raise OperationalException (e ) from e
126134 raise RetryableOrderError (f"StoplossOrder not found (pair: { pair } id: { order_id } )." )
127135
128136 @retrier (retries = API_RETRY_COUNT )
0 commit comments