コード例 #1
0
    async def close_listen_key_isolated_margin(self, symbol: str,
                                               key: str) -> Dict[str, Any]:
        """
        Close a listen key for the ISOLATED MARGIN API.

        Close a ListenKey (USER_STREAM).
        `DELETE /sapi/v1/userDataStream`.

        Parameters
        ----------
        symbol : str
            The symbol for the listen key request.
        key : str
            The listen key for the request.

        Returns
        -------
        dict[str, Any]

        References
        ----------
        https://binance-docs.github.io/apidocs/spot/en/#listen-key-isolated-margin

        """
        return await self.client.send_request(
            http_method="DELETE",
            url_path=self.BASE_ENDPOINT_ISOLATED,
            payload={
                "listenKey": key,
                "symbol": format_symbol(symbol).upper()
            },
        )
コード例 #2
0
    async def depth(self,
                    symbol: str,
                    limit: Optional[int] = None) -> Dict[str, Any]:
        """
        Get orderbook.

        `GET /api/v3/depth`

        Parameters
        ----------
        symbol : str
            The trading pair.
        limit : int, optional, default 100
            The limit for the response. Default 100; max 5000.
            Valid limits:[5, 10, 20, 50, 100, 500, 1000, 5000].

        Returns
        -------
        dict[str, Any]

        References
        ----------
        https://binance-docs.github.io/apidocs/spot/en/#order-book

        """
        payload: Dict[str, str] = {"symbol": format_symbol(symbol).upper()}
        if limit is not None:
            payload["limit"] = str(limit)

        return await self.client.query(
            url_path=self.BASE_ENDPOINT + "depth",
            payload=payload,
        )
コード例 #3
0
    async def book_ticker(self, symbol: str = None) -> Dict[str, Any]:
        """
        Symbol Order Book Ticker.

        `GET /api/v3/ticker/bookTicker`

        Parameters
        ----------
        symbol : str, optional
            The trading pair.

        Returns
        -------
        dict[str, Any]

        References
        ----------
        https://binance-docs.github.io/apidocs/spot/en/#symbol-order-book-ticker

        """
        payload: Dict[str, str] = {}
        if symbol is not None:
            payload["symbol"] = format_symbol(symbol).upper()

        return await self.client.query(
            url_path=self.BASE_ENDPOINT + "ticker/bookTicker",
            payload=payload,
        )
コード例 #4
0
    async def trades(self,
                     symbol: str,
                     limit: Optional[int] = None) -> List[Dict[str, Any]]:
        """
        Get recent market trades.

        Recent Trades List.
        `GET /api/v3/trades`

        Parameters
        ----------
        symbol : str
            The trading pair.
        limit : int, optional
            The limit for the response. Default 500; max 1000.

        Returns
        -------
        list[dict[str, Any]]

        References
        ----------
        https://binance-docs.github.io/apidocs/spot/en/#recent-trades-list

        """
        payload: Dict[str, str] = {"symbol": format_symbol(symbol).upper()}
        if limit is not None:
            payload["limit"] = str(limit)

        return await self.client.query(
            url_path=self.BASE_ENDPOINT + "trades",
            payload=payload,
        )
コード例 #5
0
    async def create_listen_key_isolated_margin(self,
                                                symbol: str) -> Dict[str, Any]:
        """
        Create a new listen key for the ISOLATED MARGIN API.

        Start a new user data stream. The stream will close after 60 minutes
        unless a keepalive is sent. If the account has an active listenKey,
        that listenKey will be returned and its validity will be extended for 60
        minutes.

        Create a ListenKey (USER_STREAM).
        `POST /api/v3/userDataStream `.

        Parameters
        ----------
        symbol : str
            The symbol for the listen key request.

        Returns
        -------
        dict[str, Any]

        References
        ----------
        https://binance-docs.github.io/apidocs/spot/en/#listen-key-isolated-margin

        """
        return await self.client.send_request(
            http_method="POST",
            url_path=self.BASE_ENDPOINT_ISOLATED,
            payload={"symbol": format_symbol(symbol).upper()},
        )
