static QuoteLevel2Data[] BuildQuoteMultiLevelData(Quote[] quotesData, int depth) { var itemsToAdd = new List <QuoteLevel2Data>(capacity: quotesData.Length * depth); var prevTime = new DateTime(1970, 1, 1); var indexOrder = 0; foreach (var quote in quotesData) { if (prevTime == quote.CreatingTime) { indexOrder++; } else { indexOrder = 0; prevTime = quote.CreatingTime; } var timeSpan = quote.CreatingTime.Subtract(prevTime).TotalMilliseconds; var maxLength = Math.Max(quote.Asks.Length, quote.Bids.Length); for (var index = 0; index < depth; index++) { var quoteEntryAsk = index < maxLength && index < quote.Asks.Length ? quote.Asks[index] : NullQuote; var quoteEntryBid = index < maxLength && index < quote.Bids.Length ? quote.Bids[index] : NullQuote; if (quoteEntryAsk.Price.Equals(NullQuote.Price) && quoteEntryBid.Price.Equals(NullQuote.Price)) { continue; } var newQuoteL2Data = new QuoteLevel2Data() { AskVolume = quoteEntryAsk.Volume, AsksPrice = quoteEntryAsk.Price, BidVolume = quoteEntryBid.Volume, BidPrice = quoteEntryBid.Price, CreateTime = quote.CreatingTime, IndexOrder = timeSpan + indexOrder / 100.0, Level = index + 1 }; itemsToAdd.Add(newQuoteL2Data); } } QuoteLevel2Data[] quoteLevel2Data = itemsToAdd.ToArray(); return(quoteLevel2Data); }
static QuoteLevel2Data[] BuildQuoteMultiLevelData(Quote[] quotesData, int depth) { var itemsToAdd = new List<QuoteLevel2Data>(capacity: quotesData.Length*depth); var prevTime = new DateTime(1970, 1, 1); var indexOrder = 0; foreach (var quote in quotesData) { if (prevTime == quote.CreatingTime) { indexOrder++; } else { indexOrder = 0; } var timeSpan = quote.CreatingTime.Subtract(prevTime).TotalMilliseconds; var maxLength = Math.Max(quote.Asks.Length, quote.Bids.Length); for (var index = 0; index < depth; index++) { var quoteEntryAsk = index < maxLength && index<quote.Asks.Length ? quote.Asks[index] : NullQuote; var quoteEntryBid = index < maxLength && index < quote.Bids.Length ? quote.Bids[index] : NullQuote; if (quoteEntryAsk.Price.Equals(NullQuote.Price) && quoteEntryBid.Price.Equals(NullQuote.Price)) continue; var newQuoteL2Data = new QuoteLevel2Data() { AskVolume = quoteEntryAsk.Volume, AsksPrice = quoteEntryAsk.Price, BidVolume = quoteEntryBid.Volume, BidPrice = quoteEntryBid.Price, CreateTime = quote.CreatingTime, IndexOrder = timeSpan + indexOrder / 100.0, Level = index+1 }; itemsToAdd.Add(newQuoteL2Data); } } QuoteLevel2Data[] quoteLevel2Data = itemsToAdd.ToArray(); return quoteLevel2Data; }