private TimeFrameCandle GetCandle(ExecutionMessage tick) { var time = tick.ServerTime; var price = tick.TradePrice.Value; if (_candle == null || time >= _candle.CloseTime) { //var t = TimeframeSegmentDataSeries.GetTimeframePeriod(time.DateTime, _timeframe); var tf = TimeSpan.FromMinutes(_timeframe); var bounds = tf.GetCandleBounds(time, _security.Board); _candle = new TimeFrameCandle { TimeFrame = tf, OpenTime = bounds.Min, CloseTime = bounds.Max, }; _volumeProfile = new VolumeProfile(); _candle.OpenPrice = _candle.HighPrice = _candle.LowPrice = _candle.ClosePrice = price; _volumeProfile.Update(new TickCandleBuilderSourceValue(_security, tick)); _allCandles.Add(_candle); return _candle; } if (time < _candle.OpenTime) throw new InvalidOperationException("invalid time"); if (price > _candle.HighPrice) _candle.HighPrice = price; if (price < _candle.LowPrice) _candle.LowPrice = price; _candle.ClosePrice = price; _candle.TotalVolume += tick.Volume.Value; _volumeProfile.Update(new TickCandleBuilderSourceValue(_security, tick)); return _candle; }
private void AppendTick(Security security, ExecutionMessage tick) { var time = tick.ServerTime; var price = tick.TradePrice.Value; if (_candle == null || time >= _candle.CloseTime) { if (_candle != null) { var candle = (TimeFrameCandle)_candle.Clone(); _updatedCandles[candle.OpenTime] = candle; _lastPrice = candle.ClosePrice; } //var t = TimeframeSegmentDataSeries.GetTimeframePeriod(time.DateTime, _timeframe); var tf = TimeSpan.FromMinutes(_timeframe); var bounds = tf.GetCandleBounds(time, _security.Board); _candle = new TimeFrameCandle { TimeFrame = tf, OpenTime = bounds.Min, CloseTime = bounds.Max, }; _volumeProfile = new VolumeProfile(); _candle.PriceLevels = _volumeProfile.PriceLevels; _candle.OpenPrice = _candle.HighPrice = _candle.LowPrice = _candle.ClosePrice = price; _volumeProfile.Update(new TickCandleBuilderSourceValue(security, tick)); } if (time < _candle.OpenTime) throw new InvalidOperationException("invalid time"); if (price > _candle.HighPrice) _candle.HighPrice = price; if (price < _candle.LowPrice) _candle.LowPrice = price; _candle.ClosePrice = price; _candle.TotalVolume += tick.TradeVolume.Value; _volumeProfile.Update(new TickCandleBuilderSourceValue(security, tick)); }