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); } }
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); } }