public async Task <DepthResponse> GetOrderBookAsync(DepthRequest request) { if (String.IsNullOrEmpty(request.Pair)) { throw new ArgumentNullException(nameof(request.Pair)); } var content = await CallAsync <ResponseModel>(HttpMethod.Get, BuildUrl(_settings.PublicUrl, $"open/orders?symbol={request.Pair}&limit={request.Limit}")); dynamic data = content.Data; var asks = ((IEnumerable <dynamic>)data.BUY).Take(request.Limit).Select(x => new OrderInBookResult { Rate = x[0], Volume = x[1] }).Where(x => x.Rate > 0); var bids = ((IEnumerable <dynamic>)data.SELL).Take(request.Limit).Select(x => new OrderInBookResult { Rate = x[0], Volume = x[1] }).Where(x => x.Rate > 0); if (!asks.Any() || !bids.Any()) { return(new DepthResponse()); } if (asks.Count() < bids.Count()) { bids = bids.Take(asks.Count()); } else if (asks.Count() > bids.Count()) { asks = asks.Take(bids.Count()); } return(new DepthResponse(asks.ToList(), bids.ToList())); }
public async Task <DepthResponse> GetOrderBookAsync(DepthRequest request) { if (String.IsNullOrEmpty(request.Pair)) { throw new ArgumentNullException(nameof(request.Pair)); } var content = await CallAsync <dynamic>(HttpMethod.Get, BuildUrl(_settings.PublicUrl, $"market/depth?symbol={request.Pair}&type=step1")); var asks = ((IEnumerable <dynamic>)content.tick.asks).Take(request.Limit).Select(x => new OrderInBookResult { Rate = x[0], Volume = x[1] }).Where(x => x.Rate > 0); var bids = ((IEnumerable <dynamic>)content.tick.bids).Take(request.Limit).Select(x => new OrderInBookResult { Rate = x[0], Volume = x[1] }).Where(x => x.Rate > 0); if (!asks.Any() || !bids.Any()) { return(new DepthResponse()); } if (asks.Count() < bids.Count()) { bids = bids.Take(asks.Count()); } else if (asks.Count() > bids.Count()) { asks = asks.Take(bids.Count()); } return(new DepthResponse(asks.ToList(), bids.ToList())); }
public void SendFuturesContractSubscribeMessage(List <OrderContract> contracts, int marketNumber, string userName) { DepthRequest depthRequest = new DepthRequest(); OrderContract[] orders = new OrderContract[40]; int index = 0; foreach (var contract in contracts) { if (contract.CallPut == 'P' || contract.CallPut == 'C') { continue; } orders[index] = contract; depthRequest.AddContract(contract); if (index == 39) { connection.Send(MessageType.MESSAGE_99_FUTURES_SCREEN_OPEN, userName, depthRequest); depthRequest = new DepthRequest(); orders = new OrderContract[40]; index = -1; } index++; } if (index > 0) { connection.Send(MessageType.MESSAGE_99_FUTURES_SCREEN_OPEN, userName, depthRequest); } }
public void SendFuturesContractUnsubscribeAll(string userName) { DepthRequest depthRequest = new DepthRequest(); depthRequest.ContractsRequested = 1; connection.Send(MessageType.MESSAGE_42_FUTURES_SCREEN_CLOSE, userName, depthRequest); }
public async Task <Depth> GetDepth(string pair, int limit = 100) { DepthRequest req = new DepthRequest() { Symbol = pair, Limit = limit }; var resp = await _connecter.PublicRequest(req); return(JsonConvert.DeserializeObject <Depth>(resp.Content, new CustomDepthConverter())); }
public async Task <DepthResponse> GetOrderBookAsync(DepthRequest request) { if (String.IsNullOrEmpty(request.Pair)) { throw new ArgumentNullException(nameof(request.Pair)); } if (request.Limit < 0) { throw new ArgumentOutOfRangeException(nameof(request.Limit)); } var content = await CallAsync <dynamic>(HttpMethod.Get, BuildUrl(_settings.PublicUrl, $"orderBook/L2?symbol={request.Pair}&depth={request.Limit}")); var asks = new List <OrderInBookResult>(); var bids = new List <OrderInBookResult>(); foreach (dynamic item in content) { var side = Enums.Parse <TradeType>((string)item.side, true); if (side == TradeType.Buy) { asks.Add(new OrderInBookResult { Rate = item.price, Volume = item.size }); } else { bids.Add(new OrderInBookResult { Rate = item.price, Volume = item.size }); } } return(new DepthResponse(asks, bids)); }