/// <summary> /// Merges the marked data into candle stream. /// </summary> /// <param name="marketDelta">Market delta stream data.</param> public void MergeDelta(MarketSummaryProvider marketDelta) { if (marketDelta != null) { _lock.EnterWriteLock(); try { var reference = TimeCalculator.GetReference(marketDelta.Sample, _spanMinutes); var candle = _candles.LastOrDefault(x => x.Sample == reference); if (candle == null) { if ((candle = _candles.LastOrDefault()) != null) { do { _candles.Add(candle = new MarketCandle { Sample = candle.Sample.AddMinutes(_spanMinutes) }); }while (candle.Sample < reference); } else { _candles.Add(candle = new MarketCandle { Sample = reference }); } candle.Open = marketDelta.Last.Value; candle.Low = marketDelta.Last.Value; candle.High = marketDelta.Last.Value; candle.Close = marketDelta.Last.Value; } if (marketDelta.Last != null) { if (candle.Low > marketDelta.Last) { candle.Low = marketDelta.Last.Value; } if (candle.High < marketDelta.Last) { candle.High = marketDelta.Last.Value; } candle.Close = marketDelta.Last.Value; } while (_candles.Count > _seriesLimit / _spanMinutes) { _candles.RemoveAt(0); } } finally { _lock.ExitWriteLock(); } } }
/// <summary> /// Updates the received changes in market data. /// </summary> /// <param name="marketDelta">Market delta stream data.</param> public void UpdateMarketDelta(MarketSummaryProvider marketDelta) { if (marketDelta != null && Name == marketDelta.MarketName) { _candles1Mins.MergeDelta(marketDelta); _candles5Mins.MergeDelta(marketDelta); _candles15Mins.MergeDelta(marketDelta); _candles30Mins.MergeDelta(marketDelta); var candle1min = _candles1Mins.Last; Console.WriteLine($"[{candle1min.Sample}] Candle: 1 Min {candle1min.Open} - [{candle1min.Low} - {candle1min.High}] - {candle1min.Close}"); var candle5min = _candles5Mins.Last; Console.WriteLine($"[{candle5min.Sample}] Candle: 5 Min {candle5min.Open} - [{candle5min.Low} - {candle5min.High}] - {candle5min.Close}"); var candle15min = _candles15Mins.Last; Console.WriteLine($"[{candle15min.Sample}] Candle: 15 Min {candle15min.Open} - [{candle15min.Low} - {candle15min.High}] - {candle15min.Close}"); var candle30min = _candles30Mins.Last; Console.WriteLine($"[{candle30min.Sample}] Candle: 30 Min {candle30min.Open} - [{candle30min.Low} - {candle30min.High}] - {candle30min.Close}"); } }