Example #1
0
 public void AddAggregateTrade(AggregateTradeViewModel aggregateTrade)
 {
     AggregateTrades.Add(aggregateTrade);
     AggregateTrades.OrderByDescending(t => t.Time);
     RaisePropertyChangedEvent("AggregateTrades");
 }
Example #2
0
        private void UpdateAggregateTrades(IEnumerable <Interface.AggregateTrade> trades)
        {
            lock (aggregateTradesLock)
            {
                if (AggregateTrades == null ||
                    AggregateTradesChart == null)
                {
                    var orderedTrades = (from t in trades
                                         orderby t.Id
                                         select new AggregateTrade
                    {
                        Id = t.Id,
                        Time = t.Time,
                        Price = t.Price.Trim(Symbol.PricePrecision),
                        Quantity = t.Quantity.Trim(Symbol.QuantityPrecision),
                        IsBuyerMaker = t.IsBuyerMaker
                    });

                    AggregateTradesChart = new ChartValues <AggregateTrade>(orderedTrades);

                    Action initialiseAggregateTrades = () => { AggregateTrades = new ObservableCollection <AggregateTrade>(orderedTrades.Take(tradesDisplayLimit)); };

                    if (Dispatcher == null)
                    {
                        initialiseAggregateTrades();
                    }
                    else
                    {
                        Dispatcher.Invoke(initialiseAggregateTrades);
                    }
                }
                else
                {
                    var maxId = AggregateTrades.Max(at => at.Id);
                    var orderedAggregateTrades = (from t in trades
                                                  where t.Id > maxId
                                                  orderby t.Id
                                                  select new AggregateTrade
                    {
                        Id = t.Id,
                        Time = t.Time,
                        Price = t.Price.Trim(Symbol.PricePrecision),
                        Quantity = t.Quantity.Trim(Symbol.QuantityPrecision),
                        IsBuyerMaker = t.IsBuyerMaker
                    }).ToList();

                    var newCount = orderedAggregateTrades.Count;

                    if (AggregateTradesChart.Count >= chartDisplayLimit)
                    {
                        var oldTrades = AggregateTradesChart.Take(newCount);
                        foreach (var oldTrade in oldTrades)
                        {
                            AggregateTradesChart.Remove(oldTrade);
                        }
                    }

                    AggregateTradesChart.AddRange(orderedAggregateTrades);

                    Action updateAggregateTrades = () =>
                    {
                        for (int i = 0; i < newCount; i++)
                        {
                            while (AggregateTrades.Count >= tradesDisplayLimit)
                            {
                                AggregateTrades.RemoveAt(AggregateTrades.Count - 1);
                            }

                            AggregateTrades.Insert(0, orderedAggregateTrades[i]);
                        }
                    };

                    if (Dispatcher == null)
                    {
                        updateAggregateTrades();
                    }
                    else
                    {
                        Dispatcher.Invoke(updateAggregateTrades);
                    }
                }
            }
        }