コード例 #6
0
    async def ticker_24hr(self, symbol: str = None) -> Dict[str, Any]:
        """
        24hr Ticker Price Change Statistics.

        `GET /api/v3/ticker/24hr`

        Parameters
        ----------
        symbol : str, optional
            The trading pair.

        Returns
        -------
        dict[str, Any]

        References
        ----------
        https://binance-docs.github.io/apidocs/spot/en/#24hr-ticker-price-change-statistics

        """
        payload: Dict[str, str] = {}
        if symbol is not None:
            payload["symbol"] = format_symbol(symbol).upper()

        return await self.client.query(
            url_path=self.BASE_ENDPOINT + "ticker/24hr",
            payload=payload,
        )
コード例 #7
0
    async def avg_price(self, symbol: str) -> Dict[str, Any]:
        """
        Get the current average price for the given symbol.

        `GET /api/v3/avgPrice`

        Parameters
        ----------
        symbol : str
            The trading pair.

        Returns
        -------
        dict[str, Any]

        References
        ----------
        https://binance-docs.github.io/apidocs/spot/en/#current-average-price

        """
        payload: Dict[str, str] = {"symbol": format_symbol(symbol).upper()}

        return await self.client.query(
            url_path=self.BASE_ENDPOINT + "avgPrice",
            payload=payload,
        )
コード例 #8
0
    async def get_orders(
        self,
        symbol: str,
        order_id: Optional[str] = None,
        start_time: Optional[int] = None,
        end_time: Optional[int] = None,
        limit: Optional[int] = None,
        recv_window: Optional[int] = None,
    ) -> Dict[str, Any]:
        """
        Get all account orders; active, canceled, or filled.

        All Orders (USER_DATA).
        `GET /api/v3/allOrders`.

        Parameters
        ----------
        symbol : str
            The symbol for the request.
        order_id : str, optional
            The order ID for the request.
        start_time : int, optional
            The start time (UNIX milliseconds) filter for the request.
        end_time : int, optional
            The end time (UNIX milliseconds) filter for the request.
        limit : int, optional
            The limit for the response.
        recv_window : int, optional
            The response receive window for the request (cannot be greater than 60000).

        Returns
        -------
        dict[str, Any]

        References
        ----------
        https://binance-docs.github.io/apidocs/spot/en/#all-orders-user_data

        """
        payload: Dict[str, str] = {"symbol": format_symbol(symbol).upper()}
        if order_id is not None:
            payload["orderId"] = order_id
        if start_time is not None:
            payload["startTime"] = str(start_time)
        if end_time is not None:
            payload["endTime"] = str(end_time)
        if limit is not None:
            payload["limit"] = str(limit)
        if recv_window is not None:
            payload["recvWindow"] = str(recv_window)

        return await self.client.sign_request(
            http_method="GET",
            url_path=self.BASE_ENDPOINT + "allOrders",
            payload=payload,
        )
コード例 #9
0
    async def cancel_oco_order(
        self,
        symbol: str,
        order_list_id: Optional[str] = None,
        list_client_order_id: Optional[str] = None,
        new_client_order_id: Optional[str] = None,
        recv_window: Optional[int] = None,
    ) -> Dict[str, Any]:
        """
        Cancel an entire Order List.

        Either `order_list_id` or `list_client_order_id` must be provided.

        Cancel OCO (TRADE).
        `DELETE /api/v3/orderList`.

        Parameters
        ----------
        symbol : str
            The symbol for the request.
        order_list_id : str, optional
            The order list ID for the request.
        list_client_order_id : str, optional
            The list client order ID for the request.
        new_client_order_id : str, optional
            The new client order ID to uniquely identify this request.
        recv_window : int, optional
            The response receive window for the request (cannot be greater than 60000).

        Returns
        -------
        dict[str, Any]

        References
        ----------
        https://binance-docs.github.io/apidocs/spot/en/#cancel-oco-trade

        """
        payload: Dict[str, str] = {"symbol": format_symbol(symbol).upper()}
        if order_list_id is not None:
            payload["orderListId"] = order_list_id
        if list_client_order_id is not None:
            payload["listClientOrderId"] = list_client_order_id
        if new_client_order_id is not None:
            payload["newClientOrderId"] = new_client_order_id
        if recv_window is not None:
            payload["recvWindow"] = str(recv_window)

        return await self.client.sign_request(
            http_method="DELETE",
            url_path=self.BASE_ENDPOINT + "orderList",
            payload=payload,
        )
