Esempio n. 1
0
        private void ProcessCandle(CandleSeries series, Candle candle)
        {
            // возможно была задержка в получении данных и обработаны еще не все данные
            if (!_isStarted)
            {
                this.GuiAsync(() => IsStarted = true);
            }

            _timer.Reset();

            _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);
            }
        }
Esempio n. 2
0
        public async Task ResetTimerTest()
        {
            // Arrange
            int callbackCalledCount = 0;

            Task Callback()
            {
                Interlocked.Increment(ref callbackCalledCount);
                return(Task.CompletedTask);
            }

            TimeSpan period          = TimeSpan.FromSeconds(3);
            var      resettableTimer = new ResettableTimer(Callback, period, null);

            // Act
            resettableTimer.Start();
            for (int i = 0; i < 5; i++)
            {
                await Task.Delay(TimeSpan.FromSeconds(2));

                resettableTimer.Reset();
            }

            await Task.Delay(TimeSpan.FromSeconds(4));

            // Assert
            Assert.Equal(1, callbackCalledCount);
        }
Esempio n. 3
0
        private void AddElement(IChartElement element, CandleSeries candleSeries)
        {
            if (!_isLoaded || candleSeries == null)
            {
                return;
            }

            _changedElements.Add(element);
            _skipElements.Add(element);
            _drawTimer.Reset();
        }
Esempio n. 4
0
 private void OnChartPanelSubscribeCandleElement(ChartCandleElement element, CandleSeries candleSeries)
 {
     _elements.Add(element);
     _drawTimer.Reset();
 }