/// <inheritdoc /> protected async override Task <ExchangeOrderResult> OnPlaceOrderAsync(ExchangeOrderRequest order) { //{ // "market": "XRP-PERP", // "side": "sell", // "price": 0.306525, // "type": "limit", // "size": 31431.0, // "reduceOnly": false, // "ioc": false, // "postOnly": false, // "clientId": null //} IEnumerable <ExchangeMarket> markets = await OnGetMarketSymbolsMetadataAsync(); ExchangeMarket market = markets.Where(m => m.MarketSymbol == order.MarketSymbol).First(); var payload = await GetNoncePayloadAsync(); var parameters = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase) { { "market", market.MarketSymbol }, { "side", order.IsBuy ? "buy" : "sell" }, { "type", order.OrderType.ToStringLowerInvariant() }, { "size", order.RoundAmount() } }; if (!string.IsNullOrEmpty(order.ClientOrderId)) { parameters.Add("clientId", order.ClientOrderId); } if (order.IsPostOnly != null) { parameters.Add("postOnly", order.IsPostOnly); } if (order.OrderType != OrderType.Market) { int precision = BitConverter.GetBytes(decimal.GetBits((decimal)market.PriceStepSize)[3])[2]; if (order.Price == null) { throw new ArgumentNullException(nameof(order.Price)); } parameters.Add("price", Math.Round(order.Price.Value, precision)); } else { parameters.Add("price", null); } parameters.CopyTo(payload); order.ExtraParameters.CopyTo(payload); var response = await MakeJsonRequestAsync <JToken>("/orders", null, payload, "POST"); ExchangeOrderResult result = new ExchangeOrderResult { OrderId = response["id"].ToStringInvariant(), ClientOrderId = response["clientId"].ToStringInvariant(), OrderDate = CryptoUtility.ToDateTimeInvariant(response["createdAt"]), Price = CryptoUtility.ConvertInvariant <decimal>(response["price"]), AmountFilled = CryptoUtility.ConvertInvariant <decimal>(response["filledSize"]), AveragePrice = CryptoUtility.ConvertInvariant <decimal>(response["avgFillPrice"]), Amount = CryptoUtility.ConvertInvariant <decimal>(response["size"]), MarketSymbol = response["market"].ToStringInvariant(), IsBuy = response["side"].ToStringInvariant() == "buy" }; return(result); }