Esempio n. 1
0
        public void Calculate(int barIndex)
        {
            DateTime barOpenTime = _marketSeries.OpenTime[barIndex].Add(-_gmtOffset);

            if (_lastBar == null || barOpenTime >= _nextBarTime)
            {
                _barStartIndex = barIndex;
                _barEndIndex   = barIndex + 1;

                _barStartTime = _marketSeries.OpenTime[_barStartIndex];
                _barEndTime   = _marketSeries.OpenTime[_barStartIndex].Add(_marketSeriesTimeFrameSpan);

                _lastBar = new OhlcBar
                {
                    Open  = _marketSeries.Open[barIndex],
                    Index = Index + 1,
                    Time  = _marketSeries.OpenTime[barIndex].Add(-_gmtOffset)
                };

                _nextBarTime = _lastBar.Time.Add(_timeFrameSpan);
            }
            else
            {
                _barEndIndex = barIndex + 1;
                _barEndTime  = _marketSeries.OpenTime[barIndex].Add(_marketSeriesTimeFrameSpan);
            }

            _lastBar.High  = _marketSeries.High.Maximum(_barStartIndex, barIndex);
            _lastBar.Low   = _marketSeries.Low.Minimum(_barStartIndex, barIndex);
            _lastBar.Close = _marketSeries.Close[barIndex];

            Insert(_lastBar);
        }
Esempio n. 2
0
        public void OnTick()
        {
            var price = _symbol.Bid;

            if (price == _previousBidPrice)
            {
                return;
            }

            _previousBidPrice = price;

            if (double.IsNaN(Open.LastValue))
            {
                Insert(0, price, price, price, price, 0, Algo.Server.TimeInUtc);
            }

            var range = Math.Abs(this.GetBarRange(Index, true));

            if (range >= _size && (Index == 0 || this.GetBarType(Index) == this.GetBarType(Index - 1)) || range >= _size * 2)
            {
                var bar = new OhlcBar
                {
                    Index  = Index + 1,
                    Open   = Close[Index],
                    High   = Close[Index],
                    Low    = Close[Index],
                    Close  = Close[Index],
                    Volume = 0,
                    Time   = Algo.Server.TimeInUtc
                };

                Insert(bar);

                OnBar?.Invoke(this, bar, this.GetBar(Index - 1));
            }

            Insert(Index, TickVolume.LastValue + 1, SeriesType.TickVolume);

            Insert(Index, price, SeriesType.Close);

            if (price > High[Index])
            {
                Insert(Index, price, SeriesType.High);
            }

            if (price < Low[Index])
            {
                Insert(Index, price, SeriesType.Low);
            }
        }
Esempio n. 3
0
 public void Insert(OhlcBar bar)
 {
     Insert(bar.Index, bar.Open, bar.High, bar.Low, bar.Close, bar.Volume, bar.Time);
 }