Ejemplo n.º 1
0
        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()));
        }
Ejemplo n.º 2
0
        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()));
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        public void SendFuturesContractUnsubscribeAll(string userName)
        {
            DepthRequest depthRequest = new DepthRequest();

            depthRequest.ContractsRequested = 1;
            connection.Send(MessageType.MESSAGE_42_FUTURES_SCREEN_CLOSE, userName, depthRequest);
        }
Ejemplo n.º 5
0
        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()));
        }
Ejemplo n.º 6
0
        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));
        }