/// <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();
            }

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

            return(execMsg);
        }
Exemple #2
0
        public virtual byte[] Serialize(IEnumerable <TData> data, IMarketDataMetaInfo metaInfo)
        {
            return(CultureInfo.InvariantCulture.DoInCulture(() =>
            {
                var sb = new StringBuilder();

                var appendLine = metaInfo.Count > 0;

                foreach (var item in data)
                {
                    if (appendLine)
                    {
                        sb.AppendLine();
                    }
                    else
                    {
                        appendLine = true;
                    }

                    sb.Append(_format.PutEx(item));
                }

                return _encoding.GetBytes(sb.ToString());
            }));
        }
Exemple #3
0
        /// <summary>
        /// Write data to the specified writer.
        /// </summary>
        /// <param name="writer">CSV writer.</param>
        /// <param name="data">Data.</param>
        /// <param name="metaInfo">Meta-information on data for one day.</param>
        protected override void Write(CsvFileWriter writer, ExecutionMessage data, IMarketDataMetaInfo metaInfo)
        {
            var row = new[]
            {
                data.ServerTime.WriteTimeMls(),
                data.ServerTime.ToString("zzz"),
                data.TransactionId.ToString(),
                data.OriginalTransactionId.ToString(),
                data.OrderId.ToString(),
                data.OrderStringId,
                data.OrderBoardId,
                data.UserOrderId,
                data.OrderPrice.ToString(),
                data.OrderVolume.ToString(),
                data.Balance.ToString(),
                data.VisibleVolume.ToString(),
                data.Side.ToString(),
                data.OriginSide.ToString(),
                data.OrderState.ToString(),
                data.OrderType.ToString(),
                data.TimeInForce.ToString(),
                data.TradeId.ToString(),
                data.TradeStringId,
                data.TradePrice.ToString(),
                data.TradeVolume.ToString(),
                data.PortfolioName,
                data.ClientCode,
                data.BrokerCode,
                data.DepoName,
                data.IsSystem.ToString(),
                data.HasOrderInfo.ToString(),
                data.HasTradeInfo.ToString(),
                data.Commission.ToString(),
                data.Currency.ToString(),
                data.Comment,
                data.SystemComment,
                data.DerivedOrderId.ToString(),
                data.DerivedOrderStringId,
                data.IsUpTick.ToString(),
                data.IsCancelled.ToString(),
                data.OpenInterest.ToString(),
                data.PnL.ToString(),
                data.Position.ToString(),
                data.Slippage.ToString(),
                data.TradeStatus.ToString(),
                data.OrderStatus.ToString(),
                data.Latency?.Ticks.ToString(),
                data.Error?.Message,
                data.ExpiryDate?.WriteDate(),
                data.ExpiryDate?.WriteTimeMls(),
                data.ExpiryDate?.ToString("zzz"),
                data.LocalTime.WriteTimeMls(),
                data.LocalTime.ToString("zzz"),
            };

            writer.WriteRow(row);

            metaInfo.LastTime = data.ServerTime.UtcDateTime;
        }
Exemple #4
0
        public byte[] Serialize(IEnumerable <TData> data, IMarketDataMetaInfo metaInfo)
        {
            var writer = new BitArrayWriter(DataSize * data.Count() * 2);

            OnSave(writer, data, (TMetaInfo)metaInfo);

            return(writer.GetBytes());
        }
        /// <inheritdoc />
        protected override NewsMessage Read(FastCsvReader reader, IMarketDataMetaInfo metaInfo)
        {
            var news = new NewsMessage
            {
                ServerTime = reader.ReadTime(metaInfo.Date),
                Headline   = reader.ReadString(),
                Source     = reader.ReadString(),
                Url        = reader.ReadString(),
                Id         = reader.ReadString(),
                BoardCode  = reader.ReadString(),
            };

            var secCode = reader.ReadString();

            if (!secCode.IsEmpty())
            {
                news.SecurityId = new SecurityId {
                    SecurityCode = secCode
                }
            }
            ;

            if ((reader.ColumnCurr + 1) < reader.ColumnCount)
            {
                news.Priority = reader.ReadNullableEnum <NewsPriorities>();
            }

            if ((reader.ColumnCurr + 1) < reader.ColumnCount)
            {
                news.Language = reader.ReadString();
            }

            if ((reader.ColumnCurr + 1) < reader.ColumnCount)
            {
                var boardCode = reader.ReadString();

                if (news.SecurityId != null)
                {
                    var secId = news.SecurityId.Value;
                    secId.BoardCode = boardCode;
                    news.SecurityId = secId;
                }
            }

            if ((reader.ColumnCurr + 1) < reader.ColumnCount)
            {
                news.ExpiryDate = reader.ReadString().TryToDateTimeOffset(_expiryFormat);
            }

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

            return(news);
        }
    }
