コード例 #1
0
        private void atualizacaoCriacao(BovespaLivroOfertas livro, string linha, string instrumento)
        {
            logger.Debug("Ação: Criação");

            string idOferta =
                linha.Substring(
                    ID_OFERTA_DATA_OFERTA_INI,
                    ID_OFERTA_NUM_SEQUENCIAL_OFERTA_FIM - ID_OFERTA_DATA_OFERTA_INI) +
                linha.Substring(
                    ID_OFERTA_ID_CORRETORA_INI,
                    ID_OFERTA_ID_CORRETORA_FIM - ID_OFERTA_ID_CORRETORA_INI);

            char sentidoOferta = linha[SENTIDO_OFERTA_INI];

            Decimal preco;

            char tipoPrecoRegistrado = linha[TIPO_PRECO_REGISTRADO_INI];

            if (tipoPrecoRegistrado == TIPO_PRECO_REGISTRADO_PRECO_ABERTURA &&
                sentidoOferta == SENTIDO_OFERTA_COMPRA)
            {
                //preco = PRECO_ABERTURA;
                preco = Decimal.MaxValue;
            }
            else
            {
                string strpreco = normalizador.normaliza(
                    linha[PRECO_OFERTA_FORMATO_INI],
                    linha.Substring(PRECO_OFERTA_PRECO_INI,
                                    PRECO_OFERTA_PRECO_FIM - PRECO_OFERTA_PRECO_INI));

                preco = Convert.ToDecimal(strpreco, CultureInfo.CreateSpecificCulture("pt-BR"));
            }

            long quantidade = Convert.ToInt64(linha.Substring(QTD_EXIBIDA_INI, QTD_EXIBIDA_FIM - QTD_EXIBIDA_INI));

            string DataHoraOferta = linha.Substring(DATA_HORA_OFERTA_INI, DATA_HORA_OFERTA_FIM - DATA_HORA_OFERTA_INI);

            livro.inserir(idOferta,
                          sentidoOferta,
                          preco,
                          quantidade,
                          instrumento,
                          tipoPrecoRegistrado.ToString(),
                          DataHoraOferta);
        }
コード例 #2
0
        private void processCancelamento(string instrumento, BovespaLivroOfertas livro, string linha)
        {
            // caso esteja iniciando reenvio, "limpa" o livro
            if (emReenvio)
            {
                if (!papeisReenvio.Contains(instrumento))
                {
                    livro.limpar();
                    papeisReenvio.Add(instrumento);
                }
            }

            string idOferta =
                linha.Substring(
                    S4_ID_OFERTA_DATA_OFERTA_INI,
                    S4_ID_OFERTA_NUM_SEQUENCIAL_OFERTA_FIM - S4_ID_OFERTA_DATA_OFERTA_INI) +
                linha.Substring(
                    S4_ID_OFERTA_ID_CORRETORA_INI,
                    S4_ID_OFERTA_ID_CORRETORA_FIM - S4_ID_OFERTA_ID_CORRETORA_INI);

            char sentidoOferta = linha[S4_ID_OFERTA_SENTIDO_OFERTA_INI];

            char tipoCancelamento = linha[TIPO_CANCELAMENTO_INI];

            switch (tipoCancelamento)
            {
            case '1':
                cancelaOfertaSomente(instrumento, livro, idOferta, sentidoOferta);
                break;

            case '2':
                cancelaOfertaEMelhores(instrumento, livro, idOferta, sentidoOferta);
                break;

            case '3':
                cancelaTodasOfertas(livro, idOferta, sentidoOferta);
                break;
            }
        }
コード例 #3
0
        private void cancelaOfertaEMelhores(
            string instrumento,
            BovespaLivroOfertas livro,
            string idOferta,
            char sentidoOferta)
        {
            logger.Debug("Ação: Cancela esta oferta e melhores");

            try
            {
                livro.cancelarOfertaEMelhores(idOferta, sentidoOferta);
            }
            catch (BovespaLivroOfertasException bloe)
            {
                logger.Error("Erro no cancelamento (Oferta e melhores)" +
                             " - Id Oferta: " + idOferta +
                             " - Sentido Oferta: " + sentidoOferta +
                             " - Instrumento: " + instrumento +
                             " - Descrição: " + bloe.Message);
            }

            return;
        }
