예제 #1
0
        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);
        }
예제 #2
0
파일: FdkLevel2.cs 프로젝트: ifzz/FDK
		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;
		}