Exemplo n.º 1
0
        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);
        }