Exemplo n.º 1
0
        private void ProcessarMensagemUnitario(string mensagem)
        {
            try
            {
                // Layout mensagem UNITARIO:
                //
                // Tipo de Mensagem     X(2)
                // Data                 N(8)        Formato AAAAMMDD
                // Hora                 N(9)        Formato HHMMSSmmm (mmm = milisegundos)
                // Código Instrumento   X(20)
                //
                // Data mensagem        N(8)       Formato AAAAMMDD
                // Hora mensagem        N(6)       Formato HHMMSS
                // Preço Unitario       N(13)
                //
                CotacaoANG cotacao = new CotacaoANG();

                cotacao.A = mensagem.Substring(19, 20).Trim();
                if (!mensagem.Substring(39, 14).Equals("00000000000000"))
                {
                    cotacao.Dt = DateTime.ParseExact(mensagem.Substring(39, 14), "yyyyMMddHHmmss", ciBR);
                }
                cotacao.Pu = Convert.ToDouble(mensagem.Substring(53, 13), ciBR);

                _db.GravaCotacao(cotacao);
                _db.GravaCotacaoOMS(cotacao);
                logger.DebugFormat("Gravado Unitario: Ativo[{0}] Data[{1}] PrecoUnitario[{2}]",
                                   cotacao.A, cotacao.Dt, cotacao.Pu);
            }
            catch (Exception ex)
            {
                logger.Error("ProcessarMensagemUnitario: " + ex.Message, ex);
            }
        }
Exemplo n.º 2
0
 public void AtualizarCotacao(CotacaoANG cotacao)
 {
     try
     {
         if (!cotacao.A.Equals("IBOV"))
         {
             if (cotacao.Cp != 0)
             {
                 _volumeIbovespa += cotacao.Vl;
             }
             _db.AtualizaCotacao(cotacao);
         }
         else
         {
             CotacaoANG cotacaoIbovespa = cotacao.Clone() as CotacaoANG;
             cotacaoIbovespa.Vl = _volumeIbovespa;
             _volumeIbovespa    = 0;
             _db.AtualizaCotacao(cotacaoIbovespa);
         }
     }
     catch (Exception ex)
     {
         logger.Debug("AtualizarCotacao: " + ex.Message, ex);
     }
 }
