/// <summary> /// Test new order creation and signature/recvWindow long. Creates and validates a new order but does not send it into the matching engine. /// </summary> /// <param name="symbol">Symbol of Coin.</param> /// <param name="side">Order Side [BUY, SELL]</param> /// <param name="type">Order Type [LIMIT, MARKET, STOP_LOSS , STOP_LOSS_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT, LIMIT_MAKER]</param> /// <param name="price">The price of the coin at the time the order is entered.</param> /// <param name="quantity">The quantity of assets to buy or sell in the limit order.</param> /// <param name="quoteOrderQty">MARKET orders using quoteOrderQty specifies the amount the user wants to spend (when buying) or receive (when selling) the quote asset; the correct quantity will be determined based on the market liquidity and quoteOrderQty. /// Using BTCUSDT as an example: /// On the BUY side, the order will buy as many BTC as quoteOrderQty USDT can. /// On the SELL side, the order will sell as much BTC needed to receive quoteOrderQty USDT. /// </param> /// <param name="icebergQty">A conditional order to buy or sell a large amount of assets in smaller predetermined quantities in order to conceal the total order quantity.</param> /// <param name="stopPrice">When the asset’s price reaches the given stop price, the stop-limit order is executed to buy or sell the asset at the given limit price or better.</param> /// <param name="orderResponseType">ACK, RESULT or FULL; MARKET and LIMIT order types default to FULL, all other orders default to ACK.</param> /// <param name="timeInForce">Any order with an icebergQty MUST have timeInForce set to GTC.</param> /// <param name="recvWindow">The value cannot be greater than 60000</param> /// <returns></returns> public async Task <dynamic> TestNewOrder(string symbol, OrderSide side, OrderType type, decimal?price = null, decimal?quantity = null, decimal?quoteOrderQty = null, decimal?icebergQty = null, decimal?stopPrice = null, OrderResponseType?orderResponseType = OrderResponseType.ACK, TimeInForce timeInForce = TimeInForce.GTC, long?recvWindow = 5000) { var parameters = $"symbol={symbol.ToUpper()}&side={side.GetMemberAttr()}&type={type.GetMemberAttr()}&recvWindow={recvWindow}" + ((type == OrderType.LIMIT || type == OrderType.STOP_LOSS_LIMIT || type == OrderType.TAKE_PROFIT_LIMIT) ? $"&timeInForce={timeInForce.GetMemberAttr()}" : "") + ((type == OrderType.LIMIT || type == OrderType.MARKET || type == OrderType.STOP_LOSS || type == OrderType.STOP_LOSS_LIMIT || type == OrderType.TAKE_PROFIT || type == OrderType.TAKE_PROFIT_LIMIT || type == OrderType.LIMIT_MAKER) && quantity > 0m ? $"&quantity={quantity}" : "") + ((type == OrderType.MARKET) && quoteOrderQty > 0m ? $""eOrderQty={quoteOrderQty}" : "") + ((type == OrderType.LIMIT || type == OrderType.STOP_LOSS_LIMIT || type == OrderType.TAKE_PROFIT_LIMIT || type == OrderType.LIMIT_MAKER) && price > 0m ? $"&price={price}" : "") + ((type == OrderType.STOP_LOSS || type == OrderType.STOP_LOSS_LIMIT || type == OrderType.TAKE_PROFIT || type == OrderType.TAKE_PROFIT_LIMIT) && stopPrice > 0m ? $"&stopPrice={stopPrice}" : "") + ((type == OrderType.LIMIT || type == OrderType.STOP_LOSS_LIMIT || type == OrderType.TAKE_PROFIT_LIMIT) && icebergQty > 0m ? $"&icebergQty={icebergQty}" : "") + ((orderResponseType.HasValue) ? $"&newOrderRespType={orderResponseType.GetMemberAttr()}" : ""); return(await _httpConfiguration.SendAsyncRequest <dynamic>(HttpMethod.Post, Endpoint.TestOrder, parameters, true)); }