예제 #1
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);
            }
        }
예제 #2
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);
            }
        }