Ejemplo n.º 1
0
        /**
         * Monta e envia mensagem de Instrumento da BM&F para o ESPER.
         * Layout da mensagem:
         *   SeqNum						9(15)
         *   type							X(1)	( '.' - Instrumento )
         *   symbol							X(20)
         *   securityID					X(20)
         *   body:
         *      SecurityIDSource (22)		X(1)
         *      Product (460)				9(3)
         *      CFICode (461)				X(6)
         *      SecurityType (167)			X(32)
         *      SecuritySubType (762)		X(32)
         *      MaturityMonthYear (200)	9(6)
         *      MaturityDate (541)		9(8)
         *      IssueDate (225)			9(8)
         *      CountryOfIssue (470)		X(2)
         *      ContractMultiplier (231)	X(15)
         *      SecurityExchange (207)	X(10)
         *      SecurityDesc (107)			X(100)
         *      ContractSettlMonth (667)	9(6)
         *      DatedDate (873)			9(8)
         *      Currency (15)				X(10)
         *      RoundLot (561)				9(15)
         *      MinTradeVol (562)			9(15)
         *      Asset (6937)				X(10)
         *      StrikePrice (202)			X(15)
         *      SecurityGroup (9918)		X(15)
         *
         * @param msgSeqNum
         * @param ocorrencia
         * @param grupo
         *
         */
        private void enviaInstrumento(
            int msgSeqNum,
            uint ocorrencia,
            SecurityList.NoRelatedSym grupo)
        {
            string mensagemMDS;

            try
            {
                // SeqNum - 9(15)
                mensagemMDS = msgSeqNum.ToString("D10");
                mensagemMDS = mensagemMDS + ocorrencia.ToString("D5");

                // type - X(1)
                mensagemMDS = mensagemMDS + '.';  // QuickFix.MDEntryType.INSTRUMENT;

                // symbol - X(20)
                mensagemMDS = mensagemMDS + grupo.getString(Symbol.FIELD).PadLeft(20);

                // securityID - X(20)
                mensagemMDS = mensagemMDS + grupo.getString(SecurityID.FIELD).PadLeft(20);

                // body
                mensagemMDS = mensagemMDS + (grupo.isSet(new SecurityIDSource()) ? grupo.getString(SecurityIDSource.FIELD) : " ").PadLeft(1);
                mensagemMDS = mensagemMDS + (grupo.isSet(new Product()) ? grupo.getInt(Product.FIELD) : 0).ToString("D3");
                mensagemMDS = mensagemMDS + (grupo.isSet(new CFICode()) ? grupo.getString(CFICode.FIELD) : " ").PadLeft(6);
                mensagemMDS = mensagemMDS + (grupo.isSet(new SecurityType()) ? grupo.getString(SecurityType.FIELD) : " ").PadLeft(32);
                mensagemMDS = mensagemMDS + (grupo.isSet(new SecuritySubType()) ? grupo.getString(SecuritySubType.FIELD) : " ").PadLeft(32);
                mensagemMDS = mensagemMDS + (grupo.isSet(new MaturityMonthYear()) ? grupo.getInt(MaturityMonthYear.FIELD) : 0).ToString("D6");
                mensagemMDS = mensagemMDS + (grupo.isSet(new MaturityDate()) ? grupo.getInt(MaturityDate.FIELD) : 0).ToString("D8");
                mensagemMDS = mensagemMDS + (grupo.isSet(new IssueDate()) ? grupo.getInt(IssueDate.FIELD) : 0).ToString("D8");
                mensagemMDS = mensagemMDS + (grupo.isSet(new CountryOfIssue()) ? grupo.getString(CountryOfIssue.FIELD) : " ").PadLeft(2);
                mensagemMDS = mensagemMDS + (grupo.isSet(new ContractMultiplier()) ? grupo.getString(ContractMultiplier.FIELD) : " ").PadLeft(15);
                mensagemMDS = mensagemMDS + (grupo.isSet(new SecurityExchange()) ? grupo.getString(SecurityExchange.FIELD) : " ").PadLeft(10);
                mensagemMDS = mensagemMDS + (grupo.isSet(new SecurityDesc()) ? grupo.getString(SecurityDesc.FIELD) : "").PadLeft(100);
                mensagemMDS = mensagemMDS + (grupo.isSet(new ContractSettlMonth()) ? grupo.getInt(ContractSettlMonth.FIELD) : 0).ToString("D6");
                mensagemMDS = mensagemMDS + (grupo.isSet(new DatedDate()) ? grupo.getInt(DatedDate.FIELD) : 0).ToString("D8");
                mensagemMDS = mensagemMDS + (grupo.isSet(new Currency()) ? grupo.getString(Currency.FIELD) : " ").PadLeft(10);
                mensagemMDS = mensagemMDS + (grupo.isSet(new RoundLot()) ? grupo.getInt(RoundLot.FIELD) : 0).ToString("D15");
                mensagemMDS = mensagemMDS + (grupo.isSet(new MinTradeVol()) ? grupo.getInt(MinTradeVol.FIELD) : 0).ToString("D15");
                // Asset
                mensagemMDS = mensagemMDS + (grupo.isSetField(6937) ? grupo.getString(6937) : " ").PadLeft(10);

                mensagemMDS = mensagemMDS + (grupo.isSet(new StrikePrice()) ? grupo.getString(StrikePrice.FIELD) : " ").PadLeft(15);

                // SecurityGroup
                mensagemMDS = mensagemMDS + (grupo.isSetField(9918) ? grupo.getString(9918) : " ").PadLeft(15);

                try
                {
                    filaMensagensRetransmissorBMF.Push(mensagemMDS);
                }
                catch (Exception e)
                {
                    logger.Error("Falha na leitura da fila filaMensagensRetransmissorBMF: " +
                                 e.Message);
                }

                logger.Debug("INSTRUMENT - Instrumento[" +
                             grupo.getString(Symbol.FIELD) + "] Mensagem[" +
                             mensagemMDS + "]");
            }
            catch (FieldNotFound e)
            {
                logger.Error("Campo nao encontrado na mensagem: " + e.Message, e);
                return;
            }
            catch (Exception ex)
            {
                logger.Error("enviaInstrumento(): " + ex.Message, ex);
                return;
            }
        }