Exemplo n.º 3
0
        private void ProcessarMensagemFechamento(string mensagem)
        {
            try
            {
                // Layout mensagem FECHAMENTO:
                //
                // Tipo de Mensagem     X(2)
                // Data                 N(8)        Formato AAAAMMDD
                // Hora                 N(9)        Formato HHMMSSmmm (mmm = milisegundos)
                // Código Instrumento   X(20)
                //
                // Data mensagem        N(8)       Formato AAAAMMDD
                // Hora mensagem        N(6)       Formato HHMMSS
                // Preço Fechamento     N(13)
                //
                CotacaoANG cotacao = new CotacaoANG();

                cotacao.A  = mensagem.Substring(19, 20).Trim();
                cotacao.Dt = DateTime.Now;
                if (!mensagem.Substring(39, 14).StartsWith("000"))
                {
                    cotacao.Dt = DateTime.ParseExact(mensagem.Substring(39, 14), "yyyyMMddHHmmss", ciBR);
                }
                cotacao.Fe = Convert.ToDouble(mensagem.Substring(53, 13), ciBR);
                cotacao.Vl = Convert.ToDouble(mensagem.Substring(68, 13), ciBR);
                cotacao.To = Convert.ToDouble(mensagem.Substring(81, 8), ciBR);

                _db.GravaCotacao(cotacao);
                _db.GravaCotacaoOMS(cotacao);

                DateTime inicioPregao = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 10, 0, 0);
                DateTime hj           = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0);

                if ((cotacao.Dt.CompareTo(hj) < 0 || cotacao.Dt.CompareTo(inicioPregao) > 0) &&
                    cotacao.Fe > 0 && cotacao.Vl > 0 && cotacao.To > 0)
                {
                    _db.GravaCotacaoPLD(cotacao);

                    logger.DebugFormat("Gravado Fechamento PLD: Ativo[{0}] Data[{1}] Fechamento [{2}] Volume[{3}] Qtde Negocios [{4}]",
                                       cotacao.A,
                                       cotacao.Dt,
                                       cotacao.Fe,
                                       cotacao.Vl,
                                       cotacao.To);
                }

                logger.DebugFormat("Gravado Fechamento: Ativo[{0}] Data[{1}] PrecoFechamento[{2}]",
                                   cotacao.A, cotacao.Dt, cotacao.Fe);
            }
            catch (Exception ex)
            {
                if (!String.IsNullOrEmpty(mensagem))
                {
                    logger.Error("MENSAGEM [" + mensagem + "]");
                }

                logger.Error("ProcessarMensagemFechamento: " + ex.Message, ex);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="cotacao"></param>
        public void GravarNegocio(CotacaoANG negocio, string id)
        {
            string dump = string.Format("Gravar: Ativo[{0}] DataCotacao[{1}] Id[{2}] Preco[{3}]",
                                        negocio.A, negocio.Dt, id, negocio.Pr);

            logger.Debug(dump);

            _db.GravaNegocio(negocio, id);
        }
Exemplo n.º 5
0
 /// <summary>
 /// ProcessaSerieHistorica -
 /// Essa funcao trata as mensagens de Serie Historica,
 /// efetuando a gravacao quando necessario no banco de dados
 /// </summary>
 /// <param name="cotacao"></param>
 public void ProcessaSerieHistorica(CotacaoANG cotacao)
 {
     try
     {
         GravarSerieHistorica(cotacao);
     }
     catch (Exception ex)
     {
         logger.Debug("ProcessaSerieHistorica: " + ex.Message);
     }
 }
Exemplo n.º 6
0
        private void ProcessarMensagemFechamento(string mensagem)
        {
            try
            {
                // Layout mensagem FECHAMENTO:
                //
                // Tipo de Mensagem     X(2)
                // Data                 N(8)        Formato AAAAMMDD
                // Hora                 N(9)        Formato HHMMSSmmm (mmm = milisegundos)
                // Código Instrumento   X(20)
                //
                // Data mensagem        N(8)       Formato AAAAMMDD
                // Hora mensagem        N(6)       Formato HHMMSS
                // Preço Fechamento     N(13)
                // Tipo de Bolsa	    X(2)        Espaços, ou Bovespa = BV, ou BM&F = BF
                //
                CotacaoANG cotacao = new CotacaoANG();

                string ativo      = mensagem.Substring(19, 20).Trim();
                string dataHora   = mensagem.Substring(39, 14);
                string fechamento = mensagem.Substring(53, 13);
                string bolsa      = mensagem.Substring(66, 2);

                cotacao.Dt = DateTime.Now;

                if (!dataHora.StartsWith("000"))
                {
                    cotacao.Dt = DateTime.ParseExact(dataHora, "yyyyMMddHHmmss", ciBR);
                }

                logger.DebugFormat("Instrumento[{0}]: Fechamento [{1}]", ativo, mensagem);

                if (bolsa.Equals("BV"))
                {
                    cotacao.Bo = "BOV";
                }
                else
                {
                    cotacao.Bo = "BMF";
                }

                cotacao.A  = ativo;
                cotacao.Fe = Convert.ToDouble(fechamento, ciBR);

                _db.GravaCotacaoOracle(cotacao);
                logger.DebugFormat("Gravado Fechamento: Ativo[{0}] Data[{1}] PrecoFechamento[{2}]",
                                   cotacao.A, cotacao.Dt, cotacao.Fe);
            }
            catch (Exception ex)
            {
                logger.Error("ProcessarMensagemFechamento: " + ex.Message, ex);
            }
        }
Exemplo n.º 7
0
        private void ProcessarMensagemCotacao(string mensagem)
        {
            try
            {
                // Layout mensagem NEGOCIO:
                //
                // Tipo de Mensagem     X(2)
                // Tipo de Bolsa	    X(2)        Espaços, ou Bovespa = BV, ou BM&F = BF
                // Data                 N(8)        Formato AAAAMMDD
                // Hora                 N(9)        Formato HHMMSSmmm (mmm = milisegundos)
                // Código Instrumento   X(20)
                //
                // Data                 N(8)        Formato AAAAMMDD
                // Hora                 N(9)        Formato HHMMSSmmm (mmm = milisegundos)
                // Corretora Compradora N(8)
                // Corretora Vendedora  N(8)
                // Preço                N(13)
                // Quantidade           N(12)
                // Máxima do dia        N(13)
                // Mínima do dia        N(13)
                // Volume Acumulado     N(13)
                // Número de Negócios   N(8)
                // Indicador Variação   X(1)        Variação positiva: “ “ (espaço em branco), Variação negativa: “-“
                // Variação             N(8)
                // Estado do Papel      N(1)        0 – não negociado, 1 – em leilão, 2 – em negociação, 3 – suspenso, 4 – congelado, 5 – inibido
                //
                CotacaoANG cotacao = new CotacaoANG();

                string dataNegocio = mensagem.Substring(41, 14);
                string estado      = mensagem.Substring(155, 1);

                // Grava instrumentos em negociação e com data válida
                if (estado.Equals("2") && dataNegocio.StartsWith("0000") == false)
                {
                    cotacao.A  = mensagem.Substring(21, 20).Trim();
                    cotacao.Dt = DateTime.ParseExact(dataNegocio, "yyyyMMddHHmmss", ciBR);
                    cotacao.Pr = Convert.ToDouble(mensagem.Substring(74, 13), ciBR);
                    cotacao.Os = Convert.ToDouble(mensagem.Substring(146, 9).Trim(), ciBR);

                    _db.GravaCotacao(cotacao);
                    _db.GravaCotacaoOMS(cotacao);
                    logger.DebugFormat("Gravado Cotacao: Ativo[{0}] Data[{1}] Preco[{2}] Variacao[{3}]",
                                       cotacao.A, cotacao.Dt, cotacao.Pr, cotacao.Os);
                }
            }
            catch (Exception ex)
            {
                logger.Error("ProcessarMensagemCotacao: " + ex.Message, ex);
            }
        }
Exemplo n.º 8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="cotacao"></param>
        public void GravarSerieHistorica(CotacaoANG cotacao)
        {
            string dump = string.Format("Gravar serie historica: {0} D:{1} A:{2} F:{3} m:{4} M:{5} O:{6}",
                                        cotacao.A,
                                        cotacao.Dt,
                                        cotacao.Ab,
                                        cotacao.Fe,
                                        cotacao.Mi,
                                        cotacao.Mx,
                                        cotacao.Os);

            logger.Debug(dump);

            _db.GravaSerieHistorica(cotacao);
        }
Exemplo n.º 9
0
        private void ProcessarMensagemAbertura(string mensagem)
        {
            try
            {
                ANGAbertura angAbertura = Utils.FromBinaryString <ANGAbertura>(mensagem);

                // Layout mensagem ABERTURA:
                //
                // Tipo de Mensagem     X(2)
                // Data                 N(8)        Formato AAAAMMDD
                // Hora                 N(9)        Formato HHMMSSmmm (mmm = milisegundos)
                // Código Instrumento   X(20)
                //
                // Data mensagem        N(8)       Formato AAAAMMDD
                // Hora mensagem        N(6)       Formato HHMMSS
                // Preço Abertura       N(13)
                //
                CotacaoANG cotacao = new CotacaoANG();

                cotacao.A = angAbertura.Instrumento.ByteArrayToString().Trim();

                cotacao.Dt = DateTime.Now;
                if (!angAbertura.DataHoraAbertura.ByteArrayToString().StartsWith("000"))
                {
                    cotacao.Dt = DateTime.ParseExact(angAbertura.DataHoraAbertura.ByteArrayToString(), "yyyyMMddHHmmss", ciBR);
                }
                cotacao.Ab = Convert.ToDouble(angAbertura.PrecoAbertura.ByteArrayToString(), ciBR);

                //cotacao.A = mensagem.Substring(19, 20).Trim();
                //if (!mensagem.Substring(39, 14).Equals("00000000000000"))
                //    cotacao.Dt = DateTime.ParseExact(mensagem.Substring(39, 14), "yyyyMMddHHmmss", ciBR);
                //cotacao.Ab = Convert.ToDouble(mensagem.Substring(53, 13), ciBR);

                _db.GravaCotacao(cotacao);
                _db.GravaCotacaoOMS(cotacao);
                logger.DebugFormat("Gravado Abertura: Ativo[{0}] Data[{1}] PrecoAbertura[{2}]",
                                   cotacao.A, cotacao.Dt, cotacao.Ab);
            }
            catch (Exception ex)
            {
                if (!String.IsNullOrEmpty(mensagem))
                {
                    logger.Error("MENSAGEM [" + mensagem + "]");
                }

                logger.Error("ProcessarMensagemAbertura: " + ex.Message, ex);
            }
        }
Exemplo n.º 10
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="cotacao"></param>
        public void GravarCotacao(CotacaoANG cotacao)
        {
            string dump = string.Format("Gravar ponto: {0} D:{1} A:{2} F:{3} m:{4} M:{5} O:{6} P:{7}",
                                        cotacao.A,
                                        cotacao.Dt,
                                        cotacao.Ab,
                                        cotacao.Fe,
                                        cotacao.Mi,
                                        cotacao.Mx,
                                        cotacao.Os,
                                        cotacao.Pr);

            logger.Debug(dump);

            // Primeiro remove as cotacoes de dias anteriores, depois grava
            //_db.LimparCotacao(cotacao, _config.DiasRetencaoCotacao);

            _db.GravaAtivoCotacao(cotacao);
        }
Exemplo n.º 11
0
        public void Run()
        {
            bool bWait   = false;
            long lastlog = 0;

            while (_bKeepRunning)
            {
                if (_mds == null || _mds.IsConectado() == false)
                {
                    _mds = new MDSPackageSocket();

                    _mds.IpAddr = _config.MDSAddress;
                    _mds.Port   = _config.MDSPort;

                    _mds.OnFastQuoteReceived += new MDSMessageReceivedHandler(OnCotacao);
                    _mds.OpenConnection();
                }

                CotacaoANG cotacao = null;
                if (queueCotacao.TryDequeue(out cotacao))
                {
                    GravarNegocio(cotacao);

                    TimeSpan ts = new TimeSpan(DateTime.Now.Ticks - lastlog);
                    if (ts.TotalMilliseconds > 2000)
                    {
                        logger.Info("Mensagens de cotacao para gravar no banco: " + queueCotacao.Count);
                        lastlog = DateTime.Now.Ticks;
                    }

                    continue;
                }

                Thread.Sleep(100);
            }
        }
Exemplo n.º 12
0
        public void ProcessarMensagemSerieHistorica(string pMensagem)
        {
            try
            {
                CotacaoANG mensagem = new CotacaoANG();

                // Layout da mensagem de Serie Historica
                //
                // Nome	                    Tipo(Tamanho)   Observação
                // Tipo de Mensagem         X(2)            'SH'
                // Tipo de Bolsa            X(2)            Bovespa = BV, BM&F = BF
                // Data                     N(8)            Formato AAAAMMDD
                // Hora                     N(9)            Formato HHMMSSmmm (mmm = milisegundos)
                // Código do Instrumento    X(20)
                //
                // Data da Cotação          N(8)            Formato AAAAMMDD
                // Hora da Cotação          N(9)            Formato HHMMSSmmm (mmm = milisegundos)
                // Preço Abertura           N(13)
                // Preço Fechamento         N(13)
                // Preço Médio              N(13)
                // Preço Máximo             N(13)
                // Preço Mínimo             N(13)
                // Ind Oscilação            X(1)            positiva: “ “ (espaço em branco), Variação negativa: “-“
                // Percentual Oscilação     N(8)
                // Melhor Oferta de Compra  N(13)
                // Melhor Oferta de Venda   N(13)
                // Quantidade de Negócios   N(8)
                // Quantidade de Papéis     N(12)
                // Volume Acumulado         N(13)
                // Preço de Ajuste          N(13)

                mensagem.A = pMensagem.Substring(21, 20).Trim();

                // Obtem o tipo da bolsa
                if (pMensagem.Substring(2, 2).Equals("BV"))
                {
                    mensagem.Bo = "BOV";
                }
                else
                {
                    mensagem.Bo = "BMF";
                }

                mensagem.Ab  = Convert.ToDouble(pMensagem.Substring(58, 13), ciBR);
                mensagem.Mx  = Convert.ToDouble(pMensagem.Substring(97, 13), ciBR);
                mensagem.Mi  = Convert.ToDouble(pMensagem.Substring(110, 13), ciBR);
                mensagem.Me  = Convert.ToDouble(pMensagem.Substring(84, 13), ciBR);
                mensagem.Fe  = Convert.ToDouble(pMensagem.Substring(71, 13), ciBR);
                mensagem.Os  = Convert.ToDouble(pMensagem.Substring(123, 9).Trim(), ciBR);
                mensagem.OfC = Convert.ToDouble(pMensagem.Substring(132, 13), ciBR);
                mensagem.OfV = Convert.ToDouble(pMensagem.Substring(145, 13), ciBR);
                mensagem.To  = Convert.ToDouble(pMensagem.Substring(158, 8), ciBR);
                mensagem.Qt  = Convert.ToDouble(pMensagem.Substring(166, 12), ciBR);
                mensagem.Vl  = Convert.ToDouble(pMensagem.Substring(178, 13), ciBR);
                mensagem.Aj  = Convert.ToDouble(pMensagem.Substring(191, 13), ciBR);

                String data = pMensagem.Substring(41, 8) + "000000";
                mensagem.Dt = DateTime.ParseExact(data, "yyyyMMddHHmmss", ciBR);

                lock (queueSerieHistorica)
                {
                    queueSerieHistorica.Enqueue(mensagem);
                }
            }
            catch (Exception ex)
            {
                logger.Error("ProcessarMensagem: " + ex.Message, ex);
            }
        }
Exemplo n.º 13
0
        public void ProcessarMensagemCotacao(string pMensagem)
        {
            try
            {
                CotacaoANG cotacao = new CotacaoANG();

                // Layout da mensagem de negocio
                // Header
                // Nome	Tipo	Tamanho	Observação
                // Tipo de Mensagem X(2)
                // Tipo de Bolsa	X(2) Espaços, ou:
                //    Bovespa = BV
                //    BM&F = BF
                // Data	N(8) - Formato AAAAMMDD
                // Hora	N(9) - Formato HHMMSSmmm (mmm = milisegundos)
                // Código do Instrumento	X(20)

                // Tipo de Mensagem = NE
                // Nome	Tipo	Tamanho	Observação
                // Data	N(8) - Formato AAAAMMDD
                // Hora	N(9) - Formato HHMMSSmmm (mmm = milisegundos)
                // Corretora Compradora	N(8)
                // Corretora Vendedora	N(8)
                // Preço	N(13)
                // Quantidade N(12)
                // Máxima do dia	N(13)
                // Mínima do dia	N(13)
                // Volume Acumulado	N(13)
                // Número de Negócios	N(8)
                // Indicador de Variação em Relação ao Fechamento do Dia Anterior	X(1)
                //     Variação positiva: “ “ (espaço em branco)
                //     Variação negativa: “-“
                // Percentual de var. em relação ao Fechamento do Dia Anterior	N(8)
                // Estado do Papel	N(1)
                //    0 – Papel não negociado
                //    1 – Papel em leilão
                //    2 – Papel em negociação
                //    3 – Papel suspenso
                //    4 – Papel congelado
                //    5 – Papel inibido
                // Estado do Instrumento para Análise Gráfica N(1)
                //    0 - Inicial
                //    1 - Congela data/hora
                //    2 - Fechamento do dia
                //    3 - Despreza mensagens


                // Exemplos de mensagens:
                //<---              header             --->data    hora     comprad vend    preco        quantidade  max dia      min dia      vol          nneg    VvFech   E
                //0 2 4       12       21                  41      49       58      66      74           87          99           112          125          138      147     155           169                   191          204          217     225          238
                //NEBV20100702162034355PETR4               201007021618470000000013100000027000000026,800000000000200000000026,860000000026,5200209283409,0000010513 00001,3220000000029.900000000026.45C000000950000000026,79000000002800V000000270000000026,80000000000200
                //NEBV20100702162238788PETR4               201007021620510000000002700000131000000026,850000000000200000000026,870000000026,5200211588300,0000010621 00001,5120000000029.900000000026.45C000000270000000026,85000000000200V000000080000000026,86000000000200

                //try { this.HeaderTipoMensagem = pMensagem.Substring(0, 2); }

                string bolsa                = pMensagem.Substring(2, 2);
                string ativo                = pMensagem.Substring(21, 20).Trim();
                string dataNegocio          = pMensagem.Substring(41, 8);
                string horaNegocio          = pMensagem.Substring(49, 6);
                string preco                = pMensagem.Substring(74, 13);
                string quantidade           = pMensagem.Substring(87, 12);
                string oscilacao            = pMensagem.Substring(146, 9).Trim();
                string compradora           = pMensagem.Substring(58, 8);
                string estado               = pMensagem.Substring(155, 1);
                string estadoAnaliseGrafica = pMensagem.Substring(156, 1);

                // Ignora mensagens que não estiverem no estado "Papel em negociação"
                if (!estado.Equals("2"))
                {
                    return;
                }

                // Ignora mensagens que estiverem no estado "Despreza Mensagens"
                if (estadoAnaliseGrafica.Equals("3"))
                {
                    return;
                }

                // Obtem o tipo da bolsa
                if (bolsa.Equals("BV"))
                {
                    cotacao.Bo = "BOV";
                }
                else
                {
                    cotacao.Bo = "BMF";
                }

                cotacao.A = ativo;

                string dataHoraNegocio = dataNegocio + horaNegocio;

                if (dataHoraNegocio.StartsWith("0000") == false)
                {
                    cotacao.Pr = Convert.ToDouble(preco, ciBR);

                    // Ignora mensagens com preço zerado
                    if (cotacao.Pr == 0)
                    {
                        return;
                    }

                    // Despreza a data/hora das mensagens que estiverem no estado "Congela DataHora"
                    if (estadoAnaliseGrafica.Equals("1"))
                    {
                        cotacao.Dt = DateTime.MinValue;
                    }
                    else
                    {
                        cotacao.Dt = DateTime.ParseExact(dataHoraNegocio, "yyyyMMddHHmmss", ciBR);
                    }

                    cotacao.Qt = Convert.ToDouble(quantidade, ciBR);
                    cotacao.Vl = cotacao.Pr * cotacao.Qt;
                    cotacao.Os = Convert.ToDouble(oscilacao, ciBR);
                    cotacao.Cp = Convert.ToInt32(compradora);
                    cotacao.St = Convert.ToInt32(estadoAnaliseGrafica);

                    lock (queueCotacao)
                    {
                        queueCotacao.Enqueue(cotacao);
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error("ProcessarMensagem: " + ex.Message, ex);
            }
        }
Exemplo n.º 14
0
        public void ProcessarMensagemCotacao(string pMensagem)
        {
            try
            {
                CotacaoANG cotacao = new CotacaoANG();

                // Layout da mensagem de negocio
                // Header
                // Nome	Tipo	Tamanho	Observação
                // Tipo de Mensagem X(2)
                // Tipo de Bolsa	X(2) Espaços, ou:
                //    Bovespa = BV
                //    BM&F = BF
                // Data	N(8) - Formato AAAAMMDD
                // Hora	N(9) - Formato HHMMSSmmm (mmm = milisegundos)
                // Código do Instrumento	X(20)

                // Tipo de Mensagem = NE
                // Nome	Tipo	Tamanho	Observação
                // Data	N(8) - Formato AAAAMMDD
                // Hora	N(9) - Formato HHMMSSmmm (mmm = milisegundos)
                // Corretora Compradora	N(8)
                // Corretora Vendedora	N(8)
                // Preço	N(13)
                // Quantidade N(12)
                // Máxima do dia	N(13)
                // Mínima do dia	N(13)
                // Volume Acumulado	N(13)
                // Número de Negócios	N(8)
                // Indicador de Variação em Relação ao Fechamento do Dia Anterior	X(1)
                //     Variação positiva: “ “ (espaço em branco)
                //     Variação negativa: “-“
                // Percentual de var. em relação ao Fechamento do Dia Anterior	N(8)
                // Estado do Papel	N(1)
                //    0 – Papel não negociado
                //    1 – Papel em leilão
                //    2 – Papel em negociação
                //    3 – Papel suspenso
                //    4 – Papel congelado
                //    5 – Papel inibido


                // Exemplos de mensagens:
                //<---              header             --->data    hora     comprad vend    preco        quantidade  max dia      min dia      vol          nneg    VvFech   E
                //0 2 4       12       21                  41      49       58      66      74           87          99           112          125          138      147     155           169                   191          204          217     225          238
                //NEBV20100702162034355PETR4               201007021618470000000013100000027000000026,800000000000200000000026,860000000026,5200209283409,0000010513 00001,3220000000029.900000000026.45C000000950000000026,79000000002800V000000270000000026,80000000000200
                //NEBV20100702162238788PETR4               201007021620510000000002700000131000000026,850000000000200000000026,870000000026,5200211588300,0000010621 00001,5120000000029.900000000026.45C000000270000000026,85000000000200V000000080000000026,86000000000200

                //try { this.HeaderTipoMensagem = pMensagem.Substring(0, 2); }

                string id              = pMensagem.Substring(4, 17);
                string ativo           = pMensagem.Substring(21, 20).Trim();
                string bolsa           = pMensagem.Substring(2, 2);
                string dataHoraNegocio = pMensagem.Substring(41, 14);
                string compradora      = pMensagem.Substring(58, 8);
                string vendedora       = pMensagem.Substring(66, 8);
                string preco           = pMensagem.Substring(74, 13);
                string quantidade      = pMensagem.Substring(87, 12);
                string maximo          = pMensagem.Substring(99, 13);
                string minimo          = pMensagem.Substring(112, 13);
                string volume          = pMensagem.Substring(125, 13);
                string totalNegocios   = pMensagem.Substring(138, 8);
                string oscilacao       = pMensagem.Substring(146, 9).Trim();
                string status          = pMensagem.Substring(155, 1);

                if (dataHoraNegocio.StartsWith("0000") == false)
                {
                    cotacao.A  = ativo;
                    cotacao.Bo = bolsa;
                    cotacao.Dt = DateTime.ParseExact(dataHoraNegocio, "yyyyMMddHHmmss", ciBR);
                    cotacao.Cp = Convert.ToInt16(compradora, ciBR);
                    cotacao.Vd = Convert.ToInt16(vendedora, ciBR);
                    cotacao.Pr = Convert.ToDouble(preco, ciBR);
                    cotacao.Qt = Convert.ToDouble(quantidade, ciBR);
                    cotacao.Mx = Convert.ToDouble(maximo, ciBR);
                    cotacao.Mi = Convert.ToDouble(minimo, ciBR);
                    cotacao.Vl = Convert.ToDouble(volume, ciBR);
                    cotacao.To = Convert.ToDouble(totalNegocios, ciBR);
                    cotacao.Os = Convert.ToDouble(oscilacao, ciBR);
                    cotacao.St = Convert.ToInt16(status, ciBR);

                    GravarNegocio(cotacao, id);
                }
            }
            catch (Exception ex)
            {
                logger.Error("ProcessarMensagem: " + ex.Message, ex);
            }
        }
Exemplo n.º 15
0
        private void ProcessarMensagemCotacao(string pMensagem)
        {
            try
            {
                // Layout mensagem NEGOCIO:
                //
                // Tipo de Mensagem     X(2)
                // Tipo de Bolsa	    X(2)        Espaços, ou Bovespa = BV, ou BM&F = BF
                // Data                 N(8)        Formato AAAAMMDD
                // Hora                 N(9)        Formato HHMMSSmmm (mmm = milisegundos)
                // Código Instrumento   X(20)
                //
                // Data                 N(8)        Formato AAAAMMDD
                // Hora                 N(9)        Formato HHMMSSmmm (mmm = milisegundos)
                // Corretora Compradora N(8)
                // Corretora Vendedora  N(8)
                // Preço                N(13)
                // Quantidade           N(12)
                // Máxima do dia        N(13)
                // Mínima do dia        N(13)
                // Volume Acumulado     N(13)
                // Número de Negócios   N(8)
                // Indicador Variação   X(1)        Variação positiva: “ “ (espaço em branco), Variação negativa: “-“
                // Variação             N(8)
                // Estado do Papel      N(1)        0 – não negociado, 1 – em leilão, 2 – em negociação, 3 – suspenso, 4 – congelado, 5 – inibido
                //
                CotacaoANG cotacao = new CotacaoANG();

                string bolsa       = pMensagem.Substring(2, 2);
                string ativo       = pMensagem.Substring(21, 20).Trim();
                string dataNegocio = pMensagem.Substring(41, 8);
                string horaNegocio = pMensagem.Substring(49, 6);
                string preco       = pMensagem.Substring(74, 13);

                string minimo         = pMensagem.Substring(112, 13);
                string maximo         = pMensagem.Substring(99, 13);
                string volume         = pMensagem.Substring(125, 13);
                string numeroNegocios = pMensagem.Substring(138, 8);

                string oscilacao = pMensagem.Substring(146, 9).Trim();
                string estado    = pMensagem.Substring(155, 1);

                if (bolsa.Equals("BV"))
                {
                    // Ignora mensagens que não estiverem no estado "Papel em negociação", para BOVESPA
                    if (!estado.Equals("2"))
                    {
                        return;
                    }
                }
                else
                {
                    // Ignora mensagens que não estiverem no estado "Papel em negociação" e "Em leilão", para BMF
                    if (!estado.Equals("2") && !estado.Equals("1"))
                    {
                        return;
                    }
                }

                // Grava instrumentos em negociação e com data válida
                cotacao.Dt = DateTime.Now;
                if (!dataNegocio.StartsWith("000"))
                {
                    string dataHoraNegocio = dataNegocio + horaNegocio;
                    cotacao.Dt = DateTime.ParseExact(dataHoraNegocio, "yyyyMMddHHmmss", ciBR);
                }

                logger.DebugFormat("Instrumento[{0}]: Cotacao [{1}]", ativo, pMensagem);

                // Obtem o tipo da bolsa
                if (bolsa.Equals("BV"))
                {
                    cotacao.Bo = "BOV";
                }
                else
                {
                    cotacao.Bo = "BMF";
                }

                cotacao.A  = ativo;
                cotacao.Pr = Convert.ToDouble(preco, ciBR);
                cotacao.Os = Convert.ToDouble(oscilacao, ciBR);
                cotacao.Mi = Convert.ToDouble(minimo, ciBR);
                cotacao.Mx = Convert.ToDouble(maximo, ciBR);
                cotacao.Vl = Convert.ToDouble(volume, ciBR);
                cotacao.To = Convert.ToDouble(numeroNegocios, ciBR);

                _db.GravaCotacaoOracle(cotacao);
                logger.DebugFormat("Gravado Cotacao: Ativo[{0}] Data[{1}] Preco[{2}] Variacao[{3}]",
                                   cotacao.A, cotacao.Dt, cotacao.Pr, cotacao.Os);
            }
            catch (Exception ex)
            {
                logger.Error("ProcessarMensagem: " + ex.Message, ex);
            }
        }
Exemplo n.º 16
0
        private void ProcessarMensagemCotacao(string mensagem)
        {
            try
            {
                // Layout mensagem NEGOCIO:
                //
                // Tipo de Mensagem     X(2)
                // Tipo de Bolsa	    X(2)        Espaços, ou Bovespa = BV, ou BM&F = BF
                // Data                 N(8)        Formato AAAAMMDD
                // Hora                 N(9)        Formato HHMMSSmmm (mmm = milisegundos)
                // Código Instrumento   X(20)
                //
                // Data                 N(8)        Formato AAAAMMDD
                // Hora                 N(9)        Formato HHMMSSmmm (mmm = milisegundos)
                // Corretora Compradora N(8)
                // Corretora Vendedora  N(8)
                // Preço                N(13)
                // Quantidade           N(12)
                // Máxima do dia        N(13)
                // Mínima do dia        N(13)
                // Volume Acumulado     N(13)
                // Número de Negócios   N(8)
                // Indicador Variação   X(1)        Variação positiva: “ “ (espaço em branco), Variação negativa: “-“
                // Variação             N(8)
                // Estado do Papel      N(1)        0 – não negociado, 1 – em leilão, 2 – em negociação, 3 – suspenso, 4 – congelado, 5 – inibido
                //
                CotacaoANG cotacao = new CotacaoANG();

                string dataNegocio = mensagem.Substring(41, 14);
                string estado      = mensagem.Substring(155, 1);
                string fase        = mensagem.Substring(156, 1);

                cotacao.A = mensagem.Substring(21, 20).Trim();
                //cotacao.Dt = DateTime.ParseExact(dataNegocio, "yyyyMMddHHmmss", ciBR);
                cotacao.Pr = Convert.ToDouble(mensagem.Substring(74, 13), ciBR);
                cotacao.Os = Convert.ToDouble(mensagem.Substring(146, 9).Trim(), ciBR);
                cotacao.Vl = Convert.ToDouble(mensagem.Substring(126, 13), ciBR);
                cotacao.To = Convert.ToDouble(mensagem.Substring(138, 8), ciBR);

                // Grava instrumentos em negociação e com data válida
                if (estado.Equals("2") && dataNegocio.StartsWith("000") == false)
                {
                    cotacao.Dt = DateTime.ParseExact(dataNegocio, "yyyyMMddHHmmss", ciBR);

                    _db.GravaCotacao(cotacao);
                    _db.GravaCotacaoOMS(cotacao);

                    //if (!dctTimeStamp.ContainsKey(cotacao.A))
                    //{
                    //    _db.GravaCotacaoPLD(cotacao);
                    //    dctTimeStamp.AddOrUpdate(cotacao.A, DateTime.Now.Ticks, (key, oldValue) => DateTime.Now.Ticks);
                    //}
                    //else
                    //{
                    //    long lastsignal = 0;
                    //    if (dctTimeStamp.TryGetValue(cotacao.A, out lastsignal))
                    //    {
                    //        TimeSpan ts = new TimeSpan(DateTime.Now.Ticks - lastsignal);

                    //        if (ts.TotalSeconds > 1.0)
                    //        {
                    //            _db.GravaCotacaoPLD(cotacao);
                    //        }
                    //    }
                    //}

                    logger.DebugFormat("Gravado Cotacao: Ativo[{0}] Data[{1}] Preco[{2}] Variacao[{3}]",
                                       cotacao.A, cotacao.Dt, cotacao.Pr, cotacao.Os);
                }

                // Grava fechamento
                if (!estado.Equals("1") &&
                    !estado.Equals("2") &&
                    !dataNegocio.StartsWith("000") &&
                    fase.Equals(FASE_NEGOCIACAO_ENVIADO_SERIE_HISTORICA))
                {
                    cotacao.Dt = DateTime.ParseExact(dataNegocio, "yyyyMMddHHmmss", ciBR);
                    cotacao.Fe = cotacao.Pr;

                    DateTime inicioPregao = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 10, 0, 0);
                    DateTime hj           = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0);

                    if (cotacao.Dt.CompareTo(hj) < 0 || cotacao.Dt.CompareTo(inicioPregao) > 0)
                    {
                        if (cotacao.Fe > 0 && cotacao.Vl > 0 && cotacao.To > 0)
                        {
                            _db.GravaCotacaoPLD(cotacao);

                            logger.DebugFormat("Gravado Fechamento PLD: Ativo[{0}] Data[{1}] Fechamento [{2}] Volume[{3}] Qtde Negocios [{4}]",
                                               cotacao.A,
                                               cotacao.Dt,
                                               cotacao.Fe,
                                               cotacao.Vl,
                                               cotacao.To);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                if (!String.IsNullOrEmpty(mensagem))
                {
                    logger.Error("MENSAGEM [" + mensagem + "]");
                }
                logger.Error("ProcessarMensagemCotacao: " + ex.Message, ex);
            }
        }
Exemplo n.º 17
0
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog1 = new OpenFileDialog();

            openFileDialog1.Filter      = "Text Files (.txt)|*.txt|All Files (*.*)|*.*";
            openFileDialog1.FilterIndex = 1;

            DialogResult okClicked = openFileDialog1.ShowDialog();

            if (okClicked == System.Windows.Forms.DialogResult.OK)
            {
                // Open the selected file to read.
                System.IO.Stream       fileStream = openFileDialog1.OpenFile();
                System.IO.StreamReader reader     = new System.IO.StreamReader(fileStream);

                do
                {
                    string line = reader.ReadLine();

                    string regtype = line.Substring(0, 2);

                    switch (regtype)
                    {
                    case "00":
                        CotaHist_Header header = Utilities.MarshalFromStringBlock <CotaHist_Header>(line);
                        break;

                    case "01":
                        CotaHist_DadosCotacao registro = Utilities.MarshalFromStringBlock <CotaHist_DadosCotacao>(line);

                        CotacaoANG cotacao = new CotacaoANG();
                        cotacao.A  = registro.CodNegociacao.ByteArrayToString().Trim();
                        cotacao.Ab = Convert.ToDouble(registro.PrecoAbertura.ByteArrayToDecimal(2));
                        cotacao.Bo = "BOV";
                        string datapregao = registro.DataPregao.ByteArrayToString() + "000000";
                        cotacao.Dt  = DateTime.ParseExact(datapregao, "yyyyMMddHHmmss", CultureInfo.InvariantCulture);
                        cotacao.Fe  = Convert.ToDouble(registro.PrecoUltimo.ByteArrayToDecimal(2));
                        cotacao.Id  = DateTime.Now.ToString("yyyyMMddHHmmssfff");
                        cotacao.Me  = Convert.ToDouble(registro.PrecoMedio.ByteArrayToDecimal(2));
                        cotacao.Mi  = Convert.ToDouble(registro.PrecoMinimo.ByteArrayToDecimal(2));
                        cotacao.Mx  = Convert.ToDouble(registro.PrecoMaximo.ByteArrayToDecimal(2));
                        cotacao.OfC = Convert.ToDouble(registro.MelhorPrecoCompra.ByteArrayToDecimal(2));
                        cotacao.OfV = Convert.ToDouble(registro.MelhorPrecoVenda.ByteArrayToDecimal(2));
                        cotacao.Pr  = Convert.ToDouble(registro.PrecoUltimo.ByteArrayToDecimal(2));
                        cotacao.Qt  = Convert.ToDouble(registro.QuantidadeTotal.ByteArrayToString());
                        cotacao.To  = Convert.ToDouble(registro.TotalNegocios.ByteArrayToString());
                        cotacao.Vl  = Convert.ToDouble(registro.VolumeTotal.ByteArrayToDecimal(2));
                        if (cotacao.Fe > cotacao.Ab)
                        {
                            cotacao.Os = (cotacao.Fe / cotacao.Ab);
                        }
                        else
                        if (cotacao.Fe < cotacao.Ab)
                        {
                            cotacao.Os = ((1 - (cotacao.Fe / cotacao.Ab)) * 100) * -1;
                        }
                        else
                        {
                            cotacao.Os = 0.0;
                        }

                        string msg = String.Format("Gravando Historico: A:[{0}] Dt [{1}] Ab[{2}] Max[{3}] Med[{4}] Min[{5}] Fe[{6}] Osc[{7}] Qt[{8}] Vl[{9}] Neg[{10}]",
                                                   cotacao.A,
                                                   cotacao.Dt.ToString("yyyy/MM/dd HH:mm:ss"),
                                                   cotacao.Ab,
                                                   cotacao.Mx,
                                                   cotacao.Me,
                                                   cotacao.Mi,
                                                   cotacao.Fe,
                                                   cotacao.Os,
                                                   cotacao.Qt,
                                                   cotacao.Vl,
                                                   cotacao.To);

                        txtResult.Text += msg + "\r\n";

                        ANGPersistenciaDB db = new ANGPersistenciaDB();
                        db.ConnectionString = ConfigurationManager.ConnectionStrings["MDS"].ConnectionString;

                        db.GravaSerieHistorica(cotacao);

                        Application.DoEvents();
                        break;

                    case "99":
                        CotaHist_Trailer trailer = Utilities.MarshalFromStringBlock <CotaHist_Trailer>(line);
                        break;
                    }
                }while(!reader.EndOfStream);


                reader.Close();
                fileStream.Close();
            }
        }