Пример #1
0
        private void TicksToCandles(string data)
        {
            var ticks = ((List <Tick>)
                         new XmlSerializer(typeof(List <Tick>), new XmlRootAttribute("ticks")).Deserialize(
                             new StringReader(data))).Where(item => item.Board == _board && item.Seccode == _seccode)
                        .ToList();

            if (_ticks == null)
            {
                _ticks = ticks;
            }
            else
            {
                _ticks.AddRange(ticks);
            }

            var interval = new TimeSpan(0, _timeframe, 0);
            var temp     = (from t in _ticks
                            group t by DateTime.Parse(t.Tradetime).Ticks / interval.Ticks
                            into g
                            select new Candle
            {
                High = (from t2 in g select t2.Price).Max(),
                Low = (from t2 in g select t2.Price).Min(),
                Open = g.First().Price,
                Close = g.Last().Price,
                Volume = g.Count(),
                Time = g.First().Tradetime
            }).ToList();

            foreach (var candle in temp)
            {
                if (candle.Open < candle.Close)
                {
                    candle.StickColor = System.Windows.Media.Brushes.Green;
                }
                else
                {
                    candle.StickColor = System.Windows.Media.Brushes.Red;
                }
            }

            if (Candles.Count == _historyCount)
            {
                var realtime = Candles.ToList();
                realtime.AddRange(temp);
                Candles = new ObservableCollection <Candle>(realtime);
                return;
            }

            //todo : create value if u use some math or other operatin which dublicated
            var qqqqq = temp.Count + _historyCount;

            if (qqqqq == Candles.Count)
            {
                _dispatcher.Invoke(() => Candles[Candles.Count - 1] = temp.Last());
            }
            else if (qqqqq == Candles.Count + 1)
            {
                _dispatcher.Invoke(() => Candles.Add(temp.Last()));
            }
            else
            {
                Candles = new ObservableCollection <Candle>(temp);
            }
        }