コード例 #4
0
        private void atualizacaoAlteracao(string instrumento, BovespaLivroOfertas livro, string linha)
        {
            logger.Debug("Ação: Alteração");

            string idOferta =
                linha.Substring(
                    ID_OFERTA_DATA_OFERTA_INI,
                    ID_OFERTA_NUM_SEQUENCIAL_OFERTA_FIM - ID_OFERTA_DATA_OFERTA_INI) +
                linha.Substring(
                    ID_OFERTA_ID_CORRETORA_INI,
                    ID_OFERTA_ID_CORRETORA_FIM - ID_OFERTA_ID_CORRETORA_INI);

            string strpreco =
                normalizador.normaliza(
                    linha[PRECO_OFERTA_FORMATO_INI],
                    linha.Substring(PRECO_OFERTA_PRECO_INI,
                                    PRECO_OFERTA_PRECO_FIM - PRECO_OFERTA_PRECO_INI));

            Decimal preco = Convert.ToDecimal(strpreco, CultureInfo.CreateSpecificCulture("pt-BR"));

            long quantidade = Convert.ToInt64(linha.Substring(QTD_EXIBIDA_INI, QTD_EXIBIDA_FIM - QTD_EXIBIDA_INI));

            char sentidoOferta = linha[SENTIDO_OFERTA_INI];

            try
            {
                livro.alterar(idOferta, sentidoOferta, preco, quantidade);
            }
            catch (BovespaLivroOfertasException bloe)
            {
                logger.Error("Erro na alteração" +
                             " - Id Oferta: " + idOferta +
                             " - Sentido Oferta: " + sentidoOferta +
                             " - Instrumento: " + instrumento +
                             " - Descrição: " + bloe.Message);
            }
        }
コード例 #5
0
        private void processAtualizacao(string instrumento, BovespaLivroOfertas livro, string linha)
        {
            // caso esteja iniciando reenvio, "limpa" o livro
            if (emReenvio)
            {
                if (!papeisReenvio.Contains(instrumento))
                {
                    livro.limpar();
                    papeisReenvio.Add(instrumento);
                }
            }

            // temporariamente descartando mensagens com oferta a preço de abertura
            //if (linha.charAt(TIPO_PRECO_REGISTRADO_INI) == 'O')
            //	return;

            char tipoAcao = linha[TIPO_ACAO_INI];

            switch (tipoAcao)
            {
            case 'C':
                atualizacaoCriacao(livro, linha, instrumento);
                break;

            case 'M':
                atualizacaoAlteracao(instrumento, livro, linha);
                break;

            case 'R':
                atualizacaoRetransmissao(livro, linha, instrumento);
                break;

            default:
                break;
            }
        }
