/// <summary>
        /// Método que atualiza a base de dados do gradualOMS com os dados de posição global da corretora.
        /// Procedure: prc_atualiza_posicao_custodia_gradual
        /// </summary>
        /// <param name="pParametro">Objeto encapsulado da posição global da gradual diaria</param>
        public void AtualizaPosicaoCustodiaGradual(MonitorPositionGlobalGradulaInfo pParametro)
        {
            var lDados = new AcessaDados();

            try
            {
                lDados.ConnectionStringName = gNomeConexaoGradualOMS;

                foreach (var info in pParametro.ListColumn)
                {
                    DbCommand lCommand = lDados.CreateCommand(CommandType.StoredProcedure, "prc_atualiza_posicao_custodia_gradual");

                    lDados.AddInParameter(lCommand, "@name_line", DbType.String, info.NameLine);
                    lDados.AddInParameter(lCommand, "@total_buy", DbType.Int32, info.TotalBuy);
                    lDados.AddInParameter(lCommand, "@total_sell", DbType.Int32, info.TotalSell);
                    lDados.AddInParameter(lCommand, "@volume", DbType.Decimal, info.Volume);
                    lDados.AddInParameter(lCommand, "@net", DbType.Decimal, info.Net);
                    lDados.AddInParameter(lCommand, "@qty_order", DbType.Decimal, info.QtyOrder);

                    // Executa a operação no banco.
                    lDados.ExecuteNonQuery(lCommand);
                }
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }
Exemple #2
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);
                        }
                    }
                }
            }
        }