コード例 #1
0
 /**
  * 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);
     }
 }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
 public virtual void onMessage(MarketDataIncrementalRefresh message, QuickFix.SessionID session)
 {
     throw new QuickFix.UnsupportedMessageType();
 }
コード例 #6
0
        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);
            }
        }
コード例 #7
0
        /**
         * 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);
            }
        }
コード例 #8
0
        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);
            }
        }