/** * Callback chamado após o recebimento de mensagem FIX * de incremental de MarketData. * */ public override void onMessage(MarketDataIncrementalRefresh message, SessionID sessionId) { try { filaMensagensFIXIncremental.Push(message); } catch (Exception e) { logger.Error("Falha na leitura da fila filaMensagensFIXIncremental: " + e.Message); } }
public void OnMessage(MarketDataIncrementalRefresh msg, SessionID sessionID) { FIX44XMLParser parser = new FIX44XMLParser(); Console.WriteLine("==========Header::=========="); Console.WriteLine(parser.getFieldName(Tags.BeginString.ToString()) + ":: " + msg.Header.GetString(Tags.BeginString)); Console.WriteLine(parser.getFieldName(Tags.BodyLength.ToString()) + ":: " + msg.Header.GetString(Tags.BodyLength)); Console.WriteLine(parser.getFieldName(Tags.MsgType.ToString()) + ":: MarketDataIncrementalRefresh (" + msg.Header.GetString(Tags.MsgType) + ")"); Console.WriteLine(parser.getFieldName(Tags.MsgSeqNum.ToString()) + ":: " + msg.Header.GetString(Tags.MsgSeqNum)); Console.WriteLine(parser.getFieldName(Tags.SenderCompID.ToString()) + ":: " + msg.Header.GetString(Tags.SenderCompID)); Console.WriteLine(parser.getFieldName(Tags.SendingTime.ToString()) + ":: " + msg.Header.GetString(Tags.SendingTime)); Console.WriteLine(parser.getFieldName(Tags.TargetCompID.ToString()) + ":: " + msg.Header.GetString(Tags.TargetCompID)); Console.WriteLine("==========Body:: =========="); Console.WriteLine(parser.getFieldName(Tags.NoMDEntries.ToString()) + ":: " + msg.GetString(Tags.NoMDEntries)); MarketDataIncrementalRefresh.NoMDEntriesGroup g0 = new MarketDataIncrementalRefresh.NoMDEntriesGroup(); for (int grpIndex = 1; grpIndex <= msg.GetInt(Tags.NoMDEntries); grpIndex += 1) { Console.WriteLine("---------- ----------"); msg.GetGroup(grpIndex, g0); // Console.WriteLine(parser.getFieldName(Tags.MDUpdateAction.ToString())+":: "+g0.GetString(Tags.MDUpdateAction)); Console.WriteLine(parser.getFieldName(Tags.MDUpdateAction.ToString()) + ":: " + parser.getFieldName(Tags.MDUpdateAction.ToString(), g0.GetString(Tags.MDUpdateAction).ToString()) + "(" + g0.GetString(Tags.MDUpdateAction) + ")" ); Console.WriteLine(parser.getFieldName(Tags.MDEntryType.ToString()) + ":: " + parser.getFieldName(Tags.MDEntryType.ToString(), g0.GetString(Tags.MDEntryType).ToString()) + "(" + g0.GetString(Tags.MDEntryType) + ")" ); try { Console.WriteLine(parser.getFieldName(Tags.MDEntryPx.ToString()) + ":: " + g0.GetString(Tags.MDEntryPx)); } catch (Exception ex) { Console.WriteLine(parser.getFieldName(Tags.MDEntrySize.ToString()) + ":: " + g0.GetString(Tags.MDEntrySize)); } Console.WriteLine(parser.getFieldName(Tags.MDEntryDate.ToString()) + ":: " + g0.GetString(Tags.MDEntryDate)); Console.WriteLine(parser.getFieldName(Tags.MDEntryTime.ToString()) + ":: " + g0.GetString(Tags.MDEntryTime)); } Console.WriteLine("==========Trailer:: =========="); Console.WriteLine(parser.getFieldName(Tags.CheckSum.ToString()) + ":: " + msg.Trailer.GetString(Tags.CheckSum)); }
public void OnMessage(MarketDataIncrementalRefresh message, SessionID session) { var noMdEntries = message.NoMDEntries; var listOfMdEntries = noMdEntries.getValue(); //message.GetGroup(1, noMdEntries); var group = new MarketDataIncrementalRefresh.NoMDEntriesGroup(); Group gr = message.GetGroup(1, group); string sym = message.MDReqID.getValue(); var price = new MarketPrice(); for (int i = 1; i <= listOfMdEntries; i++) { group = (MarketDataIncrementalRefresh.NoMDEntriesGroup)message.GetGroup(i, group); price.Symbol = group.Symbol.getValue(); MDEntryType mdentrytype = group.MDEntryType; if (mdentrytype.getValue() == '0') //bid { decimal px = group.MDEntryPx.getValue(); price.Bid = px; } else if (mdentrytype.getValue() == '1') //offer { decimal px = group.MDEntryPx.getValue(); price.Offer = px; } price.TimeStamp = group.MDEntryTime.ToString(); } if (OnMarketDataIncrementalRefresh != null) { OnMarketDataIncrementalRefresh(price); } }
public virtual void onMessage(MarketDataIncrementalRefresh message, QuickFix.SessionID session) { throw new QuickFix.UnsupportedMessageType(); }
private void trataMensagemFIX(MarketDataIncrementalRefresh mensagem) { listaInstrumentosFIX = new SortedDictionary <string, MarketDataIncrementalRefresh.NoMDEntries>(); try { int ocorrencias = mensagem.getInt(QuickFix.NoMDEntries.FIELD); // Apenas trata a mensagem FIX se houver ocorrências no NoMDEntries if (ocorrencias > 0) { uint ocorrencia; for (ocorrencia = 1; ocorrencia <= ocorrencias; ocorrencia++) { MarketDataIncrementalRefresh.NoMDEntries grupo = new MarketDataIncrementalRefresh.NoMDEntries(); mensagem.getGroup(ocorrencia, grupo); // Mensagens de Negocio são armazenadas e enviadas depois de todas as outras mensagens if (grupo.getChar(MDEntryType.FIELD) == MDEntryType.TRADE) { if (!listaInstrumentosFIX.ContainsKey(grupo.getString(6032))) { listaInstrumentosFIX.Add(grupo.getString(6032), grupo); } } enviaIncremental( mensagem.getHeader().getInt(MsgSeqNum.FIELD), ocorrencia, mensagem, grupo); } if (listaInstrumentosFIX.Count > 0) { IEnumerator <KeyValuePair <string, MarketDataIncrementalRefresh.NoMDEntries> > itens = listaInstrumentosFIX.GetEnumerator(); while (itens.MoveNext()) { KeyValuePair <string, MarketDataIncrementalRefresh.NoMDEntries> item = itens.Current; enviaIncremental( Convert.ToInt32(item.Key), ocorrencia++, mensagem, item.Value); } } } else { logger.Debug("INCREMENTAL - sem elementos"); } } catch (FieldNotFound e) { logger.Error("Campo nao encontrado na mensagem: " + e.Message); } catch (Exception ex) { logger.Error("Falha na leitura da fila filaMensagensRetransmissorBMF: " + ex.Message, ex); } }
/** * Monta e envia mensagem Market Data de Incremental para o ESPER. * Layout da mensagem: * SeqNum 9(15) * type X(1) * symbol X(20) * securityID X(20) * body: * MDUpdateAction (279) X(1) * MDEntryID (278) X(10) * MDEntryDate (272) X(8) * MDEntryTime (273) X(8) * * MDEntryPositionNo (290) X(6) * MDEntryPx (270) X(15) * MDEntrySize (271) X(15) * NumberOfOrders (346) X(15) * OrderID (37) X(50) * MDEntryBuyer (288) X(10) * MDEntrySeller (289) X(10) * TickDirection (274) X(1) * NetChgPrevDay (451) X(11) * UniqueTradeID (6032) X(20) * OpenCloseSettlFlag (286) 9(1) * TradingSessionSubID (625) X(2) * SecurityTradingStatus (326) 9(3) * NoReferentialPrices (6932) 9(3) * ReferentialPriceType (6934) 9(1) * ReferentialPx (6933) X(15) * TransactTime (60) X(20) */ private void enviaIncremental( int seqNum, uint ocorrencia, MarketDataIncrementalRefresh mensagem, MarketDataIncrementalRefresh.NoMDEntries grupo) { string mensagemMDS; try { // SeqNum - 9(15) mensagemMDS = seqNum.ToString("D10"); mensagemMDS = mensagemMDS + ocorrencia.ToString("D5"); // type - X(1) mensagemMDS = mensagemMDS + grupo.getChar(MDEntryType.FIELD); // symbol - X(20) mensagemMDS = mensagemMDS + grupo.getString(Symbol.FIELD).PadLeft(20); // securityID - X(20) mensagemMDS = mensagemMDS + grupo.getString(SecurityID.FIELD).PadLeft(20); // body // Se OFERTA_COMPRA ou OFERTA_VENDA, envia NEW em MDUpdateAction if (grupo.getChar(MDEntryType.FIELD) == MDEntryType.BID || grupo.getChar(MDEntryType.FIELD) == MDEntryType.OFFER) { mensagemMDS = mensagemMDS + (grupo.isSet(new MDUpdateAction()) ? grupo.getChar(MDUpdateAction.FIELD) : MDUpdateAction.NEW); } else { mensagemMDS = mensagemMDS + MDUpdateAction.NEW; } mensagemMDS = mensagemMDS + " ".PadLeft(10);; mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntryDate()) ? grupo.getString(MDEntryDate.FIELD) : " ").PadLeft(8); mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntryTime()) ? grupo.getString(MDEntryTime.FIELD) : " ").PadLeft(8); mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntryPositionNo()) ? grupo.getString(MDEntryPositionNo.FIELD) : " ").PadLeft(6); mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntryPx()) ? grupo.getString(MDEntryPx.FIELD) : " ").PadLeft(15); mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntrySize()) ? grupo.getString(MDEntrySize.FIELD) : " ").PadLeft(15); mensagemMDS = mensagemMDS + (grupo.isSet(new NumberOfOrders()) ? grupo.getString(NumberOfOrders.FIELD) : " ").PadLeft(15); mensagemMDS = mensagemMDS + (grupo.isSet(new OrderID()) ? grupo.getString(OrderID.FIELD) : " ").PadLeft(50); mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntryBuyer()) ? grupo.getString(MDEntryBuyer.FIELD) : " ").PadLeft(10); mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntrySeller()) ? grupo.getString(MDEntrySeller.FIELD) : " ").PadLeft(10); mensagemMDS = mensagemMDS + (grupo.isSet(new TickDirection()) ? grupo.getString(TickDirection.FIELD) : " "); mensagemMDS = mensagemMDS + (grupo.isSet(new NetChgPrevDay()) ? grupo.getString(NetChgPrevDay.FIELD) : " ").PadLeft(11); mensagemMDS = mensagemMDS + (grupo.isSetField(6032) ? grupo.getString(6032).PadLeft(20) : " ").PadLeft(20); mensagemMDS = mensagemMDS + (grupo.isSet(new OpenCloseSettlFlag()) ? grupo.getInt(OpenCloseSettlFlag.FIELD).ToString() : "0"); mensagemMDS = mensagemMDS + (grupo.isSet(new TradingSessionSubID()) ? grupo.getString(TradingSessionSubID.FIELD).PadLeft(2) : " "); mensagemMDS = mensagemMDS + (grupo.isSetField(326) ? grupo.getInt(326).ToString("D3") : "000"); if (grupo.isSetField(6932)) { int ocorrencias = grupo.getInt(6932); mensagemMDS = mensagemMDS + ocorrencias.ToString("D3"); for (uint ocorrenciaPrecos = 1; ocorrenciaPrecos <= ocorrencias; ocorrenciaPrecos++) { //ATP: Sinistraço!!!! Group grupoPrecos = new Group(6932, 6934, new int[] { 6934, 6933, 60, 0 }); grupo.getGroup(ocorrenciaPrecos, grupoPrecos); mensagemMDS = mensagemMDS + (grupoPrecos.isSetField(6934) ? grupoPrecos.getInt(6934).ToString("D1") : "0"); mensagemMDS = mensagemMDS + (grupoPrecos.isSetField(6933) ? grupoPrecos.getString(6933) : " ").PadLeft(15); mensagemMDS = mensagemMDS + (grupoPrecos.isSetField(TransactTime.FIELD) ? grupoPrecos.getString(TransactTime.FIELD) : " ").PadLeft(20); } } else { mensagemMDS = mensagemMDS + "000"; } try { filaMensagensRetransmissorBMF.Push(mensagemMDS); } catch (Exception e) { logger.Error("Falha na leitura da fila filaMensagensRetransmissorBMF: " + e.Message); } logger.Debug("INCREMENTAL - Instrumento[" + grupo.getString(Symbol.FIELD) + "] tipo[" + grupo.getChar(MDEntryType.FIELD) + "] acao[" + grupo.getChar(MDUpdateAction.FIELD) + "] Mensagem[" + mensagemMDS + "]"); } catch (FieldNotFound e) { logger.Error("Campo nao encontrado na mensagem: " + e.Message); return; } catch (Exception ex) { logger.Error("enviaIncremental: " + ex.Message, ex); } }