예제 #1
0
        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);
        }
예제 #2
0
        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);
        }