public static decimal ReadPriceEx(this BitArrayReader reader, BinaryMetaInfo info) { if (info.Version < MarketDataVersions.Version41) { var prevPrice = info.FirstPrice; return(info.FirstPrice = reader.ReadPrice(ref prevPrice, info)); } else { if (reader.Read()) { var prevPrice = info.FirstPrice; return(info.FirstPrice = reader.ReadPrice(ref prevPrice, info)); } else { return(info.FirstFractionalPrice = reader.ReadDecimal(info.FirstFractionalPrice)); } } }
private static QuoteChange[] DeserializeQuotes(BitArrayReader reader, QuoteMetaInfo metaInfo, bool useLong, bool nonAdjustPrice) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } if (metaInfo == null) { throw new ArgumentNullException(nameof(metaInfo)); } var deltaCount = reader.ReadInt(); if (deltaCount == 0) { return(ArrayHelper.Empty <QuoteChange>()); } var quotes = new QuoteChange[deltaCount]; for (var i = 0; i < deltaCount; i++) { var prevPrice = metaInfo.FirstPrice; var price = reader.ReadPrice(ref prevPrice, metaInfo, useLong, nonAdjustPrice); metaInfo.FirstPrice = prevPrice; var volume = reader.ReadVolume(metaInfo); var ordersCount = metaInfo.Version >= MarketDataVersions.Version56 ? reader.ReadNullableInt() : null; var condition = metaInfo.Version >= MarketDataVersions.Version57 ? reader.Read() ? (QuoteConditions)reader.ReadInt() : default : default; quotes[i] = new QuoteChange(price, volume, ordersCount, condition); } return(quotes); }
private static IEnumerable <QuoteChange> DeserializeQuotes(BitArrayReader reader, QuoteMetaInfo metaInfo, Sides side) { if (reader == null) { throw new ArgumentNullException("reader"); } if (metaInfo == null) { throw new ArgumentNullException("metaInfo"); } var list = new List <QuoteChange>(); var deltaCount = reader.ReadInt(); if (deltaCount == 0) { return(list); } var prevPrice = metaInfo.FirstPrice; for (var i = 0; i < deltaCount; i++) { metaInfo.FirstPrice = reader.ReadPrice(metaInfo.FirstPrice, metaInfo); var volume = reader.ReadVolume(metaInfo); list.Add(new QuoteChange(side, metaInfo.FirstPrice, volume)); } metaInfo.FirstPrice = prevPrice; return(list); }
private static QuoteChange[] DeserializeQuotes(BitArrayReader reader, QuoteMetaInfo metaInfo, bool useLong, bool nonAdjustPrice) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } if (metaInfo == null) { throw new ArgumentNullException(nameof(metaInfo)); } var count = reader.ReadInt(); if (count == 0) { return(ArrayHelper.Empty <QuoteChange>()); } var is56 = metaInfo.Version >= MarketDataVersions.Version56; var is57 = metaInfo.Version >= MarketDataVersions.Version57; var is58 = metaInfo.Version >= MarketDataVersions.Version58; var quotes = new QuoteChange[count]; for (var i = 0; i < count; i++) { var prevPrice = metaInfo.FirstPrice; var price = reader.ReadPrice(ref prevPrice, metaInfo, useLong, nonAdjustPrice); metaInfo.FirstPrice = prevPrice; var volume = reader.ReadVolume(metaInfo); var ordersCount = is56 ? reader.ReadNullableInt() : null; var condition = is57 ? (QuoteConditions)(reader.ReadNullableInt() ?? 0) : default; var quote = new QuoteChange(price, volume, ordersCount, condition); if (is58) { if (reader.Read()) { quote.Action = (QuoteChangeActions)reader.ReadInt(); } if (reader.Read()) { quote.StartPosition = reader.ReadInt(); } if (reader.Read()) { quote.EndPosition = reader.ReadInt(); } } quotes[i] = quote; } return(quotes); }