Beispiel #1
0
        /// <inheritdoc />
        protected override ExecutionMessage Read(FastCsvReader reader, IMarketDataMetaInfo metaInfo)
        {
            var execMsg = new ExecutionMessage
            {
                SecurityId    = SecurityId,
                ExecutionType = ExecutionTypes.Tick,
                ServerTime    = reader.ReadTime(metaInfo.Date),
                TradeId       = reader.ReadNullableLong(),
                TradePrice    = reader.ReadNullableDecimal(),
                TradeVolume   = reader.ReadNullableDecimal(),
                OriginSide    = reader.ReadNullableEnum <Sides>(),
                OpenInterest  = reader.ReadNullableDecimal(),
                IsSystem      = reader.ReadNullableBool(),
            };

            if ((reader.ColumnCurr + 1) < reader.ColumnCount)
            {
                execMsg.IsUpTick      = reader.ReadNullableBool();
                execMsg.TradeStringId = reader.ReadString();
                execMsg.Currency      = reader.ReadNullableEnum <CurrencyTypes>();
            }

            if ((reader.ColumnCurr + 1) < reader.ColumnCount)
            {
                execMsg.BuildFrom = reader.ReadBuildFrom();
            }

            return(execMsg);
        }
        /// <inheritdoc />
        protected override TCandleMessage Read(FastCsvReader reader, IMarketDataMetaInfo metaInfo)
        {
            var message = new TCandleMessage
            {
                SecurityId  = SecurityId,
                Arg         = Arg,
                OpenTime    = reader.ReadTime(metaInfo.Date),
                OpenPrice   = reader.ReadDecimal(),
                HighPrice   = reader.ReadDecimal(),
                LowPrice    = reader.ReadDecimal(),
                ClosePrice  = reader.ReadDecimal(),
                TotalVolume = reader.ReadDecimal(),
                State       = CandleStates.Finished
            };

            if ((reader.ColumnCurr + 1) < reader.ColumnCount)
            {
                message.BuildFrom = reader.ReadBuildFrom();
            }

            if ((reader.ColumnCurr + 1) < reader.ColumnCount)
            {
                message.SeqNum = reader.ReadNullableLong() ?? 0L;
            }

            return(message);
        }
