private static OrderLog OrdLogConverter(OrdLogEntry ol) { var states = new HashSet <OrderLogStates>(); if (ol.Flags.HasFlag(OrdLogFlags.NonSystem) || ol.Flags.HasFlag(OrdLogFlags.Snapshot)) { states.Add(OrderLogStates.NonSystem); } if (ol.Flags.HasFlag(OrdLogFlags.Add)) { states.Add(OrderLogStates.Add); } if (ol.Flags.HasFlag(OrdLogFlags.Fill)) { states.Add(OrderLogStates.Fill); } if (ol.Flags.HasFlag(OrdLogFlags.Buy)) { states.Add(OrderLogStates.Buy); } if (ol.Flags.HasFlag(OrdLogFlags.Sell)) { states.Add(OrderLogStates.Sell); } return(new OrderLog { States = states, Time = ol.DateTime, OrderId = ol.OrderId, Price = ol.Price, Volume = ol.Amount, VolumeRest = ol.AmountRest, TradeId = ol.DealId, TradePrice = ol.DealPrice }); }
// ********************************************************************** public void Write(DateTime dateTime, OrdLogEntry entry) { dw.WriteRecHeader(sid, dateTime); // ------------------------------------------------------------ long milliseconds = DateTimeHelper.ToMs(entry.DateTime); OrdLogEntryFlags flags = OrdLogEntryFlags.None; // ------------------------------------------------------------ if (lastMilliseconds != milliseconds) { flags |= OrdLogEntryFlags.DateTime; } if (lastOrderId != entry.OrderId) { flags |= OrdLogEntryFlags.OrderId; } if (lastPrice != entry.Price) { flags |= OrdLogEntryFlags.Price; } if (lastAmount != entry.Amount) { flags |= OrdLogEntryFlags.Amount; } if ((entry.Flags & OrdLogFlags.Fill) != 0) { if (lastAmountRest != entry.AmountRest) { flags |= OrdLogEntryFlags.AmountRest; } if (lastDealId != entry.DealId) { flags |= OrdLogEntryFlags.DealId; } if (lastDealPrice != entry.DealPrice) { flags |= OrdLogEntryFlags.DealPrice; } if (lastOI != entry.OI) { flags |= OrdLogEntryFlags.OI; } } // ------------------------------------------------------------ dw.Write((byte)flags); // ------------------------------------------------------------ dw.Write((ushort)entry.Flags); if ((flags & OrdLogEntryFlags.DateTime) != 0) { dw.WriteGrowing(milliseconds, ref lastMilliseconds); } if ((flags & OrdLogEntryFlags.OrderId) != 0) { if ((entry.Flags & OrdLogFlags.Add) != 0) { dw.WriteGrowing(entry.OrderId, ref lastOrderId); } else { dw.WriteLeb128(entry.OrderId - lastOrderId); } } if ((flags & OrdLogEntryFlags.Price) != 0) { dw.WriteLeb128(entry.Price - lastPrice); lastPrice = entry.Price; } if ((flags & OrdLogEntryFlags.Amount) != 0) { dw.WriteLeb128(entry.Amount); lastAmount = entry.Amount; } if ((flags & OrdLogEntryFlags.AmountRest) != 0) { dw.WriteLeb128(entry.AmountRest); lastAmountRest = entry.AmountRest; } if ((flags & OrdLogEntryFlags.DealId) != 0) { dw.WriteGrowing(entry.DealId, ref lastDealId); } if ((flags & OrdLogEntryFlags.DealPrice) != 0) { dw.WriteLeb128(entry.DealPrice - lastDealPrice); lastDealPrice = entry.DealPrice; } if ((flags & OrdLogEntryFlags.OI) != 0) { dw.WriteLeb128(entry.OI - lastOI); lastOI = entry.OI; } // ------------------------------------------------------------ }
// ********************************************************************** public void Write(DateTime dateTime, OrdLogEntry entry) { dw.WriteRecHeader(sid, dateTime); // ------------------------------------------------------------ long milliseconds = DateTimeHelper.ToMs(entry.DateTime); OrdLogEntryFlags flags = OrdLogEntryFlags.None; // ------------------------------------------------------------ if(lastMilliseconds != milliseconds) flags |= OrdLogEntryFlags.DateTime; if(lastOrderId != entry.OrderId) flags |= OrdLogEntryFlags.OrderId; if(lastPrice != entry.Price) flags |= OrdLogEntryFlags.Price; if(lastAmount != entry.Amount) flags |= OrdLogEntryFlags.Amount; if((entry.Flags & OrdLogFlags.Fill) != 0) { if(lastAmountRest != entry.AmountRest) flags |= OrdLogEntryFlags.AmountRest; if(lastDealId != entry.DealId) flags |= OrdLogEntryFlags.DealId; if(lastDealPrice != entry.DealPrice) flags |= OrdLogEntryFlags.DealPrice; if(lastOI != entry.OI) flags |= OrdLogEntryFlags.OI; } // ------------------------------------------------------------ dw.Write((byte)flags); // ------------------------------------------------------------ dw.Write((ushort)entry.Flags); if((flags & OrdLogEntryFlags.DateTime) != 0) dw.WriteGrowing(milliseconds, ref lastMilliseconds); if((flags & OrdLogEntryFlags.OrderId) != 0) { if((entry.Flags & OrdLogFlags.Add) != 0) dw.WriteGrowing(entry.OrderId, ref lastOrderId); else dw.WriteLeb128(entry.OrderId - lastOrderId); } if((flags & OrdLogEntryFlags.Price) != 0) { dw.WriteLeb128(entry.Price - lastPrice); lastPrice = entry.Price; } if((flags & OrdLogEntryFlags.Amount) != 0) { dw.WriteLeb128(entry.Amount); lastAmount = entry.Amount; } if((flags & OrdLogEntryFlags.AmountRest) != 0) { dw.WriteLeb128(entry.AmountRest); lastAmountRest = entry.AmountRest; } if((flags & OrdLogEntryFlags.DealId) != 0) dw.WriteGrowing(entry.DealId, ref lastDealId); if((flags & OrdLogEntryFlags.DealPrice) != 0) { dw.WriteLeb128(entry.DealPrice - lastDealPrice); lastDealPrice = entry.DealPrice; } if((flags & OrdLogEntryFlags.OI) != 0) { dw.WriteLeb128(entry.OI - lastOI); lastOI = entry.OI; } // ------------------------------------------------------------ }