예제 #1
0
        public static OrderResult ToOrderResult(this ExchangeAPIOrderResult result)
        {
            switch (result)
            {
            case ExchangeAPIOrderResult.Canceled:
                return(OrderResult.Canceled);

            case ExchangeAPIOrderResult.Error:
                return(OrderResult.Error);

            case ExchangeAPIOrderResult.Filled:
                return(OrderResult.Filled);

            case ExchangeAPIOrderResult.FilledPartially:
                return(OrderResult.FilledPartially);

            case ExchangeAPIOrderResult.Pending:
                return(OrderResult.Pending);

            case ExchangeAPIOrderResult.PendingCancel:
                return(OrderResult.PendingCancel);

            default:
                return(OrderResult.Unknown);
            }
        }
예제 #2
0
        private List <ExchangeOrderResult> ParseOrderList(JToken orderList, ExchangeAPIOrderResult status)
        {
            JToken orders = orderList["orders"];

            List <ExchangeOrderResult> orderResultList = new List <ExchangeOrderResult>();

            foreach (JToken order in orders)
            {
                ExchangeOrderResult orderResult = ParseOrder(order);

                if (orderResult.Result == status || status == ExchangeAPIOrderResult.Unknown) //ApiOrderResult.Unknown - any states
                {
                    orderResultList.Add(orderResult);
                }
            }

            return(orderResultList);
        }
예제 #3
0
 private ExchangeOrderResult SimulateOrderResult(Coin baseCoin, Coin coin, decimal amount, ExchangeAPIOrderResult result)
 {
     return(new ExchangeOrderResult
     {
         Amount = amount,
         AmountFilled = amount,
         AveragePrice = 9.99M,
         IsBuy = true,
         Message = "Simulated order",
         OrderDate = DateTime.UtcNow,
         Symbol = $"{baseCoin.Code}-{coin.Code}",
         OrderId = Guid.NewGuid().ToString(),
         Result = result,
     });
 }
예제 #4
0
        public override async void pollOrders(object source, ElapsedEventArgs e)
        {
            if (pollingOrders)
            {
                return;
            }
            else
            {
                pollingOrders = true;
            }
            try
            {
                for (bool open_completed = false; open_completed; open_completed = !open_completed)
                {
                    IEnumerable <ExchangeOrderResult> resultOrders;
                    if (open_completed)
                    {
                        resultOrders = await api.GetCompletedOrderDetailsAsync();
                    }
                    else
                    {
                        resultOrders = await api.GetOpenOrderDetailsAsync();
                    }

                    foreach (ExchangeOrderResult orderOpen in resultOrders)
                    {
                        String   orderID              = orderOpen.OrderId;
                        Decimal  amount               = orderOpen.Amount;
                        Decimal  amountFilled         = orderOpen.AmountFilled;
                        Decimal  averagePrice         = orderOpen.AveragePrice;
                        Boolean  isBuy                = orderOpen.IsBuy;
                        DateTime orderDate            = orderOpen.OrderDate;
                        ExchangeAPIOrderResult result = orderOpen.Result;
                        String symbol = orderOpen.Symbol;
                        COrder order  = null;
                        if (server.dctIdToOrder.ContainsKey(orderID))
                        {
                            order = server.dctIdToOrder[orderID];
                        }

                        if (order != null)
                        {
                            order.OrderID   = orderID;
                            order.DealPrice = (Double)averagePrice;
                            //order.Fee = fee;
                            //order.FeeRate = feeRate;
                            order.Size   = (double)amount;
                            order.Filled = (Double)amountFilled;
                            switch (result)
                            {
                            case ExchangeAPIOrderResult.Canceled:
                                order.Status = COrder.OrderState.Cancelled;
                                break;

                            case ExchangeAPIOrderResult.Error:
                                order.Status = COrder.OrderState.Error;
                                break;

                            case ExchangeAPIOrderResult.Filled:
                                order.Status = COrder.OrderState.Filled;
                                break;

                            case ExchangeAPIOrderResult.FilledPartially:
                                order.Status = COrder.OrderState.Partial;
                                break;

                            case ExchangeAPIOrderResult.Pending:
                                order.Status = COrder.OrderState.Queued;
                                break;

                            case ExchangeAPIOrderResult.Unknown:
                                order.Status = COrder.OrderState.Unknown;
                                break;
                            }
                            order.TimeStampFilled = orderDate;
                            order.updateGUI();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                server.AddLog(ex.Message);
            }
            pollingOrders = false;
        }
예제 #5
0
 public static bool IsCompleted(this ExchangeAPIOrderResult eaor) => Completed.Contains(eaor);
예제 #6
0
        /// <summary>
        /// Simulate a result from an exchange
        /// </summary>
        /// <param name="symbol"></param>
        /// <param name="quantity"></param>
        /// <param name="price"></param>
        /// <param name="IsBuy"></param>
        /// <param name="simulatedResult">GDAX will send back a pending result on a new order </param>
        /// <returns></returns>
        private ExchangeOrderResult SimulateOrderResult(Coin baseCoin, Coin coin, decimal quantity, decimal?price, bool IsBuy, ExchangeAPIOrderResult simulatedResult)
        {
            Log($"Using simulated exchange {_exchangeApi.Name }");

            _simulatedOrderResult = new ExchangeOrderResult
            {
                Amount       = quantity,
                AmountFilled = quantity,
                AveragePrice = price.GetValueOrDefault(0),
                IsBuy        = IsBuy,
                Message      = "Simulated order",
                OrderDate    = DateTime.UtcNow,
                Symbol       = $"{baseCoin.Code}-{coin.Code}",
                OrderId      = Guid.NewGuid().ToString(),
                Result       = simulatedResult
            };

            return(_simulatedOrderResult);
        }