public bool PlaceOrder(UserTradeOrder aOrder, bool aUseProxy = true) { if (!IsCredentialsSet) { throw new Exception("No Credentials were set"); } if (aOrder == null) { throw new ArgumentNullException(nameof(aOrder), $"Invalid order with id {aOrder}"); } if (aOrder.Status != OrderStatus.Waiting) { return(false); } using (var lClient = new PoloniexClient()) { WebCallResult <PoloniexOrderPlaceResult> lResponse = null; if (!aOrder.Market.TryCastToLocalMarket(out ExchangeMarket lExchangeMarket)) { throw new ArgumentException(nameof(aOrder.Market), "Invalid Market"); } if (lExchangeMarket.MarketDirection == MarketDirection.Sell) { lResponse = lClient.PlaceSellOrder(lExchangeMarket.MarketPairID, aOrder.Rate, aOrder.SentQuantity); } else if (lExchangeMarket.MarketDirection == MarketDirection.Buy) { lResponse = lClient.PlaceBuyOrder(lExchangeMarket.MarketPairID, aOrder.Rate, aOrder.SentQuantity / aOrder.Rate); } if (lResponse == null || !lResponse.Success) { throw new Exception($"Unable to place trade order at exchange. Error: {lResponse?.Error.Message ?? "Failed to get response from server" }"); } aOrder.ID = lResponse.Data.orderNumber.ToString(); aOrder.OpenTime = DateTime.UtcNow; } return(true); }