Beispiel #3
0
        /// <inheritdoc />
        protected override ExecutionMessage Read(FastCsvReader reader, IMarketDataMetaInfo metaInfo)
        {
            var msg = new ExecutionMessage
            {
                SecurityId            = SecurityId,
                ExecutionType         = ExecutionTypes.Transaction,
                ServerTime            = reader.ReadTime(metaInfo.Date),
                TransactionId         = reader.ReadLong(),
                OriginalTransactionId = reader.ReadLong(),
                OrderId       = reader.ReadNullableLong(),
                OrderStringId = reader.ReadString(),
                OrderBoardId  = reader.ReadString(),
                UserOrderId   = reader.ReadString(),
                OrderPrice    = reader.ReadDecimal(),
                OrderVolume   = reader.ReadNullableDecimal(),
                Balance       = reader.ReadNullableDecimal(),
                VisibleVolume = reader.ReadNullableDecimal(),
                Side          = reader.ReadEnum <Sides>(),
                OriginSide    = reader.ReadNullableEnum <Sides>(),
                OrderState    = reader.ReadNullableEnum <OrderStates>(),
                OrderType     = reader.ReadNullableEnum <OrderTypes>(),
                TimeInForce   = reader.ReadNullableEnum <TimeInForce>(),
                TradeId       = reader.ReadNullableLong(),
                TradeStringId = reader.ReadString(),
                TradePrice    = reader.ReadNullableDecimal(),
                TradeVolume   = reader.ReadNullableDecimal(),
                PortfolioName = reader.ReadString(),
                ClientCode    = reader.ReadString(),
                BrokerCode    = reader.ReadString(),
                DepoName      = reader.ReadString(),
                IsSystem      = reader.ReadNullableBool(),
                HasOrderInfo  = reader.ReadBool(),
                HasTradeInfo  = reader.ReadBool(),
                Commission    = reader.ReadNullableDecimal(),
                Currency      = reader.ReadNullableEnum <CurrencyTypes>(),
                Comment       = reader.ReadString(),
                SystemComment = reader.ReadString(),
                //DerivedOrderId = reader.ReadNullableLong(),
                //DerivedOrderStringId = reader.ReadString(),
            };

            reader.ReadNullableLong();
            reader.ReadString();

            msg.IsUpTick = reader.ReadNullableBool();
            /*msg.IsCancellation = */ reader.Skip();
            msg.OpenInterest = reader.ReadNullableDecimal();
            msg.PnL          = reader.ReadNullableDecimal();
            msg.Position     = reader.ReadNullableDecimal();
            msg.Slippage     = reader.ReadNullableDecimal();
            msg.TradeStatus  = reader.ReadNullableInt();
            msg.OrderStatus  = reader.ReadNullableLong();
            msg.Latency      = reader.ReadNullableLong().To <TimeSpan?>();

            var error = reader.ReadString();

            if (!error.IsEmpty())
            {
                msg.Error = new InvalidOperationException(error);
            }

            var dtStr = reader.ReadString();

            if (dtStr != null)
            {
                msg.ExpiryDate = (dtStr.ToDateTime() + reader.ReadString().ToTimeMls()).ToDateTimeOffset(TimeSpan.Parse(reader.ReadString().Remove("+")));
            }
            else
            {
                reader.Skip(2);
            }

            msg.LocalTime     = reader.ReadTime(metaInfo.Date);
            msg.IsMarketMaker = reader.ReadNullableBool();

            if ((reader.ColumnCurr + 1) < reader.ColumnCount)
            {
                msg.CommissionCurrency = reader.ReadString();
            }

            if ((reader.ColumnCurr + 1) < reader.ColumnCount)
            {
                msg.IsMargin = reader.ReadNullableBool();
                msg.IsManual = reader.ReadNullableBool();
            }

            if ((reader.ColumnCurr + 1) < reader.ColumnCount)
            {
                msg.MinVolume      = reader.ReadNullableDecimal();
                msg.PositionEffect = reader.ReadNullableEnum <OrderPositionEffects>();
                msg.PostOnly       = reader.ReadNullableBool();
                msg.Initiator      = reader.ReadNullableBool();
            }

            if ((reader.ColumnCurr + 1) < reader.ColumnCount)
            {
                msg.SeqNum     = reader.ReadLong();
                msg.StrategyId = reader.ReadString();
            }

            if ((reader.ColumnCurr + 1) < reader.ColumnCount)
            {
                msg.BuildFrom = reader.ReadBuildFrom();
            }

            return(msg);
        }
        /// <inheritdoc />
        protected override Level1ChangeMessage Read(FastCsvReader reader, IMarketDataMetaInfo metaInfo)
        {
            var level1 = new Level1ChangeMessage
            {
                SecurityId = SecurityId,
                ServerTime = reader.ReadTime(metaInfo.Date),
                BuildFrom  = reader.ReadBuildFrom(),
                SeqNum     = reader.ReadNullableLong() ?? 0L,
            };

            reader.Skip(_reserved.Length);

            var count = reader.ReadInt();

            foreach (var pair in _level1Fields.Take(count))
            {
                // backward compatibility
                if (reader.ColumnCurr == reader.ColumnCount)
                {
                    break;
                }

                var field = pair.Key;

                if (pair.Value == typeof(DateTimeOffset))
                {
                    var dtStr = reader.ReadString();

                    if (dtStr != null)
                    {
                        level1.Changes.Add(field, (dtStr.ToDateTime() + reader.ReadString().ToTimeMls()).ToDateTimeOffset(TimeSpan.Parse(reader.ReadString().Remove("+"))));
                    }
                    else
                    {
                        reader.Skip(2);
                    }
                }
                else if (pair.Value == typeof(int))
                {
                    var value = reader.ReadNullableInt();

                    if (value != null)
                    {
                        level1.Changes.Add(field, value.Value);
                    }
                }
                else if (pair.Value == typeof(long))
                {
                    var value = reader.ReadNullableLong();

                    if (value != null)
                    {
                        level1.Changes.Add(field, value.Value);
                    }
                }
                else if (pair.Value == typeof(bool))
                {
                    var value = reader.ReadNullableBool();

                    if (value != null)
                    {
                        level1.Changes.Add(field, value.Value);
                    }
                }
                else if (pair.Value == typeof(SecurityStates))
                {
                    var value = reader.ReadNullableEnum <SecurityStates>();

                    if (value != null)
                    {
                        level1.Changes.Add(field, value.Value);
                    }
                }
                else if (pair.Value == typeof(Sides))
                {
                    var value = reader.ReadNullableEnum <Sides>();

                    if (value != null)
                    {
                        level1.Changes.Add(field, value.Value);
                    }
                }
                else
                {
                    var value = reader.ReadNullableDecimal();

                    if (value != null)
                    {
                        level1.Changes.Add(field, value.Value);
                    }
                }
            }

            return(level1);
        }
        /// <inheritdoc />
        protected override PositionChangeMessage Read(FastCsvReader reader, IMarketDataMetaInfo metaInfo)
        {
            var posMsg = new PositionChangeMessage
            {
                SecurityId    = SecurityId,
                ServerTime    = reader.ReadTime(metaInfo.Date),
                PortfolioName = reader.ReadString(),
                ClientCode    = reader.ReadString(),
                DepoName      = reader.ReadString(),
                LimitType     = reader.ReadNullableEnum <TPlusLimits>(),
                Description   = reader.ReadString(),
                StrategyId    = reader.ReadString(),
                Side          = reader.ReadNullableEnum <Sides>(),
                BuildFrom     = reader.ReadBuildFrom(),
            };

            reader.Skip(_reserved.Length);

            var count = reader.ReadInt();

            foreach (var type in _types.Take(count))
            {
                switch (type)
                {
                case PositionChangeTypes.Currency:
                {
                    var currency = reader.ReadNullableEnum <CurrencyTypes>();

                    if (currency != null)
                    {
                        posMsg.Changes.Add(type, currency);
                    }

                    break;
                }

                case PositionChangeTypes.State:
                {
                    var state = reader.ReadNullableEnum <PortfolioStates>();

                    if (state != null)
                    {
                        posMsg.Changes.Add(type, state);
                    }

                    break;
                }

                case PositionChangeTypes.ExpirationDate:
                {
                    var dtStr = reader.ReadString();

                    if (dtStr != null)
                    {
                        posMsg.Changes.Add(type, (dtStr.ToDateTime() + reader.ReadString().ToTimeMls()).ToDateTimeOffset(TimeSpan.Parse(reader.ReadString().Remove("+"))));
                    }
                    else
                    {
                        reader.Skip(2);
                    }

                    break;
                }

                default:
                {
                    var value = reader.ReadNullableDecimal();

                    if (value != null)
                    {
                        posMsg.Changes.Add(type, value);
                    }

                    break;
                }
                }
            }

            return(posMsg);
        }
        /// <inheritdoc />
        protected override NullableTimeQuoteChange Read(FastCsvReader reader, IMarketDataMetaInfo metaInfo)
        {
            var quote = new NullableTimeQuoteChange
            {
                ServerTime = reader.ReadTime(metaInfo.Date),
            };

            var price  = reader.ReadNullableDecimal();
            var volume = reader.ReadNullableDecimal();

            quote.Side = reader.ReadEnum <Sides>();

            int?ordersCount = null;

            if ((reader.ColumnCurr + 1) < reader.ColumnCount)
            {
                ordersCount = reader.ReadNullableInt();
            }

            QuoteConditions condition = default;

            if ((reader.ColumnCurr + 1) < reader.ColumnCount)
            {
                condition = reader.ReadNullableEnum <QuoteConditions>() ?? default;
            }

            QuoteChange?qq = null;

            if (price != null)
            {
                qq = quote.Quote = new QuoteChange
                {
                    Price       = price.Value,
                    Volume      = volume ?? 0,
                    OrdersCount = ordersCount,
                    Condition   = condition,
                };
            }

            if ((reader.ColumnCurr + 1) < reader.ColumnCount)
            {
                var startPosition = reader.ReadNullableInt();
                var endPosition   = reader.ReadNullableInt();
                var action        = reader.ReadNullableEnum <QuoteChangeActions>();

                if (qq != null)
                {
                    var temp = qq.Value;

                    temp.StartPosition = startPosition;
                    temp.EndPosition   = endPosition;
                    temp.Action        = action;

                    quote.Quote = temp;
                }
            }

            if ((reader.ColumnCurr + 1) < reader.ColumnCount)
            {
                quote.State     = reader.ReadNullableEnum <QuoteChangeStates>();
                quote.SeqNum    = reader.ReadNullableLong();
                quote.BuildFrom = reader.ReadBuildFrom();
            }

            return(quote);
        }