Exemple #6
0
        public void Serialize(Stream stream, IEnumerable <TData> data, IMarketDataMetaInfo metaInfo)
        {
            //var temp = new MemoryStream { Capacity = DataSize * data.Count() * 2 };

            using (var writer = new BitArrayWriter(stream))
                OnSave(writer, data, (TMetaInfo)metaInfo);

            //return stream.To<byte[]>();
        }
Exemple #7
0
        public IEnumerable <TData> Deserialize(Stream stream, IMarketDataMetaInfo metaInfo)
        {
            var data = new MemoryStream();

            stream.CopyTo(data);
            stream.Dispose();

            return(new SimpleEnumerable <TData>(() => new MarketDataEnumerator(this, new BitArrayReader(data), (TMetaInfo)metaInfo)));
        }
        /// <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.ReadString().To <TPlusLimits?>(),
            };

            foreach (var type in _types)
            {
                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;
                }

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

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

                    break;
                }
                }
            }

            return(posMsg);
        }
Exemple #9
0
        public IEnumerableEx <TData> Deserialize(Stream stream, IMarketDataMetaInfo metaInfo)
        {
            // TODO сделать BitArrayReader работающим с потоком
            var data = stream.ReadBuffer();

            stream.Dispose();

            return(new SimpleEnumerable <TData>(() => new MarketDataEnumerator(this, new BitArrayReader(data), (TMetaInfo)metaInfo))
                   .ToEx(metaInfo.Count));
        }
 /// <summary>
 /// Read data from the specified reader.
 /// </summary>
 /// <param name="reader">CSV reader.</param>
 /// <param name="metaInfo">Meta-information on data for one day.</param>
 /// <returns>Data.</returns>
 protected override NullableTimeQuoteChange Read(FastCsvReader reader, IMarketDataMetaInfo metaInfo)
 {
     return(new NullableTimeQuoteChange
     {
         ServerTime = reader.ReadTime(metaInfo.Date),
         Price = reader.ReadNullableDecimal(),
         Volume = reader.ReadDecimal(),
         Side = reader.ReadEnum <Sides>()
     });
 }
Exemple #11
0
        public byte[] Serialize(IEnumerable <TData> data, IMarketDataMetaInfo metaInfo)
        {
            var stream = new MemoryStream {
                Capacity = DataSize * data.Count() * 2
            };

            using (var writer = new BitArrayWriter(stream))
                OnSave(writer, data, (TMetaInfo)metaInfo);

            return(stream.To <byte[]>());
        }
Exemple #12
0
        /// <inheritdoc />
        protected override BoardStateMessage Read(FastCsvReader reader, IMarketDataMetaInfo metaInfo)
        {
            var state = new BoardStateMessage
            {
                ServerTime = reader.ReadTime(metaInfo.Date),
                BoardCode  = reader.ReadString(),
                State      = reader.ReadEnum <SessionStates>()
            };

            return(state);
        }
