diff --git a/QuantConnect.CoinbaseBrokerage/CoinbaseBrokerage.Messaging.cs b/QuantConnect.CoinbaseBrokerage/CoinbaseBrokerage.Messaging.cs index 01c345d..73548b8 100644 --- a/QuantConnect.CoinbaseBrokerage/CoinbaseBrokerage.Messaging.cs +++ b/QuantConnect.CoinbaseBrokerage/CoinbaseBrokerage.Messaging.cs @@ -273,6 +273,11 @@ private void Level2Snapshot(CoinbaseLevel2Event snapshotData) orderBook.BestBidAskUpdated += OnBestBidAskUpdated; + if (orderBook.BestBidPrice == 0 && orderBook.BestAskPrice == 0) + { + // nothing to emit, can happen with illiquid assets + return; + } EmitQuoteTick(orderBook.Symbol, orderBook.BestBidPrice, orderBook.BestBidSize, orderBook.BestAskPrice, orderBook.BestAskSize); } } @@ -325,7 +330,10 @@ private void Level2Update(CoinbaseLevel2Event updateData) private void EmitTradeTick(CoinbaseMarketTradesEvent tradeUpdates) { - foreach (var trade in tradeUpdates.Trades) + // coinbase sends older data, as an update, seems they send the last 100 trades, so let's filter it out + // also order by time since they return in descending time and we want ascending + var dataFrontier = DateTime.UtcNow - TimeSpan.FromMinutes(5); + foreach (var trade in tradeUpdates.Trades.Where(x => x.Time.UtcDateTime > dataFrontier).OrderBy(x => x.Time)) { var symbol = _symbolMapper.GetLeanSymbol(trade.ProductId, SecurityType.Crypto, MarketName);