コード例 #10
0
    async def cancel_order(
        self,
        symbol: str,
        order_id: Optional[str] = None,
        orig_client_order_id: Optional[str] = None,
        new_client_order_id: Optional[str] = None,
        recv_window: Optional[int] = None,
    ) -> Dict[str, Any]:
        """
        Cancel an active order.

        Cancel Order (TRADE).
        `DELETE /api/v3/order`.

        Parameters
        ----------
        symbol : str
            The symbol for the request.
        order_id : str, optional
            The order ID to cancel.
        orig_client_order_id : str, optional
            The original client order ID to cancel.
        new_client_order_id : str, optional
            The new client order ID to uniquely identify this request.
        recv_window : int, optional
            The response receive window for the request (cannot be greater than 60000).

        Returns
        -------
        dict[str, Any]

        References
        ----------
        https://binance-docs.github.io/apidocs/spot/en/#cancel-order-trade

        """
        payload: Dict[str, str] = {"symbol": format_symbol(symbol).upper()}
        if order_id is not None:
            payload["orderId"] = str(order_id)
        if orig_client_order_id is not None:
            payload["origClientOrderId"] = str(orig_client_order_id)
        if new_client_order_id is not None:
            payload["newClientOrderId"] = str(new_client_order_id)
        if recv_window is not None:
            payload["recvWindow"] = str(recv_window)

        return await self.client.sign_request(
            http_method="DELETE",
            url_path=self.BASE_ENDPOINT + "order",
            payload=payload,
        )
コード例 #11
0
    async def agg_trades(
        self,
        symbol: str,
        from_id: Optional[int] = None,
        start_time_ms: Optional[int] = None,
        end_time_ms: Optional[int] = None,
        limit: Optional[int] = None,
    ) -> Dict[str, Any]:
        """
        Get recent aggregated market trades.

        Compressed/Aggregate Trades List.
        `GET /api/v3/aggTrades`

        Parameters
        ----------
        symbol : str
            The trading pair.
        from_id : int, optional
            The trade ID to fetch from. Default gets most recent trades.
        start_time_ms : int, optional
            The UNIX timestamp (milliseconds) to get aggregate trades from INCLUSIVE.
        end_time_ms: int, optional
            The UNIX timestamp (milliseconds) to get aggregate trades until INCLUSIVE.
        limit : int, optional
            The limit for the response. Default 500; max 1000.

        Returns
        -------
        dict[str, Any]

        References
        ----------
        https://binance-docs.github.io/apidocs/spot/en/#compressed-aggregate-trades-list

        """
        payload: Dict[str, str] = {"symbol": format_symbol(symbol).upper()}
        if from_id is not None:
            payload["fromId"] = str(from_id)
        if start_time_ms is not None:
            payload["startTime"] = str(start_time_ms)
        if end_time_ms is not None:
            payload["endTime"] = str(end_time_ms)
        if limit is not None:
            payload["limit"] = str(limit)

        return await self.client.query(
            url_path=self.BASE_ENDPOINT + "aggTrades",
            payload=payload,
        )
