Пример #1
0
        private void OnChartPanelSubscribeCandleElement(ChartCandleElement element, CandleSeries candleSeries)
        {
            _drawTimer.Cancel();

            _elements.Add(new RefPair <IChartElement, int>(element, 0));
            _drawTimer.Activate();
        }
Пример #2
0
        private void AddElement(IChartElement element, CandleSeries candleSeries)
        {
            if (!_isLoaded || candleSeries == null)
            {
                return;
            }

            _changedElements.Add(element);
            _skipElements.Add(element);
            _drawTimer.Activate();
        }
Пример #3
0
        private void ProcessCandle(CandleSeries series, Candle candle)
        {
            // возможно была задержка в получении данных и обработаны еще не все данные
            if (!_isStarted)
            {
                this.GuiAsync(() => IsStarted = true);
            }

            _timer.Activate();

            _candlesCount++;

            // ограничиваем кол-во передаваемых свечек, чтобы не фризился интерфейс
            if (_candlesCount % 100 == 0)
            {
                System.Threading.Thread.Sleep(200);
            }

            var candleSeries = (CandleSeries)_bufferedChart.GetSource(_candleElement);

            if (series == candleSeries)
            {
                var values = new Dictionary <IChartElement, object>();

                lock (_syncRoot)
                {
                    foreach (var element in _bufferedChart.Elements.Where(e => _bufferedChart.GetSource(e) == series))
                    {
                        if (_skipElements.Contains(element))
                        {
                            continue;
                        }

                        element.DoIf <IChartElement, ChartCandleElement>(e => values.Add(e, candle));
                        element.DoIf <IChartElement, ChartIndicatorElement>(e => values.Add(e, CreateIndicatorValue(e, candle)));
                    }
                }

                _bufferedChart.Draw(candle.OpenTime, values);

                if (series.Security is ContinuousSecurity)
                {
                    // для непрерывных инструментов всегда приходят данные по одной серии
                    // но инструмент у свечки будет равен текущему инструменту
                    ProcessContinuousSourceElements(candle);
                }
            }
            else
            {
                // для индексов будут приходить отдельные свечки для каждого инструмента
                ProcessIndexSourceElements(candle);
            }
        }