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)); }
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)); }
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); }