コード例 #12
0
    async def klines(
        self,
        symbol: str,
        interval: str,
        start_time_ms: Optional[int] = None,
        end_time_ms: Optional[int] = None,
        limit: Optional[int] = None,
    ) -> List[List[Any]]:
        """
        Kline/Candlestick Data.

        `GET /api/v3/klines`

        Parameters
        ----------
        symbol : str
            The trading pair.
        interval : str
            The interval of kline, e.g 1m, 5m, 1h, 1d, etc.
        start_time_ms : int, optional
            The UNIX timestamp (milliseconds) to get aggregate trades from INCLUSIVE.
        end_time_ms: int, optional
            The UNIX timestamp (milliseconds) to get aggregate trades until INCLUSIVE.
        limit : int, optional
            The limit for the response. Default 500; max 1000.

        Returns
        -------
        list[list[Any]]

        References
        ----------
        https://binance-docs.github.io/apidocs/spot/en/#kline-candlestick-data

        """
        payload: Dict[str, str] = {
            "symbol": format_symbol(symbol).upper(),
            "interval": interval,
        }
        if start_time_ms is not None:
            payload["startTime"] = str(start_time_ms)
        if end_time_ms is not None:
            payload["endTime"] = str(end_time_ms)
        if limit is not None:
            payload["limit"] = str(limit)

        return await self.client.query(
            url_path=self.BASE_ENDPOINT + "klines",
            payload=payload,
        )
コード例 #13
0
    async def get_order(
        self,
        symbol: str,
        order_id: Optional[str] = None,
        orig_client_order_id: Optional[str] = None,
        recv_window: Optional[int] = None,
    ) -> Dict[str, Any]:
        """
        Check an order's status.

        Query Order (USER_DATA).
        `GET /api/v3/order`.

        Parameters
        ----------
        symbol : str
            The symbol for the request.
        order_id : str, optional
            The order ID for the request.
        orig_client_order_id : str, optional
            The original client order ID for the request.
        recv_window : int, optional
            The response receive window for the request (cannot be greater than 60000).

        Returns
        -------
        dict[str, Any]

        References
        ----------
        https://binance-docs.github.io/apidocs/spot/en/#query-order-user_data

        """
        payload: Dict[str, str] = {"symbol": format_symbol(symbol).upper()}
        if order_id is not None:
            payload["orderId"] = order_id
        if orig_client_order_id is not None:
            payload["origClientOrderId"] = orig_client_order_id
        if recv_window is not None:
            payload["recvWindow"] = str(recv_window)

        return await self.client.sign_request(
            http_method="GET",
            url_path=self.BASE_ENDPOINT + "order",
            payload=payload,
        )
コード例 #14
0
    async def historical_trades(
        self,
        symbol: str,
        from_id: Optional[int] = None,
        limit: Optional[int] = None,
    ) -> Dict[str, Any]:
        """
        Get older market trades.

        Old Trade Lookup.
        `GET /api/v3/historicalTrades`

        Parameters
        ----------
        symbol : str
            The trading pair.
        from_id : int, optional
            The trade ID to fetch from. Default gets most recent trades.
        limit : int, optional
            The limit for the response. Default 500; max 1000.

        Returns
        -------
        dict[str, Any]

        References
        ----------
        https://binance-docs.github.io/apidocs/spot/en/#old-trade-lookup

        """
        payload: Dict[str, str] = {"symbol": format_symbol(symbol).upper()}
        if limit is not None:
            payload["limit"] = str(limit)
        if from_id is not None:
            payload["fromId"] = str(from_id)

        return await self.client.limit_request(
            http_method="GET",
            url_path=self.BASE_ENDPOINT + "historicalTrades",
            payload=payload,
        )