Ejemplo n.º 2
0
        /**
         * Callback chamado após o recebimento de mensagem FIX de lista de
         * Instrumentos.
         *
         */
        public override void onMessage(QuickFix44.SecurityList message, SessionID sessionId)
        {
            try
            {
                int ocorrencias =
                    message.getInt(NoRelatedSym.FIELD);

                logger.Info("LISTA_INSTRUMENTO Sequencial[" +
                            message.getHeader().getString(MsgSeqNum.FIELD) +
                            "] Ocorrencias[" + ocorrencias + "]");

                for (uint ocorrencia = 1;
                     ocorrencia <= ocorrencias; ocorrencia++)
                {
                    SecurityList.NoRelatedSym grupo = new SecurityList.NoRelatedSym();
                    message.getGroup(ocorrencia, ((QuickFix.Group)grupo));

                    if (padraoInstrumentos != null)
                    {
                        // Se instrumento combinar com o padrao de instrumentos,
                        // efetua assinatura
                        if (padraoInstrumentos.IsMatch(grupo.getString(Symbol.FIELD)))
                        {
                            logger.InfoFormat("Requisitando assinatura {0}-{1}-{2}",
                                              grupo.getString(Symbol.FIELD),
                                              grupo.getString(SecurityID.FIELD),
                                              grupo.getString(SecurityIDSource.FIELD));

                            requisitaInstrumento(
                                SubscriptionRequestType.SNAPSHOT_PLUS_UPDATES,
                                grupo.getString(Symbol.FIELD),
                                grupo.getString(SecurityID.FIELD),
                                grupo.getString(SecurityIDSource.FIELD));

                            assinados = true;

                            if (!instrumentosAssinados.ContainsKey(
                                    grupo.getString(Symbol.FIELD)))
                            {
                                instrumentosAssinados.Add(
                                    grupo.getString(Symbol.FIELD),
                                    new DadosInstrumentosBMF(
                                        grupo.getString(SecurityID.FIELD),
                                        grupo.getString(SecurityIDSource.FIELD)));
                            }
                        }
                    }

                    enviaInstrumento(
                        message.getHeader().getInt(MsgSeqNum.FIELD),
                        ocorrencia,
                        grupo);

                    logger.Debug("INSTRUMENTO [" +
                                 grupo.getString(Symbol.FIELD) + "] Descricao[" +
                                 grupo.getString(SecurityDesc.FIELD) + "]");
                }
            }

            catch (FieldNotFound e)
            {
                logger.Error("Campo nao encontrado na mensagem: " + e.Message, e);
            }
        }