Exemple #13
0
        /// <inheritdoc />
        protected override void Write(CsvFileWriter writer, BoardStateMessage data, IMarketDataMetaInfo metaInfo)
        {
            writer.WriteRow(new[]
            {
                data.ServerTime.WriteTimeMls(),
                data.ServerTime.ToString("zzz"),
                data.BoardCode,
                ((int)data.State).To <string>(),
            });

            metaInfo.LastTime = data.ServerTime.UtcDateTime;
        }
        /// <summary>
        /// Write data to the specified writer.
        /// </summary>
        /// <param name="writer">CSV writer.</param>
        /// <param name="data">Data.</param>
        /// <param name="metaInfo">Meta-information on data for one day.</param>
        protected override void Write(CsvFileWriter writer, TimeQuoteChange data, IMarketDataMetaInfo metaInfo)
        {
            writer.WriteRow(new[]
            {
                data.ServerTime.WriteTimeMls(),
                data.ServerTime.ToString("zzz"),
                data.Price.ToString(),
                data.Volume.ToString(),
                data.Side.ToString()
            });

            metaInfo.LastTime = data.ServerTime.UtcDateTime;
        }
 /// <summary>
 /// Write data to the specified writer.
 /// </summary>
 /// <param name="writer">CSV writer.</param>
 /// <param name="data">Data.</param>
 /// <param name="metaInfo">Meta-information on data for one day.</param>
 protected override void Write(CsvFileWriter writer, TCandleMessage data, IMarketDataMetaInfo metaInfo)
 {
     writer.WriteRow(new[]
     {
         data.OpenTime.WriteTimeMls(),
         data.OpenTime.ToString("zzz"),
         data.OpenPrice.ToString(),
         data.HighPrice.ToString(),
         data.LowPrice.ToString(),
         data.ClosePrice.ToString(),
         data.TotalVolume.ToString()
     });
 }
Exemple #16
0
        public virtual IEnumerableEx <TData> Deserialize(Stream stream, IMarketDataMetaInfo metaInfo)
        {
            // TODO (переделать в будущем)
            var copy = new MemoryStream();

            stream.CopyTo(copy);
            copy.Position = 0;

            stream.Dispose();

            return(new SimpleEnumerable <TData>(() =>
                                                new CsvReader(copy, _encoding, SecurityId, metaInfo.Date.Date, _executionType, _members))
                   .ToEx(metaInfo.Count));
        }
Exemple #17
0
            public override byte[] Serialize(IEnumerable <QuoteChangeMessage> data, IMarketDataMetaInfo metaInfo)
            {
                var list = data.SelectMany(d =>
                {
                    var items = new List <TimeQuoteChange>();

                    items.AddRange(d.Bids.OrderBy(q => q.Price).Select(q => new TimeQuoteChange(q, d)));
                    items.AddRange(d.Asks.OrderBy(q => q.Price).Select(q => new TimeQuoteChange(q, d)));

                    return(items);
                });

                return(_quoteSerializer.Serialize(list, metaInfo));
            }
Exemple #18
0
 /// <inheritdoc />
 protected override ExecutionMessage Read(FastCsvReader reader, IMarketDataMetaInfo metaInfo)
 {
     return(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(),
     });
 }
 /// <summary>
 /// Read data from the specified reader.
 /// </summary>
 /// <param name="reader">CSV reader.</param>
 /// <param name="metaInfo">Meta-information on data for one day.</param>
 /// <returns>Data.</returns>
 protected override TCandleMessage Read(FastCsvReader reader, IMarketDataMetaInfo metaInfo)
 {
     return(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
     });
 }
        /// <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;
            }

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

                quote.Quote = qq;

                if ((reader.ColumnCurr + 1) < reader.ColumnCount)
                {
                    qq.StartPosition = reader.ReadNullableInt();
                    qq.EndPosition   = reader.ReadNullableInt();
                    qq.Action        = reader.ReadNullableEnum <QuoteChangeActions>();
                }
            }

            return(quote);
        }
        /// <summary>
        /// Создать <see cref="DataStorageReader{TData}"/>.
        /// </summary>
        /// <param name="stream">Поток.</param>
        /// <param name="metaInfo">Мета-информация о данных за один день.</param>
        /// <param name="serializer">Сериализатор.</param>
        public DataStorageReader(Stream stream, IMarketDataMetaInfo metaInfo, IMarketDataSerializer <TData> serializer)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }

            if (serializer == null)
            {
                throw new ArgumentNullException("serializer");
            }

            _stream     = stream;
            _metaInfo   = metaInfo;
            _serializer = serializer;
        }
        /// <summary>
        /// Write data to the specified writer.
        /// </summary>
        /// <param name="writer">CSV writer.</param>
        /// <param name="data">Data.</param>
        /// <param name="metaInfo">Meta-information on data for one day.</param>
        protected override void Write(CsvFileWriter writer, NewsMessage data, IMarketDataMetaInfo metaInfo)
        {
            writer.WriteRow(new[]
            {
                data.ServerTime.WriteTimeMls(),
                data.ServerTime.ToString("zzz"),
                data.Headline,
                data.Source,
                data.Url?.ToString(),
                data.Id,
                data.BoardCode,
                data.SecurityId?.SecurityCode
            });

            metaInfo.LastTime = data.ServerTime.UtcDateTime;
        }
