Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        private decimal ObterCotacaoAtual(string Instument)
        {
            MonitorCustodiaDB.CotacaoValor lRetorno = new MonitorCustodiaDB.CotacaoValor();

            lRetorno = new MonitorCustodiaDB().ObterCotacaoAtual(Instument);

            return(lRetorno.ValorCotacao);
        }
Пример #4
0
        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);
        }
Пример #5
0
        private double CalcularTaxaPtax(string Instrumento, double taxaOperada)
        {
            double lRetorno = 0.0;

            double taxaMercado = MonitorCustodiaDB.ObteCotacaoPtax();

            lRetorno = taxaOperada * taxaMercado;

            return(lRetorno);
        }
Пример #6
0
        private decimal CalcularTaxaPtax(double taxaOperada)
        {
            decimal lRetorno = 0.0M;

            double taxaMercado = MonitorCustodiaDB.ObteCotacaoPtax();

            lRetorno = Convert.ToDecimal((taxaOperada * taxaMercado), gCultura);

            return(lRetorno);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
            }
        }
Пример #9
0
        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);
        }
Пример #10
0
        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);
            }
        }
Пример #11
0
        /// <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);
                        }
                    }
                }
            }
        }