コード例 #15
0
    async def exchange_info(self,
                            symbol: str = None,
                            symbols: list = None) -> Dict[str, Any]:
        """
        Get current exchange trading rules and symbol information.
        Only either `symbol` or `symbols` should be passed.

        Exchange Information.
        `GET /api/v3/exchangeinfo`

        Parameters
        ----------
        symbol : str, optional
            The trading pair.
        symbols : list[str], optional
            The list of trading pairs.

        Returns
        -------
        dict[str, Any]

        References
        ----------
        https://binance-docs.github.io/apidocs/spot/en/#exchange-information

        """
        if symbol and symbols:
            raise ValueError("`symbol` and `symbols` cannot be sent together")

        payload: Dict[str, str] = {}
        if symbol is not None:
            payload["symbol"] = format_symbol(symbol).upper()
        if symbols is not None:
            payload["symbols"] = convert_list_to_json_array(symbols)

        return await self.client.query(
            url_path=self.BASE_ENDPOINT + "exchangeInfo",
            payload=payload,
        )
コード例 #16
0
    async def get_open_orders(
        self,
        symbol: Optional[str] = None,
        recv_window: Optional[int] = None,
    ) -> Dict[str, Any]:
        """
        Get all open orders on a symbol.

        Query Current Open Orders (USER_DATA).
        `GET /api/v3/openOrders`.

        Parameters
        ----------
        symbol : str, optional
            The symbol for the request.
        recv_window : int, optional
            The response receive window for the request (cannot be greater than 60000).

        Returns
        -------
        dict[str, Any]

        References
        ----------
        https://binance-docs.github.io/apidocs/spot/en/#current-open-orders-user_data

        """
        payload: Dict[str, str] = {}
        if symbol is not None:
            payload["symbol"] = format_symbol(symbol).upper()
        if recv_window is not None:
            payload["recvWindow"] = str(recv_window)

        return await self.client.sign_request(
            http_method="GET",
            url_path=self.BASE_ENDPOINT + "openOrders",
            payload=payload,
        )
コード例 #17
0
    async def cancel_open_orders(
        self,
        symbol: str,
        recv_window: Optional[int] = None,
    ) -> Dict[str, Any]:
        """
        Cancel all active orders on a symbol. This includes OCO orders.

        Cancel all Open Orders on a Symbol (TRADE).
        `DELETE api/v3/openOrders`.

        Parameters
        ----------
        symbol : str
            The symbol for the request.
        recv_window : int, optional
            The response receive window for the request (cannot be greater than 60000).

        Returns
        -------
        dict[str, Any]

        References
        ----------
        https://binance-docs.github.io/apidocs/spot/en/#cancel-all-open-orders-on-a-symbol-trade

        """
        payload: Dict[str, str] = {"symbol": format_symbol(symbol).upper()}
        if recv_window is not None:
            payload["recvWindow"] = str(recv_window)

        return await self.client.sign_request(
            http_method="DELETE",
            url_path=self.BASE_ENDPOINT + "openOrders",
            payload=payload,
        )
コード例 #18
0
    async def ping_listen_key_isolated_margin(self, symbol: str,
                                              key: str) -> Dict[str, Any]:
        """
        Ping/Keep-alive a listen key for the ISOLATED MARGIN API.

        Keep-alive a user data stream to prevent a time-out. User data streams
        will close after 60 minutes. It's recommended to send a ping about every
        30 minutes.

        Ping/Keep-alive a ListenKey (USER_STREAM).
        `PUT /api/v3/userDataStream`.

        Parameters
        ----------
        symbol : str
            The symbol for the listen key request.
        key : str
            The listen key for the request.

        Returns
        -------
        dict[str, Any]

        References
        ----------
        https://binance-docs.github.io/apidocs/spot/en/#listen-key-isolated-margin

        """
        return await self.client.send_request(
            http_method="PUT",
            url_path=self.BASE_ENDPOINT_ISOLATED,
            payload={
                "listenKey": key,
                "symbol": format_symbol(symbol).upper()
            },
        )
