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