From 8cb114ffaf7b427c6c3693eb1607de0c371ed9fa Mon Sep 17 00:00:00 2001 From: mhdi-khosravi Date: Thu, 4 Apr 2024 13:34:49 +0330 Subject: [PATCH 1/2] Add clientOrderId and ClosePosition to trade_order --- bingX/perpetual/v2/trade.py | 263 +++++++++++++++++------------------- 1 file changed, 125 insertions(+), 138 deletions(-) diff --git a/bingX/perpetual/v2/trade.py b/bingX/perpetual/v2/trade.py index b5590e9..8496c61 100644 --- a/bingX/perpetual/v2/trade.py +++ b/bingX/perpetual/v2/trade.py @@ -5,74 +5,48 @@ from typing import List from bingX import ClientError + def trade_order(self, - symbol: str, - type: str, - side: str, - positionSide: str = None, - price: float = None, - quantity: float = None, - stopPrice: float = None, - recvWindow: int = None, - reduceOnly: bool = None, -) -> dict: + symbol: str, + type: str, + side: str, + positionSide: str = None, + price: float = None, + quantity: float = None, + stopPrice: float = None, + recvWindow: int = None, + reduceOnly: str = None, + clientOrderID: str = None, + closePosition: str = None, + ) -> dict: ''' Place a New Order POST /openApi/swap/v2/trade/order https://bingx-api.github.io/docs/swapV2/trade-api.html#_1-trade-order ''' res = self.post("/openApi/swap/v2/trade/order", params={ - "symbol": symbol, - "type": type, - "side": side, + "symbol": symbol, + "type": type, + "side": side, "positionSide": positionSide, - "price": price, - "quantity": quantity, - "stopPrice": stopPrice, - "recvWindow": recvWindow, - "reduceOnly": reduceOnly + "price": price, + "quantity": quantity, + "stopPrice": stopPrice, + "recvWindow": recvWindow, + "reduceOnly": reduceOnly, + "clientOrderID": clientOrderID, + "closePosition": closePosition, }) if 'code' in res and res['code']: raise ClientError(res['code'], res['msg']) return res['data'] -def trade_order_test(self, - symbol: str, - type: str, - side: str, - positionSide: str = None, - price: float = None, - quantity: float = None, - stopPrice: float = None, - recvWindow: int = None, - reduceOnly: bool = None, -) -> dict: - ''' Place a New Order - POST /openApi/swap/v2/trade/order/test - - https://bingx-api.github.io/docs/swapV2/trade-api.html#_1-trade-order - ''' - res = self.post("/openApi/swap/v2/trade/order/test", params={ - "symbol": symbol, - "type": type, - "side": side, - "positionSide": positionSide, - "price": price, - "quantity": quantity, - "stopPrice": stopPrice, - "recvWindow": recvWindow, - "reduceOnly": reduceOnly - }) - - if 'code' in res and res['code']: - raise ClientError(res['code'], res['msg']) - return res['data'] def bulk_order(self, - batchOrders: List, - recvWindow: int = None, -) -> dict: + batchOrders: List, + recvWindow: int = None, + ) -> dict: ''' Bulk order POST /openApi/swap/v2/trade/batchOrders @@ -80,16 +54,17 @@ def bulk_order(self, ''' res = self.post("/openApi/swap/v2/trade/batchOrders", params={ "batchOrders": batchOrders, - "recvWindow": recvWindow, + "recvWindow": recvWindow, }) if 'code' in res and res['code']: raise ClientError(res['code'], res['msg']) return res['data'] + def close_all_positions(self, - recvWindow: int = None, -) -> dict: + recvWindow: int = None, + ) -> dict: ''' One-Click Close All Positions POST /openApi/swap/v2/trade/closeAllPositions @@ -103,19 +78,20 @@ def close_all_positions(self, raise ClientError(res['code'], res['msg']) return res['data'] + def cancel_order(self, - orderId: int, - symbol: str, - recvWindow: int = None, -) -> dict: + orderId: int, + symbol: str, + recvWindow: int = None, + ) -> dict: ''' Cancel an Order DELETE /openApi/swap/v2/trade/order https://bingx-api.github.io/docs/swapV2/trade-api.html#_4-cancel-an-order ''' res = self.delete("/openApi/swap/v2/trade/order", params={ - "orderId": orderId, - "symbol": symbol, + "orderId": orderId, + "symbol": symbol, "recvWindow": recvWindow, }) @@ -123,37 +99,39 @@ def cancel_order(self, raise ClientError(res['code'], res['msg']) return res['data'] + def cancel_orders(self, - symbol: str, - orderIdList: List[int], - recvWindow: int = None, -) -> dict: + symbol: str, + orderIdList: List[int], + recvWindow: int = None, + ) -> dict: ''' Cancel a Batch of Orders DELETE /openApi/swap/v2/trade/batchOrders https://bingx-api.github.io/docs/swapV2/trade-api.html#_5-cancel-a-batch-of-orders ''' res = self.delete("/openApi/swap/v2/trade/batchOrders", params={ - "symbol": symbol, + "symbol": symbol, "orderIdList": orderIdList, - "recvWindow": recvWindow, + "recvWindow": recvWindow, }) if 'code' in res and res['code']: raise ClientError(res['code'], res['msg']) return res['data'] + def cancel_all_orders(self, - symbol: str, - recvWindow: int = None, -) -> dict: + symbol: str, + recvWindow: int = None, + ) -> dict: ''' Cancel All Orders DELETE /openApi/swap/v2/trade/allOpenOrders https://bingx-api.github.io/docs/swapV2/trade-api.html#_6-cancel-all-orders ''' res = self.post("/openApi/swap/v2/trade/allOpenOrders", params={ - "symbol": symbol, + "symbol": symbol, "recvWindow": recvWindow, }) @@ -161,17 +139,18 @@ def cancel_all_orders(self, raise ClientError(res['code'], res['msg']) return res['data'] + def current_orders(self, - symbol: str, - recvWindow: int = None, -) -> dict: + symbol: str, + recvWindow: int = None, + ) -> dict: ''' Query all current pending orders GET /openApi/swap/v2/trade/openOrders https://bingx-api.github.io/docs/swapV2/trade-api.html#_7-query-all-current-pending-orders ''' res = self.get("/openApi/swap/v2/trade/openOrders", params={ - "symbol": symbol, + "symbol": symbol, "recvWindow": recvWindow, }) @@ -179,37 +158,39 @@ def current_orders(self, raise ClientError(res['code'], res['msg']) return res['data'] + def order(self, - symbol: str, - orderId: int, - recvWindow: int = None, -) -> dict: + symbol: str, + orderId: int, + recvWindow: int = None, + ) -> dict: ''' Query Order GET /openApi/swap/v2/trade/order https://bingx-api.github.io/docs/swapV2/trade-api.html#_8-query-order ''' res = self.get("/openApi/swap/v2/trade/order", params={ - "symbol": symbol, - "orderId": orderId, + "symbol": symbol, + "orderId": orderId, "recvWindow": recvWindow, }) - + if 'code' in res and res['code']: raise ClientError(res['code'], res['msg']) return res['data'] + def margin_mode(self, - symbol: str, - recvWindow: int = None, -) -> dict: + symbol: str, + recvWindow: int = None, + ) -> dict: ''' Query Margin Mode GET /openApi/swap/v2/trade/marginType recvWindow ''' res = self.get("/openApi/swap/v2/trade/marginType", params={ - "symbol": symbol, + "symbol": symbol, "recvWindow": recvWindow, }) @@ -217,18 +198,19 @@ def margin_mode(self, raise ClientError(res['code'], res['msg']) return res['data'] + def switch_margin_mode(self, - symbol: str, - marginType: str, - recvWindow: int = None, -) -> dict: + symbol: str, + marginType: str, + recvWindow: int = None, + ) -> dict: ''' Switch Margin Mode POST /openApi/swap/v2/trade/marginType https://bingx-api.github.io/docs/swapV2/trade-api.html#_10-switch-margin-mode ''' res = self.post("/openApi/swap/v2/trade/marginType", params={ - "symbol": symbol, + "symbol": symbol, "marginType": marginType, "recvWindow": recvWindow, }) @@ -237,17 +219,18 @@ def switch_margin_mode(self, raise ClientError(res['code'], res['msg']) return res # No "data" return? + def leverage(self, - symbol: str, - recvWindow: int = None, -) -> dict: + symbol: str, + recvWindow: int = None, + ) -> dict: ''' Query Leverage GET /openApi/swap/v2/trade/leverage https://bingx-api.github.io/docs/swapV2/trade-api.html#_11-query-leverage ''' res = self.get("/openApi/swap/v2/trade/leverage", params={ - "symbol": symbol, + "symbol": symbol, "recvWindow": recvWindow, }) @@ -255,21 +238,22 @@ def leverage(self, raise ClientError(res['code'], res['msg']) return res['data'] + def switch_leverage(self, - symbol: str, - side: str, - leverage: int, - recvWindow: int = None, -) -> dict: + symbol: str, + side: str, + leverage: int, + recvWindow: int = None, + ) -> dict: ''' Switch Leverage POST /openApi/swap/v2/trade/leverage https://bingx-api.github.io/docs/swapV2/trade-api.html#_12-switch-leverage ''' res = self.post("/openApi/swap/v2/trade/leverage", params={ - "symbol": symbol, - "side": side, - "leverage": leverage, + "symbol": symbol, + "side": side, + "leverage": leverage, "recvWindow": recvWindow, }) @@ -277,51 +261,53 @@ def switch_leverage(self, raise ClientError(res['code'], res['msg']) return res['data'] + def force_orders(self, - symbol: str = None, - autoCloseType: str = None, - startTime: int = None, - endTime: int = None, - limit: int = None, - recvWindow: int = None, -) -> dict: + symbol: str = None, + autoCloseType: str = None, + startTime: int = None, + endTime: int = None, + limit: int = None, + recvWindow: int = None, + ) -> dict: ''' User Force Orders GET /openApi/swap/v2/trade/forceOrders https://bingx-api.github.io/docs/swap/trade-api.html#_13-user-s-force-orders ''' res = self.get("/openApi/swap/v2/trade/forceOrders", params={ - "symbol": symbol, + "symbol": symbol, "autoCloseType": autoCloseType, - "startTime": startTime, - "endTime": endTime, - "limit": limit, - "recvWindow": recvWindow, + "startTime": startTime, + "endTime": endTime, + "limit": limit, + "recvWindow": recvWindow, }) if 'code' in res and res['code']: raise ClientError(res['code'], res['msg']) return res['data'] + def orders_history(self, - symbol: str, - orderId: int = None, - startTime: int = None, - endTime: int = None, - limit: int = 500, - recvWindow: int = None, -) -> dict: + symbol: str, + orderId: int = None, + startTime: int = None, + endTime: int = None, + limit: int = 500, + recvWindow: int = None, + ) -> dict: ''' User History Orders GET /openApi/swap/v2/trade/allOrders https://bingx-api.github.io/docs/swapV2/trade-api.html#_14-user-s-history-orders ''' res = self.get("/openApi/swap/v2/trade/allOrders", params={ - "symbol": symbol, - "orderId": orderId, - "startTime": startTime, - "endTime": endTime, - "limit": limit, + "symbol": symbol, + "orderId": orderId, + "startTime": startTime, + "endTime": endTime, + "limit": limit, "recvWindow": recvWindow, }) @@ -329,26 +315,27 @@ def orders_history(self, raise ClientError(res['code'], res['msg']) return res['data'] + def adjust_isolated_margin(self, - symbol: str, - amount: float, - type: int, - positionSide: str = None, - recvWindow: int = None, -) -> dict: + symbol: str, + amount: float, + type: int, + positionSide: str = None, + recvWindow: int = None, + ) -> dict: ''' Adjust isolated margin POST /openApi/swap/v2/trade/positionMargin https://bingx-api.github.io/docs/swapV2/trade-api.html#_15-adjust-isolated-margin ''' res = self.get("/openApi/swap/v2/trade/allOrders", params={ - "symbol": symbol, - "amount": amount, - "type": type, + "symbol": symbol, + "amount": amount, + "type": type, "positionSide": positionSide, - "recvWindow": recvWindow, + "recvWindow": recvWindow, }) if 'code' in res and res['code']: raise ClientError(res['code'], res['msg']) - return res # no "data" return? \ No newline at end of file + return res # no "data" return? From 81d3a664547519d5a904518de0624dbf0d086aec Mon Sep 17 00:00:00 2001 From: mhdi-khosravi Date: Thu, 4 Apr 2024 13:39:38 +0330 Subject: [PATCH 2/2] Add clientOrderId and ClosePosition to trade_order --- bingX/perpetual/v2/trade.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/bingX/perpetual/v2/trade.py b/bingX/perpetual/v2/trade.py index 8496c61..ed4a47b 100644 --- a/bingX/perpetual/v2/trade.py +++ b/bingX/perpetual/v2/trade.py @@ -43,6 +43,43 @@ def trade_order(self, return res['data'] +def trade_order(self, + symbol: str, + type: str, + side: str, + positionSide: str = None, + price: float = None, + quantity: float = None, + stopPrice: float = None, + recvWindow: int = None, + reduceOnly: str = None, + clientOrderID: str = None, + closePosition: str = None, + ) -> dict: + ''' Place a New Order + POST /openApi/swap/v2/trade/order + + https://bingx-api.github.io/docs/swapV2/trade-api.html#_1-trade-order-test + ''' + res = self.post("/openApi/swap/v2/trade/order/test", params={ + "symbol": symbol, + "type": type, + "side": side, + "positionSide": positionSide, + "price": price, + "quantity": quantity, + "stopPrice": stopPrice, + "recvWindow": recvWindow, + "reduceOnly": reduceOnly, + "clientOrderID": clientOrderID, + "closePosition": closePosition, + }) + + if 'code' in res and res['code']: + raise ClientError(res['code'], res['msg']) + return res['data'] + + def bulk_order(self, batchOrders: List, recvWindow: int = None,