public void SetTrade(TradeData data) { lock (_lockObject) { var key = $"{data.Exchange}_{data.Instrument}"; if (_candleDict.TryGetValue(key, out var candles)) { var lastCandle = candles.Last(); if (ShouldGenerateNextKline(lastCandle, data)) { var kline = new FutureKlineData(lastCandle); kline.Update(data.Price, data.Quantity); candles.Add(kline); SendToAll(candles); } else { lastCandle.Update(data.Price, data.Quantity); } } else { var kline = new FutureKlineData(); kline.Update(data.Price, data.Quantity); _candleDict.Add(key, new List <FutureKlineData> { kline }); SendToAll(_candleDict[key]); } } }
public bool ShouldGenerateNextKline(FutureKlineData lastKline, TradeData newTradeData) { return(true); }