public override NewsMessage MoveNext(MarketDataEnumerator enumerator) { var reader = enumerator.Reader; var metaInfo = enumerator.MetaInfo; var message = new NewsMessage { Id = reader.Read() ? reader.ReadString() : null, Headline = reader.ReadString(), Story = reader.Read() ? reader.ReadString() : null, Source = reader.Read() ? reader.ReadString() : null, BoardCode = reader.Read() ? reader.ReadString() : null, SecurityId = reader.Read() ? new SecurityId { SecurityCode = reader.ReadString() } : (SecurityId?)null, Url = reader.Read() ? reader.ReadString().To <Uri>() : null, }; var prevTime = metaInfo.FirstTime; message.ServerTime = reader.ReadTime(ref prevTime, true, true, metaInfo.ServerOffset); metaInfo.FirstTime = prevTime; return(message); }
public override NewsMessage MoveNext(MarketDataEnumerator enumerator) { var reader = enumerator.Reader; var metaInfo = enumerator.MetaInfo; var message = new NewsMessage { Id = reader.ReadStringEx(), Headline = reader.ReadString(), Story = reader.ReadStringEx(), Source = reader.ReadStringEx(), BoardCode = reader.ReadStringEx(), SecurityId = reader.Read() ? new SecurityId { SecurityCode = reader.ReadString() } : (SecurityId?)null, Url = reader.ReadStringEx().To <Uri>(), }; var allowDiffOffsets = metaInfo.Version >= MarketDataVersions.Version46; var isTickPrecision = metaInfo.Version >= MarketDataVersions.Version47; var prevTime = metaInfo.FirstTime; var lastOffset = metaInfo.FirstServerOffset; message.ServerTime = reader.ReadTime(ref prevTime, true, true, metaInfo.ServerOffset, allowDiffOffsets, isTickPrecision, ref lastOffset); metaInfo.FirstTime = prevTime; metaInfo.FirstServerOffset = lastOffset; return(message); }
public override BoardStateMessage MoveNext(MarketDataEnumerator enumerator) { var reader = enumerator.Reader; var metaInfo = enumerator.MetaInfo; var message = new BoardStateMessage(); var prevTime = metaInfo.FirstTime; var lastOffset = metaInfo.FirstServerOffset; message.ServerTime = reader.ReadTime(ref prevTime, true, true, metaInfo.ServerOffset, true, true, ref lastOffset); metaInfo.FirstTime = prevTime; metaInfo.FirstServerOffset = lastOffset; message.BoardCode = reader.ReadStringEx(); message.State = (SessionStates)reader.ReadInt(); return(message); }
public override NewsMessage MoveNext(MarketDataEnumerator enumerator) { var reader = enumerator.Reader; var metaInfo = enumerator.MetaInfo; var message = new NewsMessage { Id = reader.ReadStringEx(), Headline = reader.ReadString(), Story = reader.ReadStringEx(), Source = reader.ReadStringEx(), BoardCode = reader.ReadStringEx(), SecurityId = reader.Read() ? new SecurityId { SecurityCode = reader.ReadString() } : (SecurityId?)null, Url = reader.ReadStringEx(), }; var allowDiffOffsets = metaInfo.Version >= MarketDataVersions.Version46; var isTickPrecision = metaInfo.Version >= MarketDataVersions.Version47; var prevTime = metaInfo.FirstTime; var lastOffset = metaInfo.FirstServerOffset; message.ServerTime = reader.ReadTime(ref prevTime, true, true, metaInfo.ServerOffset, allowDiffOffsets, isTickPrecision, ref lastOffset); metaInfo.FirstTime = prevTime; metaInfo.FirstServerOffset = lastOffset; if (metaInfo.Version < MarketDataVersions.Version48) { return(message); } if (reader.Read()) { message.Priority = (NewsPriorities)reader.ReadInt(); } if (metaInfo.Version < MarketDataVersions.Version49) { return(message); } message.Language = reader.ReadStringEx(); if (metaInfo.Version < MarketDataVersions.Version50) { return(message); } message.ExpiryDate = reader.Read() ? reader.ReadLong().To <DateTimeOffset>() : (DateTimeOffset?)null; var secBoard = reader.ReadStringEx(); if (!secBoard.IsEmpty() && message.SecurityId != null) { var secId = message.SecurityId.Value; secId.BoardCode = secBoard; message.SecurityId = secId; } return(message); }
public override ExecutionMessage MoveNext(MarketDataEnumerator enumerator) { var reader = enumerator.Reader; var metaInfo = enumerator.MetaInfo; var allowNonOrdered = metaInfo.Version >= MarketDataVersions.Version48; var isUtc = metaInfo.Version >= MarketDataVersions.Version50; var allowDiffOffsets = metaInfo.Version >= MarketDataVersions.Version54; var isTickPrecision = metaInfo.Version >= MarketDataVersions.Version55; var useLong = metaInfo.Version >= MarketDataVersions.Version56; metaInfo.FirstId += reader.ReadLong(); var volume = metaInfo.Version < MarketDataVersions.Version53 ? reader.ReadVolume(metaInfo) : reader.Read() ? reader.ReadVolume(metaInfo) : (decimal?)null; var price = reader.ReadPriceEx(metaInfo, useLong); var orderDirection = reader.Read() ? (reader.Read() ? Sides.Buy : Sides.Sell) : (Sides?)null; var prevTime = metaInfo.FirstTime; var lastOffset = metaInfo.FirstServerOffset; var serverTime = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, metaInfo.GetTimeZone(isUtc, SecurityId, ExchangeInfoProvider), allowDiffOffsets, isTickPrecision, ref lastOffset); metaInfo.FirstTime = prevTime; metaInfo.FirstServerOffset = lastOffset; var msg = new ExecutionMessage { //LocalTime = metaInfo.FirstTime, ExecutionType = ExecutionTypes.Tick, SecurityId = SecurityId, TradeId = metaInfo.FirstId == 0 ? (long?)null : metaInfo.FirstId, TradeVolume = volume, OriginSide = orderDirection, TradePrice = price, ServerTime = serverTime, }; if (metaInfo.Version < MarketDataVersions.Version40) { return(msg); } if (metaInfo.Version < MarketDataVersions.Version47) { msg.LocalTime = msg.ServerTime - reader.ReadLong().To <TimeSpan>() + metaInfo.LocalOffset; } else { var hasLocalTime = true; if (metaInfo.Version >= MarketDataVersions.Version49) { hasLocalTime = reader.Read(); } if (hasLocalTime) { var prevLocalTime = metaInfo.FirstLocalTime; lastOffset = metaInfo.FirstLocalOffset; var localTime = reader.ReadTime(ref prevLocalTime, allowNonOrdered, isUtc, metaInfo.LocalOffset, allowDiffOffsets, isTickPrecision, ref lastOffset); metaInfo.FirstLocalTime = prevLocalTime; metaInfo.FirstLocalOffset = lastOffset; msg.LocalTime = localTime; } //else // msg.LocalTime = msg.ServerTime; } if (metaInfo.Version < MarketDataVersions.Version42) { return(msg); } msg.IsSystem = metaInfo.Version < MarketDataVersions.Version51 ? reader.Read() : (reader.Read() ? reader.Read() : (bool?)null); if (msg.IsSystem == false) { msg.TradeStatus = metaInfo.Version < MarketDataVersions.Version51 ? reader.ReadInt() : reader.ReadNullableInt(); } if (metaInfo.Version < MarketDataVersions.Version46 || reader.Read()) { msg.OpenInterest = reader.ReadVolume(metaInfo); } if (metaInfo.Version < MarketDataVersions.Version45) { return(msg); } if (reader.Read()) { msg.IsUpTick = reader.Read(); } if (metaInfo.Version >= MarketDataVersions.Version52) { if (reader.Read()) { msg.Currency = (CurrencyTypes)reader.ReadInt(); } } return(msg); }
public override ExecutionMessage MoveNext(MarketDataEnumerator enumerator) { var reader = enumerator.Reader; var metaInfo = enumerator.MetaInfo; var execType = (ExecutionTypes)reader.ReadInt(); var isTrade = execType == ExecutionTypes.Trade; metaInfo.FirstTransactionId += reader.ReadLong(); metaInfo.FirstOriginalTransactionId += reader.ReadLong(); string orderBoardId = null; string orderStringId = null; string tradeStringId = null; if (!isTrade) { if (metaInfo.Version < MarketDataVersions.Version50) { metaInfo.FirstOrderId += reader.ReadLong(); } else { if (reader.Read()) { metaInfo.FirstOrderId += reader.ReadLong(); } else { if (reader.Read()) { orderStringId = reader.ReadString(); } } if (reader.Read()) { orderBoardId = reader.ReadString(); } } } else { if (metaInfo.Version < MarketDataVersions.Version50) { metaInfo.FirstTradeId += reader.ReadLong(); } else { if (reader.Read()) { metaInfo.FirstTradeId += reader.ReadLong(); } else { if (reader.Read()) { tradeStringId = reader.ReadString(); } } } } var side = reader.Read() ? Sides.Buy : Sides.Sell; var price = reader.ReadPriceEx(metaInfo); var volume = (metaInfo.Version < MarketDataVersions.Version57 || reader.Read()) ? reader.ReadVolume(metaInfo) : (decimal?)null; var visibleVolume = (metaInfo.Version < MarketDataVersions.Version54 || reader.Read()) ? reader.ReadVolume(metaInfo) : (decimal?)null; var balance = (metaInfo.Version < MarketDataVersions.Version54 || reader.Read()) ? reader.ReadVolume(metaInfo) : (decimal?)null; var allowNonOrdered = metaInfo.Version >= MarketDataVersions.Version48; var isUtc = metaInfo.Version >= MarketDataVersions.Version51; var allowDiffOffsets = metaInfo.Version >= MarketDataVersions.Version56; var prevTime = metaInfo.FirstTime; var lastOffset = metaInfo.FirstServerOffset; var serverTime = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, metaInfo.GetTimeZone(isUtc, SecurityId), allowDiffOffsets, ref lastOffset); metaInfo.FirstTime = prevTime; metaInfo.FirstServerOffset = lastOffset; var type = reader.ReadInt().To <OrderTypes>(); var state = reader.ReadNullableInt <OrderStates>(); var status = reader.ReadNullableInt <OrderStatus>(); var tradeStatus = metaInfo.Version < MarketDataVersions.Version52 ? reader.ReadInt() : reader.ReadNullableInt <int>(); var timeInForce = metaInfo.Version < MarketDataVersions.Version53 ? reader.ReadInt().To <TimeInForce>() : reader.Read() ? reader.ReadInt().To <TimeInForce>() : (TimeInForce?)null; var isSystem = metaInfo.Version < MarketDataVersions.Version52 ? reader.Read() : (reader.Read() ? reader.Read() : (bool?)null); var expDate = reader.ReadLong(); var commission = ReadCommission(reader, metaInfo); var portfolio = ReadString(reader, metaInfo.Portfolios); var userOrderId = ReadString(reader, metaInfo.StrategyIds); var comment = ReadString(reader, metaInfo.Comments); var error = ReadString(reader, metaInfo.Errors); var msg = new ExecutionMessage { ExecutionType = execType, SecurityId = SecurityId, ServerTime = serverTime, TransactionId = metaInfo.FirstTransactionId, OriginalTransactionId = metaInfo.FirstOriginalTransactionId, Side = side, Volume = volume, VisibleVolume = visibleVolume, Balance = balance, OrderType = type, OrderState = state, OrderStatus = status, TimeInForce = timeInForce, IsSystem = isSystem, ExpiryDate = expDate == 0 ? (DateTimeOffset?)null : expDate.To <DateTimeOffset>(), Commission = commission, PortfolioName = portfolio, UserOrderId = userOrderId, Comment = comment, TradeStatus = tradeStatus, }; if (!isTrade) { if (orderStringId == null) { msg.OrderId = metaInfo.FirstOrderId; } else { msg.OrderStringId = orderStringId; } msg.OrderBoardId = orderBoardId; msg.OrderPrice = price; } else { if (tradeStringId == null) { msg.TradeId = metaInfo.FirstTradeId; } else { msg.TradeStringId = tradeStringId; } msg.TradePrice = price; } if (!error.IsEmpty()) { msg.Error = new InvalidOperationException(error); } if (metaInfo.Version >= MarketDataVersions.Version55) { if (reader.Read()) { msg.Currency = (CurrencyTypes)reader.ReadInt(); } } return(msg); }
public override ExecutionMessage MoveNext(MarketDataEnumerator enumerator) { var reader = enumerator.Reader; var metaInfo = enumerator.MetaInfo; metaInfo.FirstTransactionId += reader.ReadLong(); metaInfo.FirstOriginalTransactionId += reader.ReadLong(); var hasOrderInfo = reader.Read(); var hasTradeInfo = reader.Read(); long?orderId = null; long?tradeId = null; string orderStringId = null; string tradeStringId = null; if (reader.Read()) { metaInfo.FirstOrderId += reader.ReadLong(); orderId = metaInfo.FirstOrderId; } else { orderStringId = reader.ReadStringEx(); } var orderBoardId = reader.ReadStringEx(); if (reader.Read()) { metaInfo.FirstTradeId += reader.ReadLong(); tradeId = metaInfo.FirstTradeId; } else { tradeStringId = reader.ReadStringEx(); } var orderPrice = reader.Read() ? reader.ReadPriceEx(metaInfo) : (decimal?)null; var tradePrice = reader.Read() ? reader.ReadPriceEx(metaInfo) : (decimal?)null; var side = reader.Read() ? Sides.Buy : Sides.Sell; var orderVolume = reader.Read() ? reader.ReadVolume(metaInfo) : (decimal?)null; var tradeVolume = reader.Read() ? reader.ReadVolume(metaInfo) : (decimal?)null; var visibleVolume = reader.Read() ? reader.ReadVolume(metaInfo) : (decimal?)null; var balance = reader.Read() ? reader.ReadVolume(metaInfo) : (decimal?)null; var isTickPrecision = metaInfo.Version >= MarketDataVersions.Version60; var prevTime = metaInfo.FirstTime; var lastOffset = metaInfo.FirstServerOffset; var serverTime = reader.ReadTime(ref prevTime, true, true, metaInfo.GetTimeZone(true, SecurityId, ExchangeInfoProvider), true, isTickPrecision, ref lastOffset); metaInfo.FirstTime = prevTime; metaInfo.FirstServerOffset = lastOffset; var type = (OrderTypes?)reader.ReadNullableInt(); var state = (OrderStates?)reader.ReadNullableInt(); var status = reader.ReadNullableLong(); var tradeStatus = reader.ReadNullableInt(); var timeInForce = (TimeInForce?)reader.ReadNullableInt(); var isSystem = reader.Read() ? reader.Read() : (bool?)null; var isUpTick = reader.Read() ? reader.Read() : (bool?)null; var expDate = reader.ReadDto(); var commission = reader.Read() ? metaInfo.FirstCommission = reader.ReadDecimal(metaInfo.FirstCommission) : (decimal?)null; var pnl = reader.Read() ? metaInfo.FirstPnL = reader.ReadDecimal(metaInfo.FirstPnL) : (decimal?)null; var position = reader.Read() ? metaInfo.FirstPosition = reader.ReadDecimal(metaInfo.FirstPosition) : (decimal?)null; var slippage = reader.Read() ? metaInfo.FirstSlippage = reader.ReadDecimal(metaInfo.FirstSlippage) : (decimal?)null; var portfolio = ReadString(reader, metaInfo.Portfolios); var clientCode = ReadString(reader, metaInfo.ClientCodes); var brokerCode = ReadString(reader, metaInfo.BrokerCodes); var depoName = ReadString(reader, metaInfo.DepoNames); var userOrderId = ReadString(reader, metaInfo.UserOrderIds); var comment = ReadString(reader, metaInfo.Comments); var sysComment = ReadString(reader, metaInfo.SystemComments); var msg = new ExecutionMessage { ExecutionType = ExecutionTypes.Transaction, SecurityId = SecurityId, ServerTime = serverTime, TransactionId = metaInfo.FirstTransactionId, OriginalTransactionId = metaInfo.FirstOriginalTransactionId, Side = side, OrderVolume = orderVolume, TradeVolume = tradeVolume, VisibleVolume = visibleVolume, Balance = balance, OrderType = type, OrderState = state, OrderStatus = status, TimeInForce = timeInForce, IsSystem = isSystem, IsUpTick = isUpTick, ExpiryDate = expDate, Commission = commission, PnL = pnl, Position = position, Slippage = slippage, PortfolioName = portfolio, ClientCode = clientCode, BrokerCode = brokerCode, DepoName = depoName, UserOrderId = userOrderId, Comment = comment, SystemComment = sysComment, TradeStatus = tradeStatus, HasOrderInfo = hasOrderInfo, HasTradeInfo = hasTradeInfo, OrderPrice = orderPrice ?? 0, TradePrice = tradePrice, OrderId = orderId, TradeId = tradeId, OrderBoardId = orderBoardId, OrderStringId = orderStringId, TradeStringId = tradeStringId, }; var error = ReadString(reader, metaInfo.Errors); if (!error.IsEmpty()) { msg.Error = new InvalidOperationException(error); } msg.Currency = (CurrencyTypes?)reader.ReadNullableInt(); if (reader.Read()) { msg.Latency = reader.ReadLong().To <TimeSpan>(); } if (reader.Read()) { msg.OriginSide = reader.Read() ? Sides.Buy : Sides.Sell; } if (metaInfo.Version < MarketDataVersions.Version59) { return(msg); } msg.LocalTime = ReadItemLocalTime(reader, metaInfo, isTickPrecision); if (metaInfo.Version < MarketDataVersions.Version61) { return(msg); } if (reader.Read()) { msg.IsMarketMaker = reader.Read(); } if (metaInfo.Version < MarketDataVersions.Version62) { return(msg); } if (reader.Read()) { msg.IsMargin = reader.Read(); } if (metaInfo.Version < MarketDataVersions.Version63) { return(msg); } msg.CommissionCurrency = reader.ReadStringEx(); if (metaInfo.Version < MarketDataVersions.Version64) { return(msg); } if (reader.Read()) { msg.IsManual = reader.Read(); } if (metaInfo.Version < MarketDataVersions.Version65) { return(msg); } if (reader.Read()) { msg.PositionEffect = (OrderPositionEffects)reader.ReadInt(); } if (reader.Read()) { msg.PostOnly = reader.Read(); } if (reader.Read()) { msg.Initiator = reader.Read(); } if (metaInfo.Version < MarketDataVersions.Version66) { return(msg); } msg.SeqNum = reader.ReadLong(); msg.StrategyId = ReadString(reader, metaInfo.StrategyIds); if (metaInfo.Version < MarketDataVersions.Version67) { return(msg); } msg.BuildFrom = reader.ReadBuildFrom(); if (metaInfo.Version < MarketDataVersions.Version68) { return(msg); } msg.Leverage = reader.ReadNullableInt(); return(msg); }
public abstract TData MoveNext(MarketDataEnumerator enumerator);
public override ExecutionMessage MoveNext(MarketDataEnumerator enumerator) { var reader = enumerator.Reader; var metaInfo = enumerator.MetaInfo; metaInfo.FirstTransactionId += reader.ReadLong(); metaInfo.FirstOriginalTransactionId += reader.ReadLong(); var hasOrderInfo = reader.Read(); var hasTradeInfo = reader.Read(); long?orderId = null; long?tradeId = null; string orderBoardId = null; string orderStringId = null; string tradeStringId = null; if (reader.Read()) { metaInfo.FirstOrderId += reader.ReadLong(); orderId = metaInfo.FirstOrderId; } else { if (reader.Read()) { orderStringId = reader.ReadString(); } } if (reader.Read()) { orderBoardId = reader.ReadString(); } if (reader.Read()) { metaInfo.FirstTradeId += reader.ReadLong(); tradeId = metaInfo.FirstTradeId; } else { if (reader.Read()) { tradeStringId = reader.ReadString(); } } var orderPrice = reader.Read() ? reader.ReadPriceEx(metaInfo) : (decimal?)null; var tradePrice = reader.Read() ? reader.ReadPriceEx(metaInfo) : (decimal?)null; var side = reader.Read() ? Sides.Buy : Sides.Sell; var orderVolume = reader.Read() ? reader.ReadVolume(metaInfo) : (decimal?)null; var tradeVolume = reader.Read() ? reader.ReadVolume(metaInfo) : (decimal?)null; var visibleVolume = reader.Read() ? reader.ReadVolume(metaInfo) : (decimal?)null; var balance = reader.Read() ? reader.ReadVolume(metaInfo) : (decimal?)null; var prevTime = metaInfo.FirstTime; var lastOffset = metaInfo.FirstServerOffset; var serverTime = reader.ReadTime(ref prevTime, true, true, metaInfo.GetTimeZone(true, SecurityId), true, ref lastOffset); metaInfo.FirstTime = prevTime; metaInfo.FirstServerOffset = lastOffset; var type = reader.ReadNullableInt <OrderTypes>(); var state = reader.ReadNullableInt <OrderStates>(); var status = reader.ReadNullableInt <OrderStatus>(); var tradeStatus = reader.ReadNullableInt <int>(); var timeInForce = reader.ReadNullableInt <TimeInForce>(); var isSystem = reader.Read() ? reader.Read() : (bool?)null; var isUpTick = reader.Read() ? reader.Read() : (bool?)null; var expDate = reader.Read() ? reader.ReadLong().To <DateTime>().ApplyTimeZone(new TimeSpan(reader.ReadInt(), reader.ReadInt(), 0)) : (DateTimeOffset?)null; var commission = reader.Read() ? metaInfo.FirstCommission = reader.ReadDecimal(metaInfo.FirstCommission) : (decimal?)null; var pnl = reader.Read() ? metaInfo.FirstPnL = reader.ReadDecimal(metaInfo.FirstPnL) : (decimal?)null; var position = reader.Read() ? metaInfo.FirstPosition = reader.ReadDecimal(metaInfo.FirstPosition) : (decimal?)null; var slippage = reader.Read() ? metaInfo.FirstSlippage = reader.ReadDecimal(metaInfo.FirstSlippage) : (decimal?)null; var portfolio = ReadString(reader, metaInfo.Portfolios); var clientCode = ReadString(reader, metaInfo.ClientCodes); var brokerCode = ReadString(reader, metaInfo.BrokerCodes); var depoName = ReadString(reader, metaInfo.DepoNames); var userOrderId = ReadString(reader, metaInfo.UserOrderIds); var comment = ReadString(reader, metaInfo.Comments); var sysComment = ReadString(reader, metaInfo.SystemComments); var msg = new ExecutionMessage { ExecutionType = ExecutionTypes.Transaction, SecurityId = SecurityId, ServerTime = serverTime, TransactionId = metaInfo.FirstTransactionId, OriginalTransactionId = metaInfo.FirstOriginalTransactionId, Side = side, OrderVolume = orderVolume, TradeVolume = tradeVolume, VisibleVolume = visibleVolume, Balance = balance, OrderType = type, OrderState = state, OrderStatus = status, TimeInForce = timeInForce, IsSystem = isSystem, IsUpTick = isUpTick, ExpiryDate = expDate, Commission = commission, PnL = pnl, Position = position, Slippage = slippage, PortfolioName = portfolio, ClientCode = clientCode, BrokerCode = brokerCode, DepoName = depoName, UserOrderId = userOrderId, Comment = comment, SystemComment = sysComment, TradeStatus = tradeStatus, HasOrderInfo = hasOrderInfo, HasTradeInfo = hasTradeInfo, OrderPrice = orderPrice ?? 0, TradePrice = tradePrice, OrderId = orderId, TradeId = tradeId, OrderBoardId = orderBoardId, OrderStringId = orderStringId, TradeStringId = tradeStringId, }; var error = ReadString(reader, metaInfo.Errors); if (!error.IsEmpty()) { msg.Error = new InvalidOperationException(error); } msg.Currency = reader.ReadNullableInt <CurrencyTypes>(); if (reader.Read()) { msg.Latency = reader.ReadLong().To <TimeSpan>(); } if (reader.Read()) { msg.OriginSide = reader.Read() ? Sides.Buy : Sides.Sell; } return(msg); }
public override QuoteChangeMessage MoveNext(MarketDataEnumerator enumerator) { var metaInfo = enumerator.MetaInfo; var reader = enumerator.Reader; var allowNonOrdered = metaInfo.Version >= MarketDataVersions.Version47; var isUtc = metaInfo.Version >= MarketDataVersions.Version50; var allowDiffOffsets = metaInfo.Version >= MarketDataVersions.Version52; var isTickPrecision = metaInfo.Version >= MarketDataVersions.Version53; var nonAdjustPrice = metaInfo.Version >= MarketDataVersions.Version54; var useLong = metaInfo.Version >= MarketDataVersions.Version55; var prevTime = metaInfo.FirstTime; var lastOffset = metaInfo.FirstServerOffset; var serverTime = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, metaInfo.GetTimeZone(isUtc, SecurityId, ExchangeInfoProvider), allowDiffOffsets, isTickPrecision, ref lastOffset); metaInfo.FirstTime = prevTime; metaInfo.FirstServerOffset = lastOffset; var isFull = reader.Read(); var prevDepth = enumerator.Previous; var bids = DeserializeQuotes(reader, metaInfo, useLong, nonAdjustPrice); var asks = DeserializeQuotes(reader, metaInfo, useLong, nonAdjustPrice); var diff = new QuoteChangeMessage { LocalTime = metaInfo.FirstTime, SecurityId = SecurityId, ServerTime = serverTime, Bids = bids, Asks = asks, IsSorted = true, }; if (metaInfo.Version < MarketDataVersions.Version48) { diff.Bids = diff.Bids.OrderByDescending(q => q.Price).ToArray(); diff.Asks = diff.Asks.OrderBy(q => q.Price).ToArray(); } var quoteMsg = isFull ? diff : prevDepth.AddDelta(diff); //if (depth.BestBid != null && depth.BestAsk != null && depth.BestBid.Price >= depth.BestAsk.Price) // throw new InvalidOperationException("Лучший бид {0} больше или равен лучшему офферу {1}.".Put(depth.BestBid.Price, depth.BestAsk.Price)); //metaInfo.FirstPrice = GetDepthPrice(quoteMsg); if (metaInfo.Version < MarketDataVersions.Version40) { return(quoteMsg); } if (metaInfo.Version < MarketDataVersions.Version46) { quoteMsg.LocalTime = quoteMsg.ServerTime - reader.ReadLong().To <TimeSpan>() + metaInfo.LocalOffset; } else { var hasLocalTime = true; if (metaInfo.Version >= MarketDataVersions.Version49) { hasLocalTime = reader.Read(); } if (hasLocalTime) { var prevLocalTime = metaInfo.FirstLocalTime; lastOffset = metaInfo.FirstLocalOffset; var localTime = reader.ReadTime(ref prevLocalTime, allowNonOrdered, isUtc, metaInfo.LocalOffset, allowDiffOffsets, isTickPrecision, ref lastOffset); metaInfo.FirstLocalTime = prevLocalTime; quoteMsg.LocalTime = localTime; metaInfo.FirstLocalOffset = lastOffset; } //else // quoteMsg.LocalTime = quoteMsg.Time; } if (metaInfo.Version >= MarketDataVersions.Version51) { if (reader.Read()) { quoteMsg.Currency = (CurrencyTypes)reader.ReadInt(); } } return(quoteMsg); }
public override ExecutionMessage MoveNext(MarketDataEnumerator enumerator) { var reader = enumerator.Reader; var metaInfo = enumerator.MetaInfo; metaInfo.FirstOrderId += reader.ReadLong(); decimal price; if (metaInfo.Version < MarketDataVersions.Version45) { price = reader.ReadPriceEx(metaInfo); } else { if (reader.Read()) { price = metaInfo.FirstOrderPrice = reader.ReadPrice(metaInfo.FirstOrderPrice, metaInfo, true); } else { price = metaInfo.FirstNonSystemPrice = reader.ReadDecimal(metaInfo.FirstNonSystemPrice); } } var volume = reader.ReadVolume(metaInfo); var orderDirection = reader.Read() ? Sides.Buy : Sides.Sell; var allowNonOrdered = metaInfo.Version >= MarketDataVersions.Version47; var isUtc = metaInfo.Version >= MarketDataVersions.Version48; var prevTime = metaInfo.FirstTime; var serverTime = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, metaInfo.GetTimeZone(isUtc, SecurityId)); metaInfo.FirstTime = prevTime; var execMsg = new ExecutionMessage { //LocalTime = metaInfo.FirstTime, ExecutionType = ExecutionTypes.OrderLog, SecurityId = SecurityId, OrderId = metaInfo.FirstOrderId, Volume = volume, Side = orderDirection, ServerTime = serverTime, Price = price, }; if (reader.Read()) { metaInfo.FirstTradeId += reader.ReadLong(); price = reader.ReadPriceEx(metaInfo); execMsg.TradeId = metaInfo.FirstTradeId; execMsg.TradePrice = price; execMsg.OrderState = OrderStates.Done; } else { var active = reader.Read(); execMsg.OrderState = active ? OrderStates.Active : OrderStates.Done; execMsg.IsCancelled = !active; } if (metaInfo.Version >= MarketDataVersions.Version31) { execMsg.OrderStatus = reader.ReadNullableInt <OrderStatus>(); if (execMsg.OrderStatus != null) { var status = (int)execMsg.OrderStatus.Value; if (status.HasBits(0x01)) { execMsg.TimeInForce = TimeInForce.PutInQueue; } else if (status.HasBits(0x02)) { execMsg.TimeInForce = TimeInForce.CancelBalance; } } // Лучше ExecCond писать отдельным полем так как возможно только Плаза пишет это в статус if (metaInfo.Version >= MarketDataVersions.Version33) { execMsg.TimeInForce = (TimeInForce)reader.ReadInt(); execMsg.IsSystem = metaInfo.Version < MarketDataVersions.Version49 ? reader.Read() : (reader.Read() ? reader.Read() : (bool?)null); if (metaInfo.Version >= MarketDataVersions.Version34) { metaInfo.FirstTransactionId += reader.ReadLong(); execMsg.TransactionId = metaInfo.FirstTransactionId; } } else { if (execMsg.OrderStatus != null) { execMsg.IsSystem = !((int)execMsg.OrderStatus).HasBits(0x04); } } } if (metaInfo.Version >= MarketDataVersions.Version40) { if (metaInfo.Version < MarketDataVersions.Version46) { /*item.Latency =*/ reader.ReadLong(); //.To<TimeSpan>(); } if (reader.Read()) { execMsg.PortfolioName = metaInfo.Portfolios[reader.ReadInt()]; } } //if (order.Portfolio == null) // order.Portfolio = Portfolio.AnonymousPortfolio; return(execMsg); }
public override ExecutionMessage MoveNext(MarketDataEnumerator enumerator) { var reader = enumerator.Reader; var metaInfo = enumerator.MetaInfo; metaInfo.FirstId += reader.ReadLong(); var volume = reader.ReadVolume(metaInfo); var price = reader.ReadPriceEx(metaInfo); var orderDirection = reader.Read() ? (reader.Read() ? Sides.Buy : Sides.Sell) : (Sides?)null; var allowNonOrdered = metaInfo.Version >= MarketDataVersions.Version48; var isUtc = metaInfo.Version >= MarketDataVersions.Version50; var prevTime = metaInfo.FirstTime; var serverTime = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, metaInfo.GetTimeZone(isUtc, SecurityId)); metaInfo.FirstTime = prevTime; var msg = new ExecutionMessage { //LocalTime = metaInfo.FirstTime, ExecutionType = ExecutionTypes.Tick, SecurityId = SecurityId, TradeId = metaInfo.FirstId, Volume = volume, OriginSide = orderDirection, TradePrice = price, ServerTime = serverTime, }; if (metaInfo.Version < MarketDataVersions.Version40) { return(msg); } if (metaInfo.Version < MarketDataVersions.Version47) { msg.LocalTime = msg.ServerTime.LocalDateTime - reader.ReadLong().To <TimeSpan>() + metaInfo.LocalOffset; } else { var hasLocalTime = true; if (metaInfo.Version >= MarketDataVersions.Version49) { hasLocalTime = reader.Read(); } if (hasLocalTime) { var prevLocalTime = metaInfo.FirstLocalTime; var localTime = reader.ReadTime(ref prevLocalTime, allowNonOrdered, isUtc, metaInfo.LocalOffset); metaInfo.FirstLocalTime = prevLocalTime; msg.LocalTime = localTime.LocalDateTime; } //else // msg.LocalTime = msg.ServerTime; } if (metaInfo.Version < MarketDataVersions.Version42) { return(msg); } msg.IsSystem = metaInfo.Version < MarketDataVersions.Version51 ? reader.Read() : (reader.Read() ? reader.Read() : (bool?)null); if (msg.IsSystem == false) { msg.TradeStatus = metaInfo.Version < MarketDataVersions.Version51 ? reader.ReadInt() : reader.ReadNullableInt <int>(); } if (metaInfo.Version < MarketDataVersions.Version46 || reader.Read()) { msg.OpenInterest = reader.ReadVolume(metaInfo); } if (metaInfo.Version < MarketDataVersions.Version45) { return(msg); } if (reader.Read()) { msg.IsUpTick = reader.Read(); } return(msg); }
public override PositionChangeMessage MoveNext(MarketDataEnumerator enumerator) { var reader = enumerator.Reader; var metaInfo = enumerator.MetaInfo; var posMsg = new PositionChangeMessage { SecurityId = SecurityId }; var prevTime = metaInfo.FirstTime; var lastOffset = metaInfo.FirstServerOffset; posMsg.ServerTime = reader.ReadTime(ref prevTime, true, true, metaInfo.GetTimeZone(true, SecurityId, ExchangeInfoProvider), true, true, ref lastOffset); metaInfo.FirstTime = prevTime; metaInfo.FirstServerOffset = lastOffset; if (reader.Read()) { prevTime = metaInfo.FirstLocalTime; lastOffset = metaInfo.FirstLocalOffset; posMsg.LocalTime = reader.ReadTime(ref prevTime, true, true, metaInfo.LocalOffset, true, true, ref lastOffset); metaInfo.FirstLocalTime = prevTime; metaInfo.FirstLocalOffset = lastOffset; } posMsg.PortfolioName = metaInfo.Portfolios[reader.ReadInt()]; if (reader.Read()) { posMsg.ClientCode = metaInfo.ClientCodes[reader.ReadInt()]; } if (reader.Read()) { posMsg.DepoName = metaInfo.DepoNames[reader.ReadInt()]; } if (reader.Read()) { posMsg.LimitType = (TPlusLimits)reader.ReadInt(); } var changeCount = reader.ReadInt(); for (var i = 0; i < changeCount; i++) { var type = (PositionChangeTypes)reader.ReadInt(); switch (type) { case PositionChangeTypes.BeginValue: posMsg.Add(type, DeserializeChange(reader, metaInfo.BeginValue)); break; case PositionChangeTypes.CurrentValue: posMsg.Add(type, DeserializeChange(reader, metaInfo.CurrentValue)); break; case PositionChangeTypes.BlockedValue: posMsg.Add(type, DeserializeChange(reader, metaInfo.BlockedValue)); break; case PositionChangeTypes.CurrentPrice: posMsg.Add(type, DeserializeChange(reader, metaInfo.CurrentPrice)); break; case PositionChangeTypes.AveragePrice: posMsg.Add(type, DeserializeChange(reader, metaInfo.AveragePrice)); break; case PositionChangeTypes.UnrealizedPnL: posMsg.Add(type, DeserializeChange(reader, metaInfo.UnrealizedPnL)); break; case PositionChangeTypes.RealizedPnL: posMsg.Add(type, DeserializeChange(reader, metaInfo.RealizedPnL)); break; case PositionChangeTypes.VariationMargin: posMsg.Add(type, DeserializeChange(reader, metaInfo.VariationMargin)); break; case PositionChangeTypes.Currency: posMsg.Add(type, (CurrencyTypes)reader.ReadInt()); break; case PositionChangeTypes.Leverage: posMsg.Add(type, DeserializeChange(reader, metaInfo.Leverage)); break; case PositionChangeTypes.Commission: posMsg.Add(type, DeserializeChange(reader, metaInfo.Commission)); break; case PositionChangeTypes.CurrentValueInLots: posMsg.Add(type, DeserializeChange(reader, metaInfo.CurrentValueInLots)); break; case PositionChangeTypes.State: posMsg.Add(type, (PortfolioStates)reader.ReadInt()); break; default: throw new ArgumentOutOfRangeException(); } } return(posMsg); }
public override TCandleMessage MoveNext(MarketDataEnumerator enumerator) { var reader = enumerator.Reader; var metaInfo = enumerator.MetaInfo; var candle = new TCandleMessage { SecurityId = SecurityId, TotalVolume = reader.ReadVolume(metaInfo), RelativeVolume = metaInfo.Version < MarketDataVersions.Version52 || !reader.Read() ? (decimal?)null : reader.ReadVolume(metaInfo), LowPrice = reader.ReadPrice(metaInfo.FirstPrice, metaInfo), Arg = _arg }; candle.OpenPrice = reader.ReadPrice(candle.LowPrice, metaInfo); candle.ClosePrice = reader.ReadPrice(candle.LowPrice, metaInfo); candle.HighPrice = reader.ReadPrice(candle.LowPrice, metaInfo); var prevTime = metaInfo.FirstTime; var allowNonOrdered = metaInfo.Version >= MarketDataVersions.Version49; var isUtc = metaInfo.Version >= MarketDataVersions.Version50; var timeZone = metaInfo.GetTimeZone(isUtc, SecurityId); var allowDiffOffsets = metaInfo.Version >= MarketDataVersions.Version53; var lastOffset = metaInfo.FirstServerOffset; candle.OpenTime = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, timeZone, allowDiffOffsets, ref lastOffset); metaInfo.FirstServerOffset = lastOffset; if (metaInfo.Version >= MarketDataVersions.Version46) { if (reader.Read()) { var isOrdered = reader.Read(); var first = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, timeZone, allowDiffOffsets, ref lastOffset); var second = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, timeZone, allowDiffOffsets, ref lastOffset); candle.HighTime = isOrdered ? first : second; candle.LowTime = isOrdered ? second : first; } else { if (reader.Read()) { candle.HighTime = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, timeZone, allowDiffOffsets, ref lastOffset); } if (reader.Read()) { candle.LowTime = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, timeZone, allowDiffOffsets, ref lastOffset); } } } if (metaInfo.Version >= MarketDataVersions.Version47) { if (reader.Read()) { candle.CloseTime = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, timeZone, allowDiffOffsets, ref lastOffset); } } else { candle.CloseTime = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, metaInfo.LocalOffset, allowDiffOffsets, ref lastOffset); } if (metaInfo.Version >= MarketDataVersions.Version46) { if (metaInfo.Version < MarketDataVersions.Version51) { candle.OpenVolume = reader.ReadVolume(metaInfo); candle.HighVolume = reader.ReadVolume(metaInfo); candle.LowVolume = reader.ReadVolume(metaInfo); candle.CloseVolume = reader.ReadVolume(metaInfo); } else { candle.OpenVolume = reader.Read() ? reader.ReadVolume(metaInfo) : (decimal?)null; candle.HighVolume = reader.Read() ? reader.ReadVolume(metaInfo) : (decimal?)null; candle.LowVolume = reader.Read() ? reader.ReadVolume(metaInfo) : (decimal?)null; candle.CloseVolume = reader.Read() ? reader.ReadVolume(metaInfo) : (decimal?)null; } } candle.State = (CandleStates)reader.ReadInt(); metaInfo.FirstPrice = candle.LowPrice; metaInfo.FirstTime = metaInfo.Version <= MarketDataVersions.Version40 ? candle.OpenTime.LocalDateTime : prevTime; if (metaInfo.Version >= MarketDataVersions.Version45) { if (metaInfo.Version < MarketDataVersions.Version48 || reader.Read()) { candle.OpenInterest = reader.ReadVolume(metaInfo); } } if (metaInfo.Version >= MarketDataVersions.Version52) { candle.DownTicks = reader.Read() ? reader.ReadInt() : (int?)null; candle.UpTicks = reader.Read() ? reader.ReadInt() : (int?)null; candle.TotalTicks = reader.Read() ? reader.ReadInt() : (int?)null; } return(candle); }
public override QuoteChangeMessage MoveNext(MarketDataEnumerator enumerator) { var metaInfo = enumerator.MetaInfo; var reader = enumerator.Reader; var allowNonOrdered = metaInfo.Version >= MarketDataVersions.Version47; var isUtc = metaInfo.Version >= MarketDataVersions.Version50; var prevTime = metaInfo.FirstTime; var serverTime = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, metaInfo.GetTimeZone(isUtc, SecurityId)); metaInfo.FirstTime = prevTime; var isFull = reader.Read(); var prevDepth = enumerator.Previous; var bids = DeserializeQuotes(reader, metaInfo, Sides.Buy); var asks = DeserializeQuotes(reader, metaInfo, Sides.Sell); var diff = new QuoteChangeMessage { LocalTime = metaInfo.FirstTime, SecurityId = SecurityId, ServerTime = serverTime, Bids = bids, Asks = asks, IsSorted = true, }; if (metaInfo.Version < MarketDataVersions.Version48) { diff.Bids = diff.Bids.OrderByDescending(q => q.Price); diff.Asks = diff.Asks.OrderBy(q => q.Price); } var quoteMsg = isFull ? diff : prevDepth.AddDelta(diff); //if (depth.BestBid != null && depth.BestAsk != null && depth.BestBid.Price >= depth.BestAsk.Price) // throw new InvalidOperationException("Лучший бид {0} больше или равен лучшему офферу {1}.".Put(depth.BestBid.Price, depth.BestAsk.Price)); metaInfo.FirstPrice = GetDepthPrice(quoteMsg); if (metaInfo.Version < MarketDataVersions.Version40) { return(quoteMsg); } if (metaInfo.Version < MarketDataVersions.Version46) { quoteMsg.LocalTime = quoteMsg.ServerTime.LocalDateTime - reader.ReadLong().To <TimeSpan>() + metaInfo.LocalOffset; } else { var hasLocalTime = true; if (metaInfo.Version >= MarketDataVersions.Version49) { hasLocalTime = reader.Read(); } if (hasLocalTime) { var prevLocalTime = metaInfo.FirstLocalTime; var localTime = reader.ReadTime(ref prevLocalTime, allowNonOrdered, isUtc, metaInfo.LocalOffset); metaInfo.FirstLocalTime = prevLocalTime; quoteMsg.LocalTime = localTime.LocalDateTime; } //else // quoteMsg.LocalTime = quoteMsg.Time; } return(quoteMsg); }
public override TCandleMessage MoveNext(MarketDataEnumerator enumerator) { var reader = enumerator.Reader; var metaInfo = enumerator.MetaInfo; var candle = new TCandleMessage { SecurityId = SecurityId, TotalVolume = reader.ReadVolume(metaInfo), RelativeVolume = metaInfo.Version < MarketDataVersions.Version52 || !reader.Read() ? (decimal?)null : reader.ReadVolume(metaInfo), Arg = Arg }; var prevTime = metaInfo.FirstTime; var allowNonOrdered = metaInfo.Version >= MarketDataVersions.Version49; var isUtc = metaInfo.Version >= MarketDataVersions.Version50; var timeZone = metaInfo.GetTimeZone(isUtc, SecurityId, ExchangeInfoProvider); var allowDiffOffsets = metaInfo.Version >= MarketDataVersions.Version53; var useLevels = metaInfo.Version >= MarketDataVersions.Version54; var isTickPrecision = metaInfo.Version >= MarketDataVersions.Version57; var useLong = metaInfo.Version >= MarketDataVersions.Version58; var buildFrom = metaInfo.Version >= MarketDataVersions.Version59; var seqNum = metaInfo.Version >= MarketDataVersions.Version60; if (metaInfo.Version < MarketDataVersions.Version56) { var prevPrice = metaInfo.FirstPrice; candle.LowPrice = reader.ReadPrice(ref prevPrice, metaInfo); metaInfo.FirstPrice = prevPrice; prevPrice = metaInfo.FirstPrice; candle.OpenPrice = reader.ReadPrice(ref prevPrice, metaInfo); prevPrice = metaInfo.FirstPrice; candle.ClosePrice = reader.ReadPrice(ref prevPrice, metaInfo); prevPrice = metaInfo.FirstPrice; candle.HighPrice = reader.ReadPrice(ref prevPrice, metaInfo); } else { candle.LowPrice = reader.ReadPriceEx(metaInfo, useLong); if (reader.Read()) { candle.OpenPrice = reader.ReadPriceEx(metaInfo, useLong); candle.ClosePrice = reader.ReadPriceEx(metaInfo, useLong); } else { candle.ClosePrice = reader.ReadPriceEx(metaInfo, useLong); candle.OpenPrice = reader.ReadPriceEx(metaInfo, useLong); } candle.HighPrice = reader.ReadPriceEx(metaInfo, useLong); } var lastOffset = metaInfo.FirstServerOffset; candle.OpenTime = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, timeZone, allowDiffOffsets, isTickPrecision, ref lastOffset); metaInfo.FirstServerOffset = lastOffset; if (metaInfo.Version >= MarketDataVersions.Version46) { if (reader.Read()) { var isOrdered = reader.Read(); var first = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, timeZone, allowDiffOffsets, isTickPrecision, ref lastOffset); var second = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, timeZone, allowDiffOffsets, isTickPrecision, ref lastOffset); candle.HighTime = isOrdered ? first : second; candle.LowTime = isOrdered ? second : first; } else { if (reader.Read()) { candle.HighTime = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, timeZone, allowDiffOffsets, isTickPrecision, ref lastOffset); } if (reader.Read()) { candle.LowTime = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, timeZone, allowDiffOffsets, isTickPrecision, ref lastOffset); } } } if (metaInfo.Version >= MarketDataVersions.Version47) { if (reader.Read()) { candle.CloseTime = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, timeZone, allowDiffOffsets, isTickPrecision, ref lastOffset); } } else { candle.CloseTime = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, metaInfo.LocalOffset, allowDiffOffsets, false, ref lastOffset); } if (metaInfo.Version >= MarketDataVersions.Version46) { if (metaInfo.Version < MarketDataVersions.Version51) { candle.OpenVolume = reader.ReadVolume(metaInfo); candle.HighVolume = reader.ReadVolume(metaInfo); candle.LowVolume = reader.ReadVolume(metaInfo); candle.CloseVolume = reader.ReadVolume(metaInfo); } else { candle.OpenVolume = reader.Read() ? reader.ReadVolume(metaInfo) : (decimal?)null; candle.HighVolume = reader.Read() ? reader.ReadVolume(metaInfo) : (decimal?)null; candle.LowVolume = reader.Read() ? reader.ReadVolume(metaInfo) : (decimal?)null; candle.CloseVolume = reader.Read() ? reader.ReadVolume(metaInfo) : (decimal?)null; } } candle.State = (CandleStates)reader.ReadInt(); metaInfo.FirstTime = metaInfo.Version <= MarketDataVersions.Version40 ? candle.OpenTime.LocalDateTime : prevTime; if (metaInfo.Version >= MarketDataVersions.Version45) { if (metaInfo.Version < MarketDataVersions.Version48 || reader.Read()) { candle.OpenInterest = reader.ReadVolume(metaInfo); } } if (metaInfo.Version >= MarketDataVersions.Version52) { candle.DownTicks = reader.Read() ? reader.ReadInt() : (int?)null; candle.UpTicks = reader.Read() ? reader.ReadInt() : (int?)null; candle.TotalTicks = reader.Read() ? reader.ReadInt() : (int?)null; } if (!useLevels) { return(candle); } if (reader.Read()) { var priceLevels = new CandlePriceLevel[reader.ReadInt()]; for (var i = 0; i < priceLevels.Length; i++) { var prevPrice = metaInfo.FirstPrice; var priceLevel = new CandlePriceLevel { Price = metaInfo.Version < MarketDataVersions.Version56 ? reader.ReadPrice(ref prevPrice, metaInfo) : reader.ReadPriceEx(metaInfo), BuyCount = reader.ReadInt(), SellCount = reader.ReadInt(), BuyVolume = reader.ReadVolume(metaInfo), SellVolume = reader.ReadVolume(metaInfo) }; if (metaInfo.Version >= MarketDataVersions.Version55) { priceLevel.TotalVolume = reader.ReadVolume(metaInfo); } if (reader.Read()) { var volumes = new decimal[reader.ReadInt()]; for (var j = 0; j < volumes.Length; j++) { volumes[j] = reader.ReadVolume(metaInfo); } priceLevel.BuyVolumes = volumes; } if (reader.Read()) { var volumes = new decimal[reader.ReadInt()]; for (var j = 0; j < volumes.Length; j++) { volumes[j] = reader.ReadVolume(metaInfo); } priceLevel.SellVolumes = volumes; } priceLevels[i] = priceLevel; } candle.PriceLevels = priceLevels; } if (!buildFrom) { return(candle); } candle.BuildFrom = reader.ReadBuildFrom(); if (!seqNum) { return(candle); } reader.ReadSeqNum(candle, metaInfo); return(candle); }
public override PositionChangeMessage MoveNext(MarketDataEnumerator enumerator) { var reader = enumerator.Reader; var metaInfo = enumerator.MetaInfo; var buildFrom = metaInfo.Version >= MarketDataVersions.Version35; var side = metaInfo.Version >= MarketDataVersions.Version36; var posMsg = new PositionChangeMessage { SecurityId = SecurityId }; var prevTime = metaInfo.FirstTime; var lastOffset = metaInfo.FirstServerOffset; posMsg.ServerTime = reader.ReadTime(ref prevTime, true, true, metaInfo.GetTimeZone(true, SecurityId, ExchangeInfoProvider), true, true, ref lastOffset); metaInfo.FirstTime = prevTime; metaInfo.FirstServerOffset = lastOffset; if (reader.Read()) { prevTime = metaInfo.FirstLocalTime; lastOffset = metaInfo.FirstLocalOffset; posMsg.LocalTime = reader.ReadTime(ref prevTime, true, true, metaInfo.LocalOffset, true, true, ref lastOffset); metaInfo.FirstLocalTime = prevTime; metaInfo.FirstLocalOffset = lastOffset; } posMsg.PortfolioName = metaInfo.Portfolios[reader.ReadInt()]; if (reader.Read()) { posMsg.ClientCode = metaInfo.ClientCodes[reader.ReadInt()]; } if (reader.Read()) { posMsg.DepoName = metaInfo.DepoNames[reader.ReadInt()]; } if (reader.Read()) { posMsg.LimitType = (TPlusLimits)reader.ReadInt(); } var changeCount = reader.ReadInt(); for (var i = 0; i < changeCount; i++) { var type = (PositionChangeTypes)reader.ReadInt(); switch (type) { case PositionChangeTypes.BeginValue: posMsg.Add(type, DeserializeChange(reader, metaInfo.BeginValue)); break; case PositionChangeTypes.CurrentValue: posMsg.Add(type, DeserializeChange(reader, metaInfo.CurrentValue)); break; case PositionChangeTypes.BlockedValue: posMsg.Add(type, DeserializeChange(reader, metaInfo.BlockedValue)); break; case PositionChangeTypes.CurrentPrice: posMsg.Add(type, DeserializeChange(reader, metaInfo.CurrentPrice)); break; case PositionChangeTypes.AveragePrice: posMsg.Add(type, DeserializeChange(reader, metaInfo.AveragePrice)); break; case PositionChangeTypes.UnrealizedPnL: posMsg.Add(type, DeserializeChange(reader, metaInfo.UnrealizedPnL)); break; case PositionChangeTypes.RealizedPnL: posMsg.Add(type, DeserializeChange(reader, metaInfo.RealizedPnL)); break; case PositionChangeTypes.VariationMargin: posMsg.Add(type, DeserializeChange(reader, metaInfo.VariationMargin)); break; case PositionChangeTypes.Currency: posMsg.Add(type, (CurrencyTypes)reader.ReadInt()); break; case PositionChangeTypes.Leverage: posMsg.Add(type, DeserializeChange(reader, metaInfo.Leverage)); break; case PositionChangeTypes.Commission: posMsg.Add(type, DeserializeChange(reader, metaInfo.Commission)); break; case PositionChangeTypes.CurrentValueInLots: posMsg.Add(type, DeserializeChange(reader, metaInfo.CurrentValueInLots)); break; case PositionChangeTypes.State: posMsg.Add(type, (PortfolioStates)reader.ReadInt()); break; case PositionChangeTypes.ExpirationDate: posMsg.Add(type, reader.ReadDto().Value); break; case PositionChangeTypes.CommissionMaker: case PositionChangeTypes.CommissionTaker: case PositionChangeTypes.BuyOrdersMargin: case PositionChangeTypes.SellOrdersMargin: case PositionChangeTypes.OrdersMargin: posMsg.Add(type, reader.ReadDecimal(0)); break; case PositionChangeTypes.SettlementPrice: posMsg.Add(type, DeserializeChange(reader, metaInfo.SettlementPrice)); break; case PositionChangeTypes.BuyOrdersCount: case PositionChangeTypes.SellOrdersCount: case PositionChangeTypes.OrdersCount: case PositionChangeTypes.TradesCount: posMsg.Add(type, reader.ReadInt()); break; default: throw new ArgumentOutOfRangeException(); } } if (metaInfo.Version < MarketDataVersions.Version34) { return(posMsg); } posMsg.Description = reader.ReadStringEx(); posMsg.StrategyId = reader.ReadStringEx(); if (!buildFrom) { return(posMsg); } posMsg.BuildFrom = reader.ReadBuildFrom(); if (!side) { return(posMsg); } posMsg.Side = reader.ReadNullableSide(); return(posMsg); }
public override ExecutionMessage MoveNext(MarketDataEnumerator enumerator) { var reader = enumerator.Reader; var metaInfo = enumerator.MetaInfo; metaInfo.FirstOrderId += reader.ReadLong(); decimal price; if (metaInfo.Version < MarketDataVersions.Version45) { price = reader.ReadPriceEx(metaInfo); } else { if (reader.Read()) { price = metaInfo.FirstOrderPrice = reader.ReadPrice(metaInfo.FirstOrderPrice, metaInfo, true); } else { price = metaInfo.FirstFractionalPrice = reader.ReadDecimal(metaInfo.FirstFractionalPrice); } } var volume = reader.ReadVolume(metaInfo); var orderDirection = reader.Read() ? Sides.Buy : Sides.Sell; var allowNonOrdered = metaInfo.Version >= MarketDataVersions.Version47; var isUtc = metaInfo.Version >= MarketDataVersions.Version48; var allowDiffOffsets = metaInfo.Version >= MarketDataVersions.Version52; var isTickPrecision = metaInfo.Version >= MarketDataVersions.Version53; var prevTime = metaInfo.FirstTime; var lastOffset = metaInfo.FirstServerOffset; var serverTime = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, metaInfo.GetTimeZone(isUtc, SecurityId, ExchangeInfoProvider), allowDiffOffsets, isTickPrecision, ref lastOffset); metaInfo.FirstTime = prevTime; metaInfo.FirstServerOffset = lastOffset; var execMsg = new ExecutionMessage { //LocalTime = metaInfo.FirstTime, ExecutionType = ExecutionTypes.OrderLog, SecurityId = SecurityId, OrderId = metaInfo.FirstOrderId, OrderVolume = volume, Side = orderDirection, ServerTime = serverTime, OrderPrice = price, }; if (reader.Read()) { metaInfo.FirstTradeId += reader.ReadLong(); price = reader.ReadPriceEx(metaInfo); execMsg.TradeId = metaInfo.FirstTradeId; execMsg.TradePrice = price; execMsg.OrderState = OrderStates.Done; } else { var active = reader.Read(); execMsg.OrderState = active ? OrderStates.Active : OrderStates.Done; execMsg.IsCancelled = !active; } if (metaInfo.Version >= MarketDataVersions.Version31) { execMsg.OrderStatus = reader.ReadNullableInt <long>(); if (execMsg.OrderStatus != null) { execMsg.TimeInForce = execMsg.OrderStatus.Value.GetPlazaTimeInForce(); } // Лучше ExecCond писать отдельным полем так как возможно только Плаза пишет это в статус if (metaInfo.Version >= MarketDataVersions.Version33) { if (metaInfo.Version < MarketDataVersions.Version50) { execMsg.TimeInForce = (TimeInForce)reader.ReadInt(); } else { execMsg.TimeInForce = reader.Read() ? (TimeInForce)reader.ReadInt() : (TimeInForce?)null; } execMsg.IsSystem = metaInfo.Version < MarketDataVersions.Version49 ? reader.Read() : (reader.Read() ? reader.Read() : (bool?)null); if (metaInfo.Version >= MarketDataVersions.Version34) { metaInfo.FirstTransactionId += reader.ReadLong(); execMsg.TransactionId = metaInfo.FirstTransactionId; } } else { if (execMsg.OrderStatus != null) { execMsg.IsSystem = execMsg.OrderStatus.Value.IsPlazaSystem(); } } } if (metaInfo.Version >= MarketDataVersions.Version40) { if (metaInfo.Version < MarketDataVersions.Version46) { /*item.Latency =*/ reader.ReadLong(); //.To<TimeSpan>(); } if (reader.Read()) { execMsg.PortfolioName = metaInfo.Portfolios[reader.ReadInt()]; } } //if (order.Portfolio == null) // order.Portfolio = Portfolio.AnonymousPortfolio; if (metaInfo.Version >= MarketDataVersions.Version51) { if (reader.Read()) { execMsg.Currency = (CurrencyTypes)reader.ReadInt(); } } return(execMsg); }
public override ExecutionMessage MoveNext(MarketDataEnumerator enumerator) { var reader = enumerator.Reader; var metaInfo = enumerator.MetaInfo; var allowNonOrdered = metaInfo.Version >= MarketDataVersions.Version47; var isUtc = metaInfo.Version >= MarketDataVersions.Version48; var allowDiffOffsets = metaInfo.Version >= MarketDataVersions.Version52; var isTickPrecision = metaInfo.Version >= MarketDataVersions.Version53; var useBalance = metaInfo.Version >= MarketDataVersions.Version54; var buildFrom = metaInfo.Version >= MarketDataVersions.Version55; var seqNum = metaInfo.Version >= MarketDataVersions.Version56; var useLong = metaInfo.Version >= MarketDataVersions.Version57; var largeDecimal = metaInfo.Version >= MarketDataVersions.Version57; var stringId = metaInfo.Version >= MarketDataVersions.Version58; metaInfo.FirstOrderId += reader.ReadLong(); decimal price; if (metaInfo.Version < MarketDataVersions.Version45) { price = reader.ReadPriceEx(metaInfo, false, false); } else { if (reader.Read()) { var prevPrice = metaInfo.FirstOrderPrice; price = reader.ReadPrice(ref prevPrice, metaInfo, true); metaInfo.FirstOrderPrice = prevPrice; } else { price = metaInfo.FirstFractionalPrice = reader.ReadDecimal(metaInfo.FirstFractionalPrice); } } var volume = reader.ReadVolume(metaInfo, largeDecimal); var orderDirection = reader.Read() ? Sides.Buy : Sides.Sell; var prevTime = metaInfo.FirstTime; var lastOffset = metaInfo.FirstServerOffset; var serverTime = reader.ReadTime(ref prevTime, allowNonOrdered, isUtc, metaInfo.GetTimeZone(isUtc, SecurityId, ExchangeInfoProvider), allowDiffOffsets, isTickPrecision, ref lastOffset); metaInfo.FirstTime = prevTime; metaInfo.FirstServerOffset = lastOffset; var execMsg = new ExecutionMessage { //LocalTime = metaInfo.FirstTime, DataTypeEx = DataType.OrderLog, SecurityId = SecurityId, OrderId = metaInfo.FirstOrderId, OrderVolume = volume, Side = orderDirection, ServerTime = serverTime, OrderPrice = price, }; if (reader.Read()) { metaInfo.FirstTradeId += reader.ReadLong(); price = reader.ReadPriceEx(metaInfo, useLong, largeDecimal); execMsg.TradeId = metaInfo.FirstTradeId; execMsg.TradePrice = price; if (metaInfo.Version >= MarketDataVersions.Version54) { execMsg.OrderState = (OrderStates)reader.ReadInt(); } else { execMsg.OrderState = OrderStates.Done; } } else { if (metaInfo.Version >= MarketDataVersions.Version54) { execMsg.OrderState = (OrderStates)reader.ReadInt(); } else { execMsg.OrderState = reader.Read() ? OrderStates.Active : OrderStates.Done; } } if (metaInfo.Version >= MarketDataVersions.Version31) { execMsg.OrderStatus = reader.ReadNullableInt(); if (execMsg.OrderStatus != null) { execMsg.TimeInForce = execMsg.OrderStatus.Value.GetPlazaTimeInForce(); } // Лучше ExecCond писать отдельным полем так как возможно только Плаза пишет это в статус if (metaInfo.Version >= MarketDataVersions.Version33) { if (metaInfo.Version < MarketDataVersions.Version50) { execMsg.TimeInForce = (TimeInForce)reader.ReadInt(); } else { execMsg.TimeInForce = reader.Read() ? (TimeInForce)reader.ReadInt() : null; } execMsg.IsSystem = metaInfo.Version < MarketDataVersions.Version49 ? reader.Read() : (reader.Read() ? reader.Read() : (bool?)null); if (metaInfo.Version >= MarketDataVersions.Version34) { metaInfo.FirstTransactionId += reader.ReadLong(); execMsg.TransactionId = metaInfo.FirstTransactionId; } } else { if (execMsg.OrderStatus != null) { execMsg.IsSystem = execMsg.OrderStatus.Value.IsPlazaSystem(); } } } if (metaInfo.Version >= MarketDataVersions.Version40) { if (metaInfo.Version < MarketDataVersions.Version46) { /*item.Latency =*/ reader.ReadLong(); //.To<TimeSpan>(); } if (reader.Read()) { if (metaInfo.Version >= MarketDataVersions.Version54) { if (reader.Read()) { execMsg.PortfolioName = Portfolio.AnonymousPortfolio.Name; } else { execMsg.PortfolioName = metaInfo.Portfolios[reader.ReadInt()]; } } else { execMsg.PortfolioName = metaInfo.Portfolios[reader.ReadInt()]; } } } //if (order.Portfolio == null) // order.Portfolio = Portfolio.AnonymousPortfolio; if (metaInfo.Version >= MarketDataVersions.Version51) { if (reader.Read()) { execMsg.Currency = (CurrencyTypes)reader.ReadInt(); } } if (!useBalance) { return(execMsg); } if (reader.Read()) { execMsg.Balance = reader.Read() ? reader.ReadDecimal(0) : 0M; } if (!buildFrom) { return(execMsg); } execMsg.BuildFrom = reader.ReadBuildFrom(); if (!seqNum) { return(execMsg); } reader.ReadSeqNum(execMsg, metaInfo); if (!stringId) { return(execMsg); } if (reader.Read()) { execMsg.OrderId = null; } execMsg.OrderStringId = reader.ReadStringEx(); if (reader.Read()) { execMsg.TradeId = null; } execMsg.TradeStringId = reader.ReadStringEx(); if (reader.Read()) { metaInfo.FirstOrderId += reader.ReadLong(); execMsg.OrderBuyId = metaInfo.FirstOrderId; } if (reader.Read()) { metaInfo.FirstOrderId += reader.ReadLong(); execMsg.OrderSellId = metaInfo.FirstOrderId; } execMsg.IsUpTick = reader.ReadNullableBool(); execMsg.Yield = reader.ReadNullableDecimal(); execMsg.TradeStatus = reader.ReadNullableInt(); execMsg.OpenInterest = reader.ReadNullableDecimal(); execMsg.OriginSide = (Sides?)reader.ReadNullableInt(); return(execMsg); }