private static void Display(SymbolStatisticsCacheEventArgs args) { lock (_sync) { if (_displayTask.IsCompleted) { // Delay to allow multiple data updates between display updates. _displayTask = Task.Delay(250) .ContinueWith(_ => { var latestStatistics = args.Statistics; Console.SetCursorPosition(0, 0); // Display top 5 symbols with highest % price change. foreach (var stats in latestStatistics.OrderBy(s => s.PriceChangePercent).Reverse().Take(5)) { Console.WriteLine($" 24-hour statistics for {stats.Symbol}:".PadRight(119)); Console.WriteLine($" %: {stats.PriceChangePercent:0.00} | O: {stats.OpenPrice:0.00000000} | H: {stats.HighPrice:0.00000000} | L: {stats.LowPrice:0.00000000} | V: {stats.Volume:0.}".PadRight(119)); Console.WriteLine($" Bid: {stats.BidPrice:0.00000000} | Last: {stats.LastPrice:0.00000000} | Ask: {stats.AskPrice:0.00000000} | Avg: {stats.WeightedAveragePrice:0.00000000}".PadRight(119)); Console.WriteLine(); } Console.WriteLine(_message.PadRight(119)); }); } } }
private void ReceivedSymbol(SymbolStatisticsCacheEventArgs args) { foreach (var statistic in args.Statistics) { LogManager.Instance.AddLog(new SymbolLog() { Symbol = statistic.Symbol, Value = statistic.LastPrice }); } }
private static void Display(SymbolStatisticsCacheEventArgs args) => Display(args.Statistics);