Пример #1
0
        private void OnNewData(object sender, ElapsedEventArgs elapsedEventArgs)
        {
            if (XVisibleRange != null)
            {
                lock (elapsedEventArgs)
                {
                    if (_index >= _data.Length)
                    {
                        _timerNewDataUpdate.Stop();
                    }

                    var newTick = _data[_index];
                    var date    = _dataSeries0.XValues[_dataSeries0.Count - 1].AddMinutes(30);

                    var volume   = _random.Next(100);
                    var bidOrAsk = _random.Next(2) == 0 ? BidOrAsk.Bid : BidOrAsk.Ask;

                    if (_index % _ticksPerCandle == 0)
                    {
                        _filterDataSeries.Append(date, _movingAverage.Push(_cumulativeVolume).Current);
                        _cumulativeVolume = default(double);

                        var metaNew = new CandlestickMetaData();
                        metaNew.AddTick(new CandleTick
                        {
                            BidOrAsk  = bidOrAsk,
                            Price     = newTick,
                            Volume    = volume,
                            TimeStamp = date
                        });

                        _cumulativeVolume += bidOrAsk.Equals(BidOrAsk.Ask) ? volume : -volume;

                        var high = _cumulativeVolume > 0 ? _cumulativeVolume : 0;
                        var low  = _cumulativeVolume < 0 ? _cumulativeVolume : 0;

                        _dataSeries1.Append(date, _cumulativeVolume, high, low, _cumulativeVolume);
                        _dataSeries0.Append(date, newTick, newTick, newTick, newTick, metaNew);
                        _candleCount = _dataSeries0.Count;

                        var visibleRange = (IndexRange)XVisibleRange;
                        if (visibleRange.Max + 2 >= _dataSeries0.Count)
                        {
                            var newRange = new IndexRange(visibleRange.Min + 1, visibleRange.Max + 1);
                            XVisibleRange = newRange;
                        }
                    }
                    else
                    {
                        var open = _dataSeries0.OpenValues[_candleCount - 1];
                        var high = _dataSeries0.HighValues[_candleCount - 1];
                        high = high > newTick ? high : newTick;

                        var low = _dataSeries0.LowValues[_candleCount - 1];
                        low = low < newTick ? low : newTick;

                        var metaData = (CandlestickMetaData)_dataSeries0.Metadata[_candleCount - 1];

                        metaData.AddTick(new CandleTick
                        {
                            BidOrAsk  = bidOrAsk,
                            Price     = newTick,
                            Volume    = volume,
                            TimeStamp = date
                        });


                        _dataSeries0.Update(_candleCount - 1, open, high, low, newTick);

                        _cumulativeVolume += bidOrAsk.Equals(BidOrAsk.Ask) ? volume : -volume;

                        open = _dataSeries1.OpenValues[_candleCount - 1];
                        high = _dataSeries1.HighValues[_candleCount - 1];
                        high = high > _cumulativeVolume ? high : _cumulativeVolume;

                        low = _dataSeries1.LowValues[_candleCount - 1];
                        low = low < _cumulativeVolume ? low : _cumulativeVolume;

                        _dataSeries1.Update(_candleCount - 1, open, high, low, _cumulativeVolume);
                    }

                    ++_index;
                }
            }
        }
Пример #2
0
        public void LoadRandomData(int candlesCount, int ticksPerCandle)
        {
            _ticksPerCandle = ticksPerCandle;

            _data = null;

            var dataSource = new RandomWalkGenerator();

            var ticksCount = (candlesCount + 1) * ticksPerCandle;

            _data = dataSource.GetRandomWalkSeries(ticksCount).YData.ToArray();

            _index = 0;
            //var baseDate = DateTime.Now;
            for (int j = 0; j < candlesCount; j++)
            {
                var date             = _baseTime.AddMinutes(j * 30);
                var volume           = _random.Next(100);
                var bidOrAsk         = _random.Next(2) == 0 ? BidOrAsk.Bid : BidOrAsk.Ask;
                var cumulativeVolume = default(double);

                var metaData = new CandlestickMetaData();
                metaData.AddTick(new CandleTick
                {
                    BidOrAsk  = bidOrAsk,
                    Price     = _data[_index],
                    Volume    = volume,
                    TimeStamp = date
                });

                cumulativeVolume += bidOrAsk.Equals(BidOrAsk.Ask) ? volume : -volume;

                var high = cumulativeVolume > 0 ? cumulativeVolume : 0;
                var low  = cumulativeVolume < 0 ? cumulativeVolume : 0;

                _dataSeries1.Append(date, cumulativeVolume, high, low, cumulativeVolume);
                _dataSeries0.Append(date, _data[_index], _data[_index], _data[_index], _data[_index], metaData);
                _candleCount = _dataSeries0.Count;

                for (int i = 0; i < ticksPerCandle; i++)
                {
                    _index++;

                    volume   = _random.Next(100);
                    bidOrAsk = _random.Next(2) == 0 ? BidOrAsk.Bid : BidOrAsk.Ask;

                    //date = date;
                    var newTick = _data[_index];
                    var open    = _dataSeries0.OpenValues[_candleCount - 1];
                    high = _dataSeries0.HighValues[_candleCount - 1];
                    high = high > newTick ? high : newTick;

                    low = _dataSeries0.LowValues[_candleCount - 1];
                    low = low < newTick ? low : newTick;

                    var meta = (CandlestickMetaData)_dataSeries0.Metadata[_candleCount - 1];

                    meta.AddTick(new CandleTick
                    {
                        BidOrAsk  = bidOrAsk,
                        Price     = newTick,
                        Volume    = volume,
                        TimeStamp = date
                    });

                    _dataSeries0.Update(_candleCount - 1, open, high, low, newTick);

                    cumulativeVolume += bidOrAsk.Equals(BidOrAsk.Ask) ? volume : -volume;

                    open = _dataSeries1.OpenValues[_candleCount - 1];
                    high = _dataSeries1.HighValues[_candleCount - 1];
                    high = high > cumulativeVolume ? high : cumulativeVolume;

                    low = _dataSeries1.LowValues[_candleCount - 1];
                    low = low < cumulativeVolume ? low : cumulativeVolume;

                    _dataSeries1.Update(_candleCount - 1, open, high, low, cumulativeVolume);
                }

                _filterDataSeries.Append(date, _movingAverage.Push(cumulativeVolume).Current);
            }
        }