// funkcja pomocnicza konwertująca dane z Fixml.MDEntry na DTO.MarketStatsData private static MarketStatsData MarketData_GetStatsData(MDEntry entry) { var stats = new MarketStatsData(); switch (entry.EntryType) { case MDEntryType.Vol: stats.TotalVolume = entry.Size; stats.TotalTurnover = entry.Turnover; break; case MDEntryType.Open: stats.OpeningPrice = entry.Price; stats.OpeningTurnover = entry.Turnover ?? 0; break; case MDEntryType.Close: stats.ClosingPrice = entry.Price; stats.ClosingTurnover = entry.Turnover ?? 0; break; case MDEntryType.High: stats.HighestPrice = entry.Price; break; case MDEntryType.Low: stats.LowestPrice = entry.Price; break; case MDEntryType.Ref: stats.ReferencePrice = entry.Price; break; } return(stats); }
// funkcja pomocnicza konwertująca obiekt Fixml.MDEntry na DTO.MarketData private static MarketData MarketData_GetData(MDEntry entry) { var data = new MarketData(); data.Instrument = entry.Instrument.Convert(); switch (entry.EntryType) { case MDEntryType.Buy: data.BuyOffer = MarketData_GetOfferData(entry); break; case MDEntryType.Sell: data.SellOffer = MarketData_GetOfferData(entry); break; case MDEntryType.Trade: data.Trade = MarketData_GetTradeData(entry); break; case MDEntryType.Lop: data.OpenInt = entry.Size; break; case MDEntryType.Vol: case MDEntryType.Open: case MDEntryType.Close: case MDEntryType.High: case MDEntryType.Low: case MDEntryType.Ref: data.Stats = MarketData_GetStatsData(entry); break; default: return(null); // pozostałe pomijamy } return(data); }
protected override QuotSnapExtInfo300611 deserialize(byte[] bytes) { if (bytes == null || bytes.Length < 4) { return(null); } QuotSnapExtInfo300611 rtn = new QuotSnapExtInfo300611(); Array.Reverse(bytes, 0, 4); rtn.NoMDEntries = BitConverter.ToUInt32(bytes, 0); if (rtn.NoMDEntries > 0) { rtn.MDEntries = new MDEntry[rtn.NoMDEntries]; int startIndex = 4; for (int entryIndex = 0; entryIndex < rtn.NoMDEntries; entryIndex++) { if (bytes.Length - startIndex >= mdEntrySize) { var mdEntryBytes = bytes.Skip(startIndex).Take(mdEntrySize).ToArray(); MDEntry mdEntry = BigEndianStructHelper <MDEntry> .BytesToStruct(mdEntryBytes, MsgConsts.MsgEncoding); startIndex += mdEntrySize; rtn.MDEntries[entryIndex] = mdEntry; } else { return(null); } } } return(rtn); }
// funkcja pomocnicza konwertująca dane z Fixml.MDEntry na DTO.MarketTradeData private static MarketTradeData MarketData_GetTradeData(MDEntry entry) { var trade = new MarketTradeData(); trade.Time = entry.DateTime; trade.Price = (decimal)entry.Price; trade.Quantity = entry.Size ?? 0; // może być null dla notowań indeksów return(trade); }
protected override QuotSnapExtInfo300111 deserialize(byte[] bytes) { if (bytes == null || bytes.Length < 4) { return(null); } QuotSnapExtInfo300111 rtn = new QuotSnapExtInfo300111(); Array.Reverse(bytes, 0, 4); rtn.NoMDEntries = BitConverter.ToUInt32(bytes, 0); if (rtn.NoMDEntries > 0) { rtn.MDEntries = new MDEntry[rtn.NoMDEntries]; int startIndex = 4; for (int entryIndex = 0; entryIndex < rtn.NoMDEntries; entryIndex++) { if (bytes.Length - startIndex >= mdEntrySize) { var mdEntryBytes = bytes.Skip(startIndex).Take(mdEntrySize).ToArray(); MDEntry mdEntry = new MDEntry(); mdEntry.Entry = BigEndianStructHelper <MDEntryWithoutOrders> .BytesToStruct(mdEntryBytes, MsgConsts.MsgEncoding); startIndex += mdEntrySize; if (mdEntry.Entry.NoOrders > 0) { if (bytes.Length - startIndex >= orderSize * mdEntry.Entry.NoOrders) { mdEntry.Orders = new Order[mdEntry.Entry.NoOrders]; for (int orderIndex = 0; orderIndex < mdEntry.Entry.NoOrders; orderIndex++) { var orderBytes = bytes.Skip(startIndex).Take(orderSize).ToArray(); Order order = BigEndianStructHelper <Order> .BytesToStruct(orderBytes, MsgConsts.MsgEncoding); mdEntry.Orders[orderIndex] = order; startIndex += orderSize; } } else { return(null); } } rtn.MDEntries[entryIndex] = mdEntry; } else { return(null); } } } return(rtn); }
// funkcja pomocnicza konwertująca dane z Fixml.MDEntry na DTO.MarketOfferData private static MarketOfferData MarketData_GetOfferData(MDEntry entry) { var offer = new MarketOfferData(); offer.Level = (int)entry.Level; offer.Update = (entry.UpdateAction != MDUpdateAction.New); if (entry.UpdateAction != MDUpdateAction.Delete) { switch (entry.PriceStr) { case "PKC": offer.PriceType = PriceType.PKC; break; case "PCR": offer.PriceType = PriceType.PCR; break; case "PCRO": offer.PriceType = PriceType.PCRO; break; } offer.PriceLimit = entry.Price; offer.Volume = (uint)entry.Size; offer.Count = (uint)entry.Orders; } return(offer); }