コード例 #19
0
    async def my_trades(
        self,
        symbol: str,
        from_id: Optional[str] = None,
        order_id: Optional[str] = None,
        start_time: Optional[int] = None,
        end_time: Optional[int] = None,
        limit: Optional[int] = None,
        recv_window: Optional[int] = None,
    ) -> Dict[str, Any]:
        """
        Get trades for a specific account and symbol.

        Account Trade List (USER_DATA)
        `GET /api/v3/myTrades`.

        Parameters
        ----------
        symbol : str
            The symbol for the request.
        from_id : str, optional
            The trade match ID to query from.
        order_id : str, optional
            The order ID for the trades. This can only be used in combination with symbol.
        start_time : int, optional
            The start time (UNIX milliseconds) filter for the request.
        end_time : int, optional
            The end time (UNIX milliseconds) filter for the request.
        limit : int, optional
            The limit for the response.
        recv_window : int, optional
            The response receive window for the request (cannot be greater than 60000).

        Returns
        -------
        dict[str, Any]

        References
        ----------
        https://binance-docs.github.io/apidocs/spot/en/#account-trade-list-user_data


        """
        payload: Dict[str, str] = {"symbol": format_symbol(symbol).upper()}
        if from_id is not None:
            payload["fromId"] = from_id
        if order_id is not None:
            payload["orderId"] = order_id
        if start_time is not None:
            payload["startTime"] = str(start_time)
        if end_time is not None:
            payload["endTime"] = str(end_time)
        if limit is not None:
            payload["limit"] = str(limit)
        if recv_window is not None:
            payload["recvWindow"] = str(recv_window)

        return await self.client.sign_request(
            http_method="GET",
            url_path=self.BASE_ENDPOINT + "myTrades",
            payload=payload,
        )
コード例 #20
0
    async def new_oco_order(
        self,
        symbol: str,
        side: str,
        quantity: str,
        price: str,
        stop_price: str,
        list_client_order_id: Optional[str] = None,
        limit_client_order_id: Optional[str] = None,
        limit_iceberg_qty: Optional[str] = None,
        stop_client_order_id: Optional[str] = None,
        stop_limit_price: Optional[str] = None,
        stop_iceberg_qty: Optional[str] = None,
        stop_limit_time_in_force: Optional[str] = None,
        new_order_resp_type: NewOrderRespType = None,
        recv_window: Optional[int] = None,
    ) -> Dict[str, Any]:
        """
        Submit a new OCO order.

        Submit New OCO (TRADE).
        `POST /api/v3/order/oco`.

        Parameters
        ----------
        symbol : str
            The symbol for the request.
        side : str
            The order side for the request.
        quantity : str
            The order quantity for the request.
        price : str
            The order price for the request.
        stop_price : str
            The order stop price for the request.
        list_client_order_id : str, optional
            The list client order ID for the request.
        limit_client_order_id : str, optional
            The LIMIT client order ID for the request.
        limit_iceberg_qty : str, optional
            The LIMIT order display quantity for the request.
        stop_client_order_id : str, optional
            The STOP order client order ID for the request.
        stop_limit_price : str, optional
            The STOP_LIMIT price for the request.
        stop_iceberg_qty : str, optional
            The STOP order display quantity for the request.
        stop_limit_time_in_force : str, optional
            The STOP_LIMIT time_in_force for the request.
        new_order_resp_type : NewOrderRespType, optional
            The response type for the order request.
            MARKET and LIMIT order types default to FULL, all other orders default to ACK.
        recv_window : int, optional
            The response receive window for the request (cannot be greater than 60000).

        Returns
        -------
        dict[str, Any]

        References
        ----------
        https://binance-docs.github.io/apidocs/spot/en/#new-oco-trade

        """
        payload: Dict[str, str] = {
            "symbol": format_symbol(symbol).upper(),
            "side": side,
            "quantity": quantity,
            "price": price,
            "stopPrice": stop_price,
        }
        if list_client_order_id is not None:
            payload["listClientOrderId"] = list_client_order_id
        if limit_client_order_id is not None:
            payload["limitClientOrderId"] = limit_client_order_id
        if limit_iceberg_qty is not None:
            payload["limitIcebergQty"] = limit_iceberg_qty
        if stop_client_order_id is not None:
            payload["stopClientOrderId"] = stop_client_order_id
        if stop_limit_price is not None:
            payload["stopLimitPrice"] = stop_limit_price
        if stop_iceberg_qty is not None:
            payload["stopIcebergQty"] = stop_iceberg_qty
        if stop_limit_time_in_force is not None:
            payload["stopLimitTimeInForce"] = stop_limit_time_in_force
        if new_order_resp_type is not None:
            payload["new_order_resp_type"] = new_order_resp_type.value
        if recv_window is not None:
            payload["recvWindow"] = str(recv_window)

        return await self.client.sign_request(
            http_method="POST",
            url_path=self.BASE_ENDPOINT + "order/oco",
            payload=payload,
        )
