public void StartMonitor(object sender) { try { gLogger.Info("StartMonitor - Iniciando Monitor de Custodia"); htVencimentoDI = MonitorCustodiaDB.ObterVencimentosDI(); //lsFeriadosDI = MonitorCustodiaDB.Ob gLogger.Info("StartMonitor - Inicia rotina principal do sistema"); gLogger.Info("Pausa de 2 segundos"); Thread.Sleep(2000); gLogger.Info("Inicia Thread de calculo de posição de Custódia dos clientes a cada 5 segundos."); thThreadClientes = new Thread(new ThreadStart(ThreadClientes)); thThreadClientes.Name = "ThreadClientes"; thThreadClientes.Start(); gLogger.Info("Processo de inicialização finalizado"); gLogger.Info("Aguardando Transações ..."); } catch (Exception ex) { gLogger.Info("Ocorreu um erro ao acessar o metodo StartMonitor.", ex); } }
public MonitorCustodiaResponse ObterMonitorCustodiaMemoria(MonitorCustodiaRequest lRequest) { gLogger.Debug("Solicitação de consulta [ ObterMonitorCustodiaMemoria ] requisitada. Cliente = " + lRequest.CodigoCliente.ToString()); MonitorCustodiaResponse lRetorno = new MonitorCustodiaResponse(); MonitorCustodiaInfo lMonitorCliente = MonitorCustodiaDB.ConsultarDadosClienteMonitorCustodia(new MonitorCustodiaInfo() { CodigoClienteBov = lRequest.CodigoCliente.Value }); if ((lMonitorCliente.CodigoClienteBov.HasValue) || (lMonitorCliente.CodigoClienteBmf.HasValue)) { lock (MonitorCustodiaMemoria) { if (MonitorCustodiaMemoria.ContainsKey(lRequest.CodigoCliente)) { gLogger.InfoFormat("Pegou posicao do Cliente[{0}] da memoria", lRequest.CodigoCliente); lRetorno.MonitorCustodia = MonitorCustodiaMemoria[lRequest.CodigoCliente] as MonitorCustodiaInfo; } else { gLogger.Debug("A posicao do clienet[" + lRequest.CodigoCliente + "] não estava na memória"); gLogger.Debug("Recalcular posicao [" + lRequest.CodigoCliente + "] novamente"); MonitorCustodiaInfo lInfoPosicao = this.CalcularPosicaoCustodia(lRequest.CodigoCliente.Value); lRetorno.MonitorCustodia = lInfoPosicao; MonitorCustodiaMemoria.Add(lInfoPosicao.CodigoClienteBov, lInfoPosicao); } } } return(lRetorno); }
private decimal ObterCotacaoAtual(string Instument) { MonitorCustodiaDB.CotacaoValor lRetorno = new MonitorCustodiaDB.CotacaoValor(); lRetorno = new MonitorCustodiaDB().ObterCotacaoAtual(Instument); return(lRetorno.ValorCotacao); }
public MonitorCustodiaResponse ObterMonitorCustodiaMemoria(MonitorCustodiaRequest lRequest) { gLogger.Debug("Solicitação de consulta [ ObterMonitorCustodiaMemoria ] requisitada. Cliente = " + lRequest.CodigoCliente.ToString()); MonitorCustodiaResponse lRetorno = new MonitorCustodiaResponse(); try { gLogger.InfoFormat("Entrou no método-->> ObterMonitorCustodiaMemoria --> Antes do ConsultarDadosClienteMonitorCustodia"); MonitorCustodiaInfo lMonitorCliente = MonitorCustodiaDB.ConsultarDadosClienteMonitorCustodia(new MonitorCustodiaInfo() { CodigoClienteBov = lRequest.CodigoCliente.Value, CodAssessor = lRequest.CodAssessor }); if ((lMonitorCliente.CodigoClienteBov.HasValue) || (lMonitorCliente.CodigoClienteBmf.HasValue)) { gLogger.InfoFormat("Consulta do Cliente[{0}] ObterMonitorCustodiaMemoria -->> depois do ConsultarDadosClienteMonitorCustodia", lRequest.CodigoCliente.Value); this.AddRemoveClientRunTimerProcessed(lRequest.CodigoCliente.Value); if (MonitorCustodiaMemoria.ContainsKey(lRequest.CodigoCliente.Value)) { if (!ClientesMonitor.Contains(lRequest.CodigoCliente.Value)) { gLogger.InfoFormat("O Cliente[{0}] Está no MonitorCustodiaMemoria, mas não está sendo monitorado no ClientesMonitor nesse instante", lRequest.CodigoCliente); lRetorno.MonitorCustodia = this.CalcularPosicaoCustodia(lRequest.CodigoCliente.Value); gLogger.Debug("Cliente [" + lRequest.CodigoCliente + "] recalculado novamente"); } else { gLogger.InfoFormat("Pegou posicao do Cliente[{0}] da memoria", lRequest.CodigoCliente); lRetorno.MonitorCustodia = MonitorCustodiaMemoria[lRequest.CodigoCliente.Value] as MonitorCustodiaInfo; } } else { gLogger.Debug("A posicao do cliente[" + lRequest.CodigoCliente + "] não estava na memória"); lRetorno.MonitorCustodia = this.CalcularPosicaoCustodia(lRequest.CodigoCliente.Value); gLogger.Debug("Cliente [" + lRequest.CodigoCliente + "] recalculado novamente"); } MonitorCustodiaMemoria.AddOrUpdate(lRetorno.MonitorCustodia.CodigoClienteBov.Value, lRetorno.MonitorCustodia, (key, oldValue) => lRetorno.MonitorCustodia); gLogger.InfoFormat("**************************************************************************************"); gLogger.InfoFormat("*******Total de calculos efetuados na memória [{0}]", MonitorCustodiaMemoria.Count); gLogger.InfoFormat("**************************************************************************************"); } } catch (Exception ex) { gLogger.Error("Erro em ObterMonitorCustodiaMemoria -> ", ex); } return(lRetorno); }
private double CalcularTaxaPtax(string Instrumento, double taxaOperada) { double lRetorno = 0.0; double taxaMercado = MonitorCustodiaDB.ObteCotacaoPtax(); lRetorno = taxaOperada * taxaMercado; return(lRetorno); }
private decimal CalcularTaxaPtax(double taxaOperada) { decimal lRetorno = 0.0M; double taxaMercado = MonitorCustodiaDB.ObteCotacaoPtax(); lRetorno = Convert.ToDecimal((taxaOperada * taxaMercado), gCultura); return(lRetorno); }
public MonitorCustodiaInfo CalcularPosicaoCustodia(int idCliente) { MonitorCustodiaInfo lRetorno = new MonitorCustodiaInfo(); try { lRetorno = MonitorCustodiaDB.ConsultarDadosClienteMonitorCustodia(new MonitorCustodiaInfo() { CodigoClienteBov = idCliente }); List <MonitorCustodiaInfo.CustodiaPosicao> lPosicaoCustodia = MonitorCustodiaDB.ConsultarCustodiaNormal(new Lib.Mensageria.MonitorCustodiaRequest() { CodigoCliente = lRetorno.CodigoClienteBov, CodigoClienteBmf = lRetorno.CodigoClienteBmf }); lRetorno.ListaCustodia = TratarListaCustodia(lPosicaoCustodia); List <MonitorCustodiaInfo.CustodiaPosicao> lPosicaoCustodiaSemCarteira = MonitorCustodiaDB.ConsultarCustodiaNormalSemCarteira(new Lib.Mensageria.MonitorCustodiaRequest() { CodigoCliente = lRetorno.CodigoClienteBov, CodigoClienteBmf = lRetorno.CodigoClienteBmf }); lRetorno.ListaCustodiaSemCarteira = TratarListaCustodia(lPosicaoCustodiaSemCarteira); List <MonitorCustodiaInfo.CustodiaPosicao> lPosicaoCustodiaAberturaBMF = MonitorCustodiaDB.ObterCustodiaAberturaBMF(new Lib.Mensageria.MonitorCustodiaRequest() { CodigoCliente = lRetorno.CodigoClienteBov, CodigoClienteBmf = lRetorno.CodigoClienteBmf }); lRetorno.ListaCustodia.AddRange(TratarListaCustodia(lPosicaoCustodiaAberturaBMF)); List <MonitorCustodiaInfo.CustodiaPosicaoDiaBMF> lPosicaoCustodiaDia = MonitorCustodiaDB.ConsultarCustodiaPosicaoDiaBMF(new MonitorCustodiaInfo() { CodigoClienteBmf = lRetorno.CodigoClienteBmf }); lRetorno.ListaPosicaoDiaBMF = TratarListaCustodia(lPosicaoCustodiaDia); lRetorno.ListaGarantias = MonitorCustodiaDB.ConsultarFinanceiroGarantiaBMF(new MonitorCustodiaInfo() { CodigoClienteBmf = lRetorno.CodigoClienteBmf }); //lRetorno.ListaGarantiasBMFOuro = MonitorCustodiaDB.ConsultarFinanceiroGarantiaBMFOuro(new MonitorCustodiaInfo() { CodigoClienteBmf = lRetorno.CodigoClienteBmf }); lRetorno.ListaGarantiasBMFOuro = new List <MonitorCustodiaInfo.CustodiaGarantiaBMFOuro>(); lRetorno.ListaGarantiasBovespa = MonitorCustodiaDB.ConsultarFinanceiroGarantiaBovespa(new MonitorCustodiaInfo() { CodigoClienteBov = lRetorno.CodigoClienteBov }); } catch (Exception ex) { gLogger.ErrorFormat("Erro calcular posição do cliente [{0}] - StackTrace - {1} -> error {2}", idCliente, ex.StackTrace, ex); } return(lRetorno); }
public void StartMonitor(object sender) { try { gLogger.Info("StartMonitor - Iniciando Monitor de Custodia"); htVencimentoDI = MonitorCustodiaDB.ObterVencimentosDI(); htOrderOpcao = new MonitorCustodiaGradualDB().ConsultarListaCadastroPapelOpcoes(); gLogger.Info("StartMonitor - Inicia rotina principal do sistema"); gLogger.Info("Pausa de 2 segundos"); Thread.Sleep(2000); gLogger.Info("Inicia Thread de calculo de posição de Custódia dos clientes a cada 5 segundos."); thThreadClientes = new Thread(new ThreadStart(ThreadClientes)); thThreadClientes.Name = "ThreadClientes"; thThreadClientes.Start(); thThreadPositionGlobal = new Thread(new ThreadStart(ThreadGlobalPosition)); thThreadPositionGlobal.Name = "thThreadPositionGlobal"; thThreadPositionGlobal.Start(); lstFatorCotacao1000.Add("CEGR3"); lstFatorCotacao1000.Add("CAFE3"); lstFatorCotacao1000.Add("CAFE4"); lstFatorCotacao1000.Add("CBEE3"); lstFatorCotacao1000.Add("SGEN4"); lstFatorCotacao1000.Add("PMET6"); lstFatorCotacao1000.Add("EBTP3"); lstFatorCotacao1000.Add("EBTP4"); lstFatorCotacao1000.Add("TOYB2"); lstFatorCotacao1000.Add("TOYB3"); lstFatorCotacao1000.Add("TOYB4"); lstFatorCotacao1000.Add("FNAM11"); lstFatorCotacao1000.Add("FNOR11"); lstFatorCotacao1000.Add("NORD3"); gLogger.Info("Processo de inicialização finalizado"); gLogger.Info("Aguardando Transações ..."); } catch (Exception ex) { gLogger.Info("Ocorreu um erro ao acessar o metodo StartMonitor.", ex); } }
private MonitorCustodiaInfo CalcularPosicaoCustodia(int idCliente) { MonitorCustodiaInfo lRetorno = new MonitorCustodiaInfo(); try { //if (idCliente == 31940) //{ lRetorno = MonitorCustodiaDB.ConsultarDadosClienteMonitorCustodia(new MonitorCustodiaInfo() { CodigoClienteBov = idCliente }); lRetorno.ListaCustodia = MonitorCustodiaDB.ConsultarCustodiaNormal(new Lib.Mensageria.MonitorCustodiaRequest() { CodigoCliente = idCliente }); lRetorno.ListaPosicaoDiaBMF = MonitorCustodiaDB.ConsultarCustodiaPosicaoDiaBMF(new MonitorCustodiaInfo() { CodigoClienteBmf = idCliente }); lRetorno.ListaGarantias = MonitorCustodiaDB.ConsultarFinanceiroGarantiaBMF(new MonitorCustodiaInfo() { CodigoClienteBmf = idCliente }); //lRetorno.ListaGarantiasBMFOuro = MonitorCustodiaDB.ConsultarFinanceiroGarantiaBMFOuro(new MonitorCustodiaInfo() { CodigoClienteBmf = idCliente }); lRetorno.ListaGarantiasBMFOuro = new List <MonitorCustodiaInfo.CustodiaGarantiaBMFOuro>(); lRetorno.ListaGarantiasBovespa = MonitorCustodiaDB.ConsultarFinanceiroGarantiaBovespa(new MonitorCustodiaInfo() { CodigoClienteBov = idCliente }); //} } catch (Exception ex) { gLogger.ErrorFormat("Erro calcular posição do cliente [{0}] - StackTrace - {1}", idCliente, ex.StackTrace); } return(lRetorno); }
private void ThreadClientes() { DateTime lastRun = DateTime.MinValue; while (_bKeepRunning) { TimeSpan interval = DateTime.Now - lastRun; try { if (interval.TotalMilliseconds > 30000) { lastRun = DateTime.Now; gLogger.Debug("Obtendo relacao de clientes que operaram no dia"); List <int> RelacaoClientesRodada = new MonitorCustodiaDB().ObterClientesPosicaoDia(); #region Clientes BMF AFTER gLogger.Debug("Obtendo relacao de clientes com posicao AFTER BMF"); List <int> BMFAfter = new MonitorCustodiaDB().ObterClientesPosicaoBMFAfter(); foreach (int Cliente in BMFAfter) { if (!RelacaoClientesRodada.Contains(Cliente)) { RelacaoClientesRodada.Add(Cliente); } } #endregion if (RelacaoClientesRodada.Count > 0) { gLogger.Info("Relacao de clientes encontrados.[" + RelacaoClientesRodada.Count.ToString() + "]."); } else { gLogger.Info("Não existe clientes para serem calculados nesta tentativa."); } lock (ClientesMonitor) { foreach (int Cliente in RelacaoClientesRodada) { if (!ClientesMonitor.Contains(Cliente)) { gLogger.Info("Acrescentando [" + Cliente + "] na lista de monitoracao"); this.ClientesMonitor.Add(Cliente); this.RunTimer(Cliente); } } } } } catch (Exception ex) { gLogger.Error("Ocorreu um erro ao acessar o método ThreadClientes:" + ex.Message, ex); } Thread.Sleep(250); } }
/// <summary> /// Thread de gerenciamento de atualização no banco de dados da posição global da corretora /// </summary> private void ThreadGlobalPosition() { DateTime lastRun = DateTime.MinValue; while (_bKeepRunning) { TimeSpan interval = DateTime.Now - lastRun; if (interval.TotalMilliseconds > IntervaloRecalculo) { lastRun = DateTime.Now; gLogger.Debug("Obtendo relacao de clientes que operaram nos ultimos 2 minutos"); var lGlobalPosition = new MonitorPositionGlobalGradulaInfo(); List <int> RelacaoClientesOperaram = new MonitorCustodiaDB().ListaClientesOperaramUltimoMomento(); if (RelacaoClientesOperaram.Count > 0) { gLogger.Info("Relacao de clientes encontrados que operaram nos ultimos 2 minutos.[" + RelacaoClientesOperaram.Count.ToString() + "]."); } else { gLogger.Info("Não existe clientes para serem calculados nesta tentativa."); } if (MonitorCustodiaMemoria != null && MonitorCustodiaMemoria.Count > 0) { gLogger.InfoFormat("Número de clientes calculados na memória {0}.", MonitorCustodiaMemoria.Count); try { foreach (KeyValuePair <int, MonitorCustodiaInfo> monitor in MonitorCustodiaMemoria) { MonitorCustodiaInfo lMonitor = monitor.Value; foreach (var custodia in lMonitor.ListaPosicaoDiaBMF) { if (custodia.TipoMercado.Equals("FUT") || custodia.TipoMercado.Equals("DIS") || custodia.TipoMercado.Equals("OPF")) { if (custodia.CodigoInstrumento.Substring(0, 1).ToLower().Equals("w")) { ///Mini Indice lGlobalPosition.ListColumn[0].TotalBuy += int.Parse(custodia.QtdeAExecCompra.ToString()); lGlobalPosition.ListColumn[0].TotalSell += int.Parse(custodia.QtdeAExecVenda.ToString()); lGlobalPosition.ListColumn[0].Volume += custodia.Resultado; lGlobalPosition.ListColumn[0].Net += int.Parse((custodia.QtdeAExecCompra - custodia.QtdeAExecVenda).ToString()); lGlobalPosition.ListColumn[0].QtyOrder += int.Parse((custodia.QtdeAExecCompra + custodia.QtdeAExecVenda).ToString()); } else { ///Mini Indice lGlobalPosition.ListColumn[1].TotalBuy += int.Parse(custodia.QtdeAExecCompra.ToString()); lGlobalPosition.ListColumn[1].TotalSell += int.Parse(custodia.QtdeAExecVenda.ToString()); lGlobalPosition.ListColumn[1].Volume += custodia.Resultado; lGlobalPosition.ListColumn[1].Net += int.Parse((custodia.QtdeAExecCompra - custodia.QtdeAExecVenda).ToString()); lGlobalPosition.ListColumn[1].QtyOrder += int.Parse((custodia.QtdeAExecCompra + custodia.QtdeAExecVenda).ToString()); } } } } var lMonitorCustodiaBovespa = new MonitorCustodiaGradualDB().ConsultarOrdensBovespaIntraday(); if (lMonitorCustodiaBovespa != null && lMonitorCustodiaBovespa.ListOrders.Count > 0) { foreach (var order in lMonitorCustodiaBovespa.ListOrders) { if (htOrderOpcao.Contains(order.Symbol)) //-->> verifica se é opção { ///Opções if (order.Side.Equals(1)) //-->> compra { lGlobalPosition.ListColumn[3].TotalBuy += order.QtyOrder; } else if (order.Side.Equals(2)) //-->> Venda { lGlobalPosition.ListColumn[3].TotalSell += order.QtyOrder; } decimal lCotacao = ObterCotacaoAtual(order.Symbol); lGlobalPosition.ListColumn[3].Volume += (lCotacao * order.QtyOrder); //lGlobalPosition.ListColumn[3].Net += // int.Parse((custodia.QtdeAExecCompra - custodia.QtdeAExecVenda).ToString()); lGlobalPosition.ListColumn[3].QtyOrder += order.QtyOrder; } else { if (order.Side.Equals(1)) //-->> compra { lGlobalPosition.ListColumn[2].TotalBuy += order.QtyOrder; } else if (order.Side.Equals(2)) //-->> Venda { lGlobalPosition.ListColumn[2].TotalSell += order.QtyOrder; } decimal lCotacao = ObterCotacaoAtual(order.Symbol); lGlobalPosition.ListColumn[2].Volume += (lCotacao * order.QtyOrder); //lGlobalPosition.ListColumn[2].Net += int.Parse((custodia.QtdeAExecCompra - custodia.QtdeAExecVenda).ToString()); lGlobalPosition.ListColumn[2].QtyOrder += order.QtyOrder;// int.Parse((custodia.QtdeAExecCompra + custodia.QtdeAExecVenda).ToString()); } } ///net de quantidade para opções lGlobalPosition.ListColumn[3].Net += (lGlobalPosition.ListColumn[3].TotalBuy - lGlobalPosition.ListColumn[3].TotalSell); ///net de quantidade para a vista lGlobalPosition.ListColumn[2].Net += (lGlobalPosition.ListColumn[2].TotalBuy - lGlobalPosition.ListColumn[2].TotalSell); } } catch (Exception ex) { gLogger.Error("Erro encontrado na rotina de GlobalPosition ", ex); } gLogger.InfoFormat("Atualizando as informações de Posição de Custodia Gradual no banco de dados"); try { new MonitorCustodiaGradualDB().AtualizaPosicaoCustodiaGradual(lGlobalPosition); } catch (Exception ex) { gLogger.Error("Erro encontrado na atualização de informações de POsição de Custodia Gradual", ex); } } } } }