Exemplo n.º 1
0
        /**
         * Monta e envia requisição para assinatura de um instrumento.
         *
         */
        private void requisitaInstrumento(
            char tipoAssinatura,
            string instrumento,
            string codigo,
            string identificacao)
        {
            try
            {
                string            mdReqID;
                MarketDataRequest mensagemFIX = new MarketDataRequest();

                if (codigo != null && codigo.Length > 0)
                {
                    mdReqID = codigo;
                }
                else
                {
                    mdReqID = FIX_MDREQID_PADRAO;
                }

                mensagemFIX.setField(new MDReqID(mdReqID));
                mensagemFIX.setField(new SubscriptionRequestType(tipoAssinatura));
                mensagemFIX.setField(new MarketDepth(0));
                mensagemFIX.setField(new MDUpdateType(MDUpdateType.INCREMENTAL_REFRESH));

                MarketDataRequest.NoMDEntryTypes grupoTipo = new MarketDataRequest.NoMDEntryTypes();
                grupoTipo.set(new QuickFix.MDEntryType(MDEntryType.BID));
                mensagemFIX.addGroup(grupoTipo);
                grupoTipo.set(new QuickFix.MDEntryType(MDEntryType.OFFER));
                mensagemFIX.addGroup(grupoTipo);
                grupoTipo.set(new QuickFix.MDEntryType(MDEntryType.TRADE));
                mensagemFIX.addGroup(grupoTipo);
                grupoTipo.set(new QuickFix.MDEntryType(MDEntryType.OPENING_PRICE));
                mensagemFIX.addGroup(grupoTipo);
                grupoTipo.set(new QuickFix.MDEntryType(MDEntryType.CLOSING_PRICE));
                mensagemFIX.addGroup(grupoTipo);
                grupoTipo.set(new QuickFix.MDEntryType(MDEntryType.TRADING_SESSION_HIGH_PRICE));
                mensagemFIX.addGroup(grupoTipo);
                grupoTipo.set(new QuickFix.MDEntryType(MDEntryType.TRADING_SESSION_LOW_PRICE));
                mensagemFIX.addGroup(grupoTipo);
                grupoTipo.set(new QuickFix.MDEntryType(MDEntryType.TRADING_SESSION_VWAP_PRICE));
                mensagemFIX.addGroup(grupoTipo);
                grupoTipo.set(new QuickFix.MDEntryType(MDEntryType.TRADE_VOLUME));
                mensagemFIX.addGroup(grupoTipo);
                grupoTipo.set(new QuickFix.MDEntryType('a'));
                mensagemFIX.addGroup(grupoTipo);
                grupoTipo.set(new QuickFix.MDEntryType('b'));
                mensagemFIX.addGroup(grupoTipo);
                grupoTipo.set(new QuickFix.MDEntryType('c'));
                mensagemFIX.addGroup(grupoTipo);

                MarketDataRequest.NoRelatedSym grupo = new MarketDataRequest.NoRelatedSym();

                grupo.set(new Symbol(instrumento));

                if (codigo != null && codigo.Length > 0)
                {
                    grupo.set(new SecurityID(codigo));
                }

                if (identificacao != null && identificacao.Length > 0)
                {
                    grupo.set(new SecurityIDSource(identificacao));
                }

                mensagemFIX.addGroup(grupo);

                mensagemFIX.getHeader().setField(
                    new SenderCompID(sessao.getSenderCompID()));
                mensagemFIX.getHeader().setField(
                    new TargetCompID(sessao.getTargetCompID()));

                try
                {
                    Session.sendToTarget(mensagemFIX, sessao);
                }
                catch (SessionNotFound e)
                {
                    logger.Error("Sessao invalida: " + e.Message, e);
                }
            }
            catch (Exception ex)
            {
                logger.Error("requisitaMensagem: " + ex.Message, ex);
            }
        }