コード例 #1
0
        public async Task <Order> GetOrder(Account account, int exchangeId, string orderId, string baseCurrency = null, string quoteCurrency = null)
        {
            if (exchangeId == 0)
            {
                if (baseCurrency == null || quoteCurrency == null)
                {
                    throw new ArgumentNullException("Base currency and quote currency should be provided when getting orders from Binance exchange.");
                }
                using (var client = new BinanceClient())
                {
                    //Get fees and created date.
                    decimal  fees = 0;
                    DateTime dateCreated;
                    using (var sharpClient = new ExchangeBinanceAPI())
                    {
                        sharpClient.PublicApiKey  = account.ApiKey.ToSecureString();
                        sharpClient.PrivateApiKey = account.ApiSecret.ToSecureString();
                        var sharpResult = await sharpClient.GetOrderDetailsAsync(orderId, baseCurrency.ToUpper() + quoteCurrency.ToUpper());

                        fees        = sharpResult.Fees;
                        dateCreated = sharpResult.OrderDate;
                    }


                    client.SetApiCredentials(account.ApiKey, account.ApiSecret);

                    var result = await client.QueryOrderAsync(baseCurrency.ToUpper() + quoteCurrency.ToUpper(), long.Parse(orderId));

                    var order = result.Data;

                    Domain.Model.Markets.OrderStatus orderStatus = this.GetStatusFromBiannceNet(order.Status);

                    //Calculate the average price.
                    var averageExecutedPrice = order.CummulativeQuoteQuantity / order.ExecutedQuantity;

                    return(new Order(
                               exchangeId,
                               order.OrderId.ToString(),
                               order.Side == Binance.Net.Objects.OrderSide.Buy ? Domain.Model.Markets.OrderType.BUY_LIMIT : Domain.Model.Markets.OrderType.SELL_LIMIT,
                               orderStatus,
                               baseCurrency,
                               quoteCurrency,
                               averageExecutedPrice,
                               order.OriginalQuantity,
                               order.ExecutedQuantity,
                               fees,
                               dateCreated
                               ));
                }
            }

            throw new ArgumentOutOfRangeException(nameof(exchangeId));
        }
コード例 #2
0
        public async Task <IEnumerable <Order> > GetOrderHistory(Account account, int exchangeId, string baseCurrency = null, string quoteCurrency = null)
        {
            if (exchangeId == 0)
            {
                if (baseCurrency == null || quoteCurrency == null)
                {
                    throw new ArgumentNullException("Base currency and quote currency should be provided when getting order history from Binance exchange.");
                }

                using (var client = new BinanceClient())
                {
                    var result = await client.GetAllOrdersAsync(baseCurrency.ToUpper() + quoteCurrency.ToUpper());

                    var orders = new List <Order>();

                    foreach (var order in result.Data)
                    {
                        Domain.Model.Markets.OrderStatus orderStatus = this.GetStatusFromBiannceNet(order.Status);
                        orders.Add(new Order(
                                       exchangeId,
                                       order.OrderId.ToString(),
                                       order.Side == Binance.Net.Objects.OrderSide.Buy ? Domain.Model.Markets.OrderType.BUY_LIMIT : Domain.Model.Markets.OrderType.SELL_LIMIT,
                                       orderStatus,
                                       baseCurrency,
                                       quoteCurrency,
                                       order.Price,
                                       order.OriginalQuantity,
                                       order.ExecutedQuantity,
                                       order.ExecutedQuantity * 0.0025M,
                                       order.Time
                                       ));
                    }

                    return(orders);
                }
            }

            throw new ArgumentOutOfRangeException(nameof(exchangeId));
        }
コード例 #3
0
        private Domain.Model.Markets.OrderStatus GetStatusFromBiannceNet(Binance.Net.Objects.OrderStatus orderStatus)
        {
            Domain.Model.Markets.OrderStatus result = null;

            switch (orderStatus)
            {
            case Binance.Net.Objects.OrderStatus.New:
                result = Domain.Model.Markets.OrderStatus.New;
                break;

            case Binance.Net.Objects.OrderStatus.PartiallyFilled:
                result = Domain.Model.Markets.OrderStatus.PartiallyFilled;
                break;

            case Binance.Net.Objects.OrderStatus.Filled:
                result = Domain.Model.Markets.OrderStatus.Filled;
                break;

            case Binance.Net.Objects.OrderStatus.Canceled:
                result = Domain.Model.Markets.OrderStatus.Canceled;
                break;

            case Binance.Net.Objects.OrderStatus.PendingCancel:
                result = Domain.Model.Markets.OrderStatus.Canceled;
                break;

            case Binance.Net.Objects.OrderStatus.Rejected:
                result = Domain.Model.Markets.OrderStatus.Rejected;
                break;

            case Binance.Net.Objects.OrderStatus.Expired:
                result = Domain.Model.Markets.OrderStatus.Expired;
                break;
            }

            return(result);
        }