コード例 #6
0
        public void Run()
        {
            EventoBovespa evento;
            long          antes;
            long          depois;

            logger.Info("Iniciando thread BovespaLivroOfertasConsumer");

            while (_dadosGlobais.KeepRunning)
            {
                evento = null;
                try
                {
                    evento = filaMensagensLivroOfertas.Pop();
                }
                catch (Exception intExcept)
                {
                    logger.Error("InterruptedException na leitura da fila de mensagens do retransmissor:");
                    logger.Debug(intExcept.Message);
                    continue;
                }

                antes = DateTime.Now.Ticks;

                string instrumento = evento.Instrumento;
                string tipo        = evento.Tipo;
                string corpo       = evento.Corpo;

                logger.Debug(evento.MsgID + " " + evento.Cabecalho + " S4 " + instrumento);

                try
                {
                    if (tipo.Equals("S0"))
                    {
                        processReenvio(corpo);
                        logger.Debug(evento.Cabecalho + " S0 " + instrumento);
                    }
                    else
                    {
                        BovespaLivroOfertas livro = null;

                        // S3 e S4 irão manipular o livro correspondente ao instrumento
                        if (todosLivros.ContainsKey(instrumento))
                        {
                            livro = todosLivros[instrumento];
                        }
                        else
                        {
                            logger.Debug("Livro do instrumento " + instrumento + " não existe, criando novo livro");
                            livro = new BovespaLivroOfertas();
                            todosLivros.Add(instrumento, livro);
                        }

                        if (tipo.Equals("S3"))
                        {
                            processAtualizacao(instrumento, livro, corpo);
                        }
                        else if (tipo.Equals("S4"))
                        {
                            processCancelamento(instrumento, livro, corpo);
                        }

                        if (!emReenvio)
                        {
                            // Buffer de montagem da mensagem
                            StringBuilder cabecalho = new StringBuilder();

                            // Cabeçalho
                            cabecalho.Append(ConstantesMDS.TIPO_REQUISICAO_LIVRO);
                            cabecalho.Append(ConstantesMDS.DESCRICAO_DE_BOLSA_BOVESPA);
                            cabecalho.Append(DateTime.Now.ToString("yyyyMMddHHmmssfff"));
                            cabecalho.Append(string.Format("%1$-20s", instrumento));

                            EventoAtualizacaoLivroOfertas atualof =
                                new EventoAtualizacaoLivroOfertas(instrumento,
                                                                  ConstantesMDS.PLATAFORMA_TODAS,
                                                                  cabecalho.ToString(),
                                                                  livro.serializarLivroRobot(BovespaLivroOfertas.LIVRO_COMPRA),
                                                                  livro.serializarLivroRobot(BovespaLivroOfertas.LIVRO_VENDA));


                            // Gera evento de atualização
                            // ATP: implementar ?
                            //o eventoAtualizaLivro =
                            //    new EventoAtualizacaoLivroOfertas(
                            //        instrumento, ConstantesMDS.PLATAFORMA_TODAS,
                            //        cabecalho.toString(),
                            //        livroCompra.toString(),
                            //        livroVenda.toString());

                            //epService.EPRuntime.SendEvent(eventoAtualizaLivro);
                        }

                        if (this._dadosGlobais.Parametros.DebugLOFBovespa &&
                            this._dadosGlobais.Parametros.DebugLOFBovPapel != null &&
                            this._dadosGlobais.Parametros.DebugLOFBovPapel.Equals(instrumento))
                        {
                            string loffile = string.Format("{0}\\{1}.txt",
                                                           _dadosGlobais.Parametros.DiretorioDump,
                                                           _dadosGlobais.Parametros.DebugLOFBovPapel);

                            FileStream   fs     = File.Open(loffile, FileMode.Create, FileAccess.Write);
                            StreamWriter writer = new StreamWriter(fs, Encoding.ASCII);


                            writer.WriteLine("=".PadRight(100, '='));
                            writer.WriteLine(evento.MsgID + "," + evento.Cabecalho + evento.Corpo);
                            List <string> livroCompraSerializado = livro.imprimirLivro(BovespaLivroOfertas.LIVRO_COMPRA);
                            List <string> livroVendaSerializado  = livro.imprimirLivro(BovespaLivroOfertas.LIVRO_VENDA);
                            for (int i = 0; (i < livroCompraSerializado.Count || i < livroVendaSerializado.Count); i++)
                            {
                                string linha = "";
                                if (i < livroCompraSerializado.Count)
                                {
                                    linha += livroCompraSerializado[i];
                                }
                                else
                                {
                                    linha += " ".PadLeft(20);
                                }

                                linha += "|";
                                if (i < livroVendaSerializado.Count)
                                {
                                    linha += livroVendaSerializado[i];
                                }
                                else
                                {
                                    linha += " ".PadLeft(20);
                                }

                                writer.WriteLine(linha);
                            }

                            writer.WriteLine("=".PadRight(100, '='));
                            writer.Close();
                            fs.Close();
                        }
                    }

                    _dadosGlobais.LastMdgIDBov = evento.MsgID;
                }
                catch (Exception e)
                {
                    logger.Error("Exception em BovespaLivroOfertasListener: ", e);
                    logger.Error("Processando a mensagem:");
                    logger.Error(evento.MsgID + "," + evento.Cabecalho + evento.Corpo);
                }

                depois = DateTime.Now.Ticks;
                TimeSpan duracao = new TimeSpan(depois - antes);
                logger.Debug("Duracao do processamento: " + duracao.TotalMilliseconds +
                             " ms (Mensagens na fila: " + filaMensagensLivroOfertas.Count + ")");
            }
        }
コード例 #7
0
        private void cancelaTodasOfertas(BovespaLivroOfertas livro, string idOferta, char sentidoOferta)
        {
            logger.Debug("Ação: Cancela todas as ofertas");

            return;
        }
コード例 #8
0
 private void atualizacaoRetransmissao(BovespaLivroOfertas livro, string linha, string instrumento)
 {
     logger.Debug("Ação: Retransmissão");
     atualizacaoCriacao(livro, linha, instrumento);
     return;
 }