コード例 #21
0
    async def new_order_test(
        self,
        symbol: str,
        side: str,
        type: str,
        time_in_force: Optional[str] = None,
        quantity: Optional[str] = None,
        quote_order_qty: Optional[str] = None,
        price: Optional[str] = None,
        new_client_order_id: Optional[str] = None,
        stop_price: Optional[str] = None,
        iceberg_qty: Optional[str] = None,
        new_order_resp_type: NewOrderRespType = None,
        recv_window: Optional[int] = None,
    ) -> Dict[str, Any]:
        """
        Test new order creation and signature/recvWindow.

        Creates and validates a new order but does not send it into the matching engine.

        Test New Order (TRADE).
        `POST /api/v3/order/test`.

        Parameters
        ----------
        symbol : str
            The symbol for the request.
        side : str
            The order side for the request.
        type : str
            The order type for the request.
        time_in_force : str, optional
            The order time in force for the request.
        quantity : str, optional
            The order quantity in base asset units for the request.
        quote_order_qty : str, optional
            The order quantity in quote asset units for the request.
        price : str, optional
            The order price for the request.
        new_client_order_id : str, optional
            The client order ID for the request. A unique ID among open orders.
            Automatically generated if not provided.
        stop_price : str, optional
            The order stop price for the request.
            Used with STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, and TAKE_PROFIT_LIMIT orders.
        iceberg_qty : str, optional
            The order iceberg (display) quantity for the request.
            Used with LIMIT, STOP_LOSS_LIMIT, and TAKE_PROFIT_LIMIT to create an iceberg order.
        new_order_resp_type : NewOrderRespType, optional
            The response type for the order request.
            MARKET and LIMIT order types default to FULL, all other orders default to ACK.
        recv_window : int, optional
            The response receive window for the request (cannot be greater than 60000).

        Returns
        -------
        dict[str, Any]

        References
        ----------
        https://binance-docs.github.io/apidocs/spot/en/#test-new-order-trade

        """
        payload: Dict[str, str] = {
            "symbol": format_symbol(symbol).upper(),
            "side": side,
            "type": type,
        }
        if time_in_force is not None:
            payload["timeInForce"] = time_in_force
        if quantity is not None:
            payload["quantity"] = quantity
        if quote_order_qty is not None:
            payload["quoteOrderQty"] = quote_order_qty
        if price is not None:
            payload["price"] = price
        if new_client_order_id is not None:
            payload["newClientOrderId"] = new_client_order_id
        if stop_price is not None:
            payload["stopPrice"] = stop_price
        if iceberg_qty is not None:
            payload["icebergQty"] = iceberg_qty
        if new_order_resp_type is not None:
            payload["newOrderRespType"] = new_order_resp_type.value
        if recv_window is not None:
            payload["recvWindow"] = str(recv_window)

        return await self.client.sign_request(
            http_method="POST",
            url_path=self.BASE_ENDPOINT + "order/test",
            payload=payload,
        )