Exemple #23
0
        /// <inheritdoc />
        protected override ExecutionMessage Read(FastCsvReader reader, IMarketDataMetaInfo metaInfo)
        {
            var ol = new ExecutionMessage
            {
                SecurityId    = SecurityId,
                ExecutionType = ExecutionTypes.OrderLog,
                ServerTime    = reader.ReadTime(metaInfo.Date),
                TransactionId = reader.ReadLong(),
                OrderId       = reader.ReadNullableLong(),
                OrderPrice    = reader.ReadDecimal(),
                OrderVolume   = reader.ReadDecimal(),
                Side          = reader.ReadEnum <Sides>(),
                OrderState    = reader.ReadEnum <OrderStates>(),
                TimeInForce   = reader.ReadNullableEnum <TimeInForce>(),
                TradeId       = reader.ReadNullableLong(),
                TradePrice    = reader.ReadNullableDecimal(),
                PortfolioName = reader.ReadString(),
                IsSystem      = reader.ReadNullableBool(),
            };

            if ((reader.ColumnCurr + 1) < reader.ColumnCount)
            {
                ol.Balance = reader.ReadNullableDecimal();
            }

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

            if ((reader.ColumnCurr + 1) < reader.ColumnCount)
            {
                ol.OrderStringId = reader.ReadString();
                ol.TradeStringId = reader.ReadString();

                ol.OrderBuyId  = reader.ReadNullableLong();
                ol.OrderSellId = reader.ReadNullableLong();

                ol.IsUpTick     = reader.ReadNullableBool();
                ol.Yield        = reader.ReadNullableDecimal();
                ol.TradeStatus  = reader.ReadNullableInt();
                ol.OpenInterest = reader.ReadNullableDecimal();
                ol.OriginSide   = reader.ReadNullableEnum <Sides>();
            }

            return(ol);
        }
Exemple #24
0
        /// <inheritdoc />
        protected override NullableTimeQuoteChange Read(FastCsvReader reader, IMarketDataMetaInfo metaInfo)
        {
            var quote = new NullableTimeQuoteChange
            {
                ServerTime = reader.ReadTime(metaInfo.Date),
                Price      = reader.ReadNullableDecimal(),
                Volume     = reader.ReadDecimal(),
                Side       = reader.ReadEnum <Sides>()
            };

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

            return(quote);
        }
        /// <summary>
        /// Write data to the specified writer.
        /// </summary>
        /// <param name="writer">CSV writer.</param>
        /// <param name="data">Data.</param>
        /// <param name="metaInfo">Meta-information on data for one day.</param>
        protected override void Write(CsvFileWriter writer, ExecutionMessage data, IMarketDataMetaInfo metaInfo)
        {
            writer.WriteRow(new[]
            {
                data.ServerTime.WriteTimeMls(),
                data.ServerTime.ToString("zzz"),
                data.TradeId.ToString(),
                data.TradePrice.ToString(),
                data.TradeVolume.ToString(),
                data.OriginSide.ToString(),
                data.OpenInterest.ToString(),
                data.IsSystem.ToString()
            });

            metaInfo.LastTime = data.ServerTime.UtcDateTime;
            metaInfo.LastId   = data.GetTradeId();
        }
