@@ -132,6 +132,7 @@ class Exchange:
132132 "stop_price_prop" : "stopLossPrice" , # Used for stoploss_on_exchange response parsing
133133 "stoploss_order_types" : {},
134134 "stoploss_blocks_assets" : True , # By default stoploss orders block assets
135+ "stoploss_query_requires_stop_flag" : False , # Require "stop": True" to fetch stop orders
135136 "order_time_in_force" : ["GTC" ],
136137 "ohlcv_params" : {},
137138 "ohlcv_has_history" : True , # Some exchanges (Kraken) don't provide history via ohlcv
@@ -1687,7 +1688,24 @@ def fetch_order(self, order_id: str, pair: str, params: dict | None = None) -> C
16871688 def fetch_stoploss_order (
16881689 self , order_id : str , pair : str , params : dict | None = None
16891690 ) -> CcxtOrder :
1690- return self .fetch_order (order_id , pair , params )
1691+ if self .get_option ("stoploss_query_requires_stop_flag" ):
1692+ params = params or {}
1693+ params ["stop" ] = True
1694+ order = self .fetch_order (order_id , pair , params )
1695+ val = self .get_option ("stoploss_algo_order_info_id" )
1696+ if val and order .get ("status" , "open" ) == "closed" :
1697+ if new_orderid := order .get ("info" , {}).get (val ):
1698+ # Fetch real order, which was placed by the algo order.
1699+ actual_order = self .fetch_order (order_id = new_orderid , pair = pair , params = None )
1700+ actual_order ["id_stop" ] = actual_order ["id" ]
1701+ actual_order ["id" ] = order_id
1702+ actual_order ["type" ] = "stoploss"
1703+ actual_order ["stopPrice" ] = order .get ("stopPrice" )
1704+ actual_order ["status_stop" ] = "triggered"
1705+
1706+ return actual_order
1707+
1708+ return order
16911709
16921710 def fetch_order_or_stoploss_order (
16931711 self , order_id : str , pair : str , stoploss_order : bool = False
@@ -1741,6 +1759,9 @@ def cancel_order(self, order_id: str, pair: str, params: dict | None = None) ->
17411759 raise OperationalException (e ) from e
17421760
17431761 def cancel_stoploss_order (self , order_id : str , pair : str , params : dict | None = None ) -> dict :
1762+ if self .get_option ("stoploss_query_requires_stop_flag" ):
1763+ params = params or {}
1764+ params ["stop" ] = True
17441765 return self .cancel_order (order_id , pair , params )
17451766
17461767 def is_cancel_order_result_suitable (self , corder ) -> TypeGuard [CcxtOrder ]:
0 commit comments