Exemplo n.º 1
0
        public Task StartOrderbookListener()
        {
            var markets = _client.GetMarketSymbolsMetadataAsync().GetAwaiter().GetResult();

            foreach (var market in markets)
            {
                Orderbooks.Add(market.BaseCurrency + "/" + market.QuoteCurrency,
                               new Orderbook()
                {
                    Pair         = market.MarketSymbol,
                    BaseCurrency = market.QuoteCurrency,
                    AltCurrency  = market.BaseCurrency,
                    Asks         = new List <OrderbookOrder>(),
                    Bids         = new List <OrderbookOrder>()
                }
                               );
            }

            Task.Run(async() =>
            {
                while (true)
                {
                    try
                    {
                        foreach (var market in markets)
                        {
                            List <OrderbookOrder> bids = new List <OrderbookOrder>();
                            List <OrderbookOrder> asks = new List <OrderbookOrder>();

                            var orderbook = await _client.GetOrderBookAsync(market.MarketSymbol);

                            bids.AddRange(orderbook.Bids.Values.Select(x => new OrderbookOrder()
                            {
                                Price = x.Price, Amount = x.Amount
                            }));
                            asks.AddRange(orderbook.Asks.Values.Select(x => new OrderbookOrder()
                            {
                                Price = x.Price, Amount = x.Amount
                            }));

                            var thisOrderbook  = Orderbooks[market.BaseCurrency + "/" + market.QuoteCurrency];
                            thisOrderbook.Bids = bids;
                            thisOrderbook.Asks = asks;
                        }

                        await Task.Delay(1000);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Error in KuCoin orderbook listener (" + e.Message + ")");
                    }
                }
            });

            return(Task.CompletedTask);
        }
Exemplo n.º 2
0
        public Task StartOrderbookListener()
        {
            var markets = _client.GetMarketSymbolsMetadataAsync().GetAwaiter().GetResult();

            foreach (var market in markets)
            {
                Orderbooks.Add(market.BaseCurrency + "/" + market.QuoteCurrency, new Orderbook()
                {
                    Pair         = market.MarketSymbol,
                    BaseCurrency = market.QuoteCurrency,
                    AltCurrency  = market.BaseCurrency,
                    Asks         = new List <OrderbookOrder>(),
                    Bids         = new List <OrderbookOrder>()
                });
            }

            Task.Run(() =>
            {
                //Subscribe to ticker websockets
                var socket = _client.GetFullOrderBookWebSocket((orderbook) =>
                {
                    try
                    {
                        List <OrderbookOrder> bids = new List <OrderbookOrder>();
                        List <OrderbookOrder> asks = new List <OrderbookOrder>();

                        foreach (var bid in orderbook.Bids.Values)
                        {
                            bids.Add(new OrderbookOrder()
                            {
                                Price = bid.Price, Amount = bid.Amount
                            });
                        }
                        foreach (var ask in orderbook.Asks.Values)
                        {
                            asks.Add(new OrderbookOrder()
                            {
                                Price = ask.Price, Amount = ask.Amount
                            });
                        }

                        var thisOrderbook  = Orderbooks.Values.First(x => x.Pair == orderbook.MarketSymbol);
                        thisOrderbook.Bids = bids;
                        thisOrderbook.Asks = asks;
                    }
                    catch (Exception e) {
                        Console.WriteLine(e.Message);
                    } //Don't let an exception kill our socket
                });
            });

            return(Task.CompletedTask);
        }
Exemplo n.º 3
0
        public Task StartOrderbookListener()
        {
            var markets = _client.GetMarkets();

            foreach (var market in markets)
            {
                var orderbook = _client.GetOrderBook(market.Pair);
                Orderbooks.Add(market.Instrument + "/" + market.Currency,
                               new Orderbook()
                {
                    Pair         = market.Pair,
                    BaseCurrency = market.Currency,
                    AltCurrency  = market.Instrument,
                    Asks         = orderbook.asks.Select(ask => new OrderbookOrder()
                    {
                        Price = ask[0], Amount = ask[1]
                    }).ToList(),
                    Bids = orderbook.bids.Select(bid => new OrderbookOrder()
                    {
                        Price = bid[0], Amount = bid[1]
                    }).ToList()
                }
                               );
            }

            Task.Run(() =>
            {
                //Subscribe to ticker websockets
                //TODO: Implement sockets in client
                while (true)
                {
                    try
                    {
                        foreach (var market in markets)
                        {
                            var orderbook = _client.GetOrderBook(market.Pair);
                            if (orderbook == null)
                            {
                                continue; //It breaks sometimes so just skip the pair this loop
                            }

                            List <OrderbookOrder> bids = new List <OrderbookOrder>();
                            List <OrderbookOrder> asks = new List <OrderbookOrder>();
                            bids.AddRange(orderbook.bids.Select(bid => new OrderbookOrder()
                            {
                                Price = bid[0], Amount = bid[1]
                            }));
                            asks.AddRange(orderbook.asks.Select(ask => new OrderbookOrder()
                            {
                                Price = ask[0], Amount = ask[1]
                            }));

                            var thisOrderbook  = Orderbooks[market.Instrument + "/" + market.Currency];
                            thisOrderbook.Bids = bids;
                            thisOrderbook.Asks = asks;
                        }

                        Thread.Sleep(1000);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Error in BtcMarkets orderbook listener (" + e.Message + ")");
                    }
                }
            });

            return(Task.CompletedTask);
        }
Exemplo n.º 4
0
        //Coinjar is a market maker and doesn't have orderbooks (I think) so just return infinite depth
        public Task StartOrderbookListener()
        {
            var markets = _client.GetMarketsAsync().GetAwaiter().GetResult();

            foreach (var market in markets)
            {
                Orderbooks.Add(market.AltCurrency + "/" + market.BaseCurrency,
                               new Orderbook()
                {
                    Pair         = market.Pair,
                    BaseCurrency = market.BaseCurrency,
                    AltCurrency  = market.AltCurrency,
                    Asks         = new List <OrderbookOrder> {
                        new OrderbookOrder()
                        {
                            Price = market.Ask ?? 0, Amount = Decimal.MaxValue
                        }
                    },
                    Bids = new List <OrderbookOrder> {
                        new OrderbookOrder()
                        {
                            Price = market.Bid ?? 0, Amount = Decimal.MaxValue
                        }
                    }
                }
                               );
            }

            Task.Run(async() =>
            {
                //Get price forever
                while (true)
                {
                    try
                    {
                        markets = await _client.GetMarketsAsync();

                        foreach (var market in markets)
                        {
                            var orderbook          = Orderbooks[market.AltCurrency + "/" + market.BaseCurrency];
                            orderbook.Pair         = market.Pair;
                            orderbook.BaseCurrency = market.BaseCurrency;
                            orderbook.AltCurrency  = market.AltCurrency;
                            orderbook.Asks         = new List <OrderbookOrder> {
                                new OrderbookOrder()
                                {
                                    Price = market.Ask ?? orderbook.Asks.First().Price, Amount = Decimal.MaxValue
                                }
                            };                                                                                                                                                    //Sometimes the API returns null for no reason so just leave the price the same if it does
                            orderbook.Bids = new List <OrderbookOrder> {
                                new OrderbookOrder()
                                {
                                    Price = market.Bid ?? orderbook.Bids.First().Price, Amount = Decimal.MaxValue
                                }
                            };
                        }

                        await Task.Delay(1000);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Error in BtcMarkets orderbook listener (" + e.Message + ")");
                    }
                }
            });

            return(Task.CompletedTask);
        }