Exemple #26
0
        /// <inheritdoc />
        protected override void Write(CsvFileWriter writer, TCandleMessage data, IMarketDataMetaInfo metaInfo)
        {
            if (data.State == CandleStates.Active)
            {
                throw new ArgumentException(LocalizedStrings.CandleActiveNotSupport.Put(data), nameof(data));
            }

            writer.WriteRow(new[]
            {
                data.OpenTime.WriteTimeMls(),
                data.OpenTime.ToString("zzz"),
                data.OpenPrice.ToString(),
                data.HighPrice.ToString(),
                data.LowPrice.ToString(),
                data.ClosePrice.ToString(),
                data.TotalVolume.ToString()
            }.Concat(data.BuildFrom.ToCsv()));
        }
        /// <summary>
        /// Cast data into stream.
        /// </summary>
        /// <param name="stream">Data stream.</param>
        /// <param name="data">Data.</param>
        /// <param name="metaInfo">Meta-information on data for one day.</param>
        public virtual void Serialize(Stream stream, IEnumerable <TData> data, IMarketDataMetaInfo metaInfo)
        {
            CultureInfo.InvariantCulture.DoInCulture(() =>
            {
                var writer = new CsvFileWriter(stream, Encoding);

                try
                {
                    foreach (var item in data)
                    {
                        Write(writer, item, metaInfo);
                    }
                }
                finally
                {
                    writer.Writer.Flush();
                }
            });
        }
        /// <inheritdoc />
        protected override void Write(CsvFileWriter writer, ExecutionMessage data, IMarketDataMetaInfo metaInfo)
        {
            writer.WriteRow(new[]
            {
                data.ServerTime.WriteTimeMls(),
                data.ServerTime.ToString("zzz"),
                data.TradeId.ToString(),
                data.TradePrice.ToString(),
                data.TradeVolume.ToString(),
                data.OriginSide.ToString(),
                data.OpenInterest.ToString(),
                data.IsSystem.ToString(),
                data.IsUpTick.ToString(),
                data.TradeStringId,
                data.Currency.ToString(),
            }.Concat(data.BuildFrom.ToCsv()));

            metaInfo.LastTime = data.ServerTime.UtcDateTime;
            metaInfo.LastId   = data.TradeId;
        }
Exemple #29
0
        /// <inheritdoc />
        protected override void Write(CsvFileWriter writer, NewsMessage data, IMarketDataMetaInfo metaInfo)
        {
            writer.WriteRow(new[]
            {
                data.ServerTime.WriteTimeMls(),
                data.ServerTime.ToString("zzz"),
                data.Headline,
                data.Source,
                data.Url,
                data.Id,
                data.BoardCode,
                data.SecurityId?.SecurityCode,
                data.Priority?.To <string>(),
                data.Language,
                data.SecurityId?.BoardCode,
                data.ExpiryDate?.ToString(_expiryFormat),
            });

            metaInfo.LastTime = data.ServerTime.UtcDateTime;
        }
Exemple #30
0
 /// <summary>
 /// Read data from the specified reader.
 /// </summary>
 /// <param name="reader">CSV reader.</param>
 /// <param name="metaInfo">Meta-information on data for one day.</param>
 /// <returns>Data.</returns>
 protected override ExecutionMessage Read(FastCsvReader reader, IMarketDataMetaInfo metaInfo)
 {
     return(new ExecutionMessage
     {
         SecurityId = SecurityId,
         ExecutionType = ExecutionTypes.OrderLog,
         ServerTime = reader.ReadTime(metaInfo.Date),
         TransactionId = reader.ReadLong(),
         OrderId = reader.ReadLong(),
         OrderPrice = reader.ReadDecimal(),
         OrderVolume = reader.ReadDecimal(),
         Side = reader.ReadEnum <Sides>(),
         OrderState = reader.ReadEnum <OrderStates>(),
         TimeInForce = reader.ReadNullableEnum <TimeInForce>(),
         TradeId = reader.ReadNullableLong(),
         TradePrice = reader.ReadNullableDecimal(),
         PortfolioName = reader.ReadString(),
         IsSystem = reader.ReadNullableBool(),
     });
 }