예제 #1
0
 public EntCarteira Remover(EntCarteira objCarteira, Int32 IdUsuario)
 {
     using (DbConnection connection = db.CreateConnection())
     {
         connection.Open();
         DbTransaction transaction = connection.BeginTransaction();
         try
         {
             objCarteira.Ativo = !objCarteira.Ativo;
             dalCarteira.Remover(objCarteira, transaction, db);
             SaveLog(IdUsuario, EntLog.LOG_REMOVER, "Carteira", objCarteira.IdCarteira, objCarteira, transaction, db);
             transaction.Commit();
         }
         catch (Exception ex)
         {
             transaction.Rollback();
             SaveLog(IdUsuario, EntLog.LOG_ERRO, "Carteira", objCarteira.IdCarteira, objCarteira, ex.Message, db, connection);
             throw;
         }
         finally
         {
             connection.Close();
         }
     }
     return(objCarteira);
 }
예제 #2
0
        public EntCarteira Inserir(EntCarteira objCarteira, DbTransaction transaction, Database db)
        {
            DbCommand dbCommand = db.GetStoredProcCommand("STP_CarteiraInserir");

            dbCommand.CommandTimeout = BdConfig.CommmandTimeout;

            db.AddOutParameter(dbCommand, "@CDA_CARTEIRA", DbType.Int32, objCarteira.IdCarteira);
            db.AddInParameter(dbCommand, "@TX_CARTEIRA", DbType.String, objCarteira.Carteira);
            db.AddInParameter(dbCommand, "@CEA_USUARIO", DbType.Int32, IntUtils.ToIntNullProc(objCarteira.Usuario.IdUsuario));
            db.AddInParameter(dbCommand, "@SALDO_REAIS", DbType.Decimal, objCarteira.SaldoReais);
            db.AddInParameter(dbCommand, "@SALDO_DOLAR", DbType.Decimal, objCarteira.SaldoDolar);
            db.AddInParameter(dbCommand, "@SALDO_BITCOIN", DbType.Decimal, objCarteira.SaldoBitcoin);
            db.AddInParameter(dbCommand, "@SALDO_REAIS2", DbType.Decimal, objCarteira.SaldoReais2);
            db.AddInParameter(dbCommand, "@SALDO_DOLAR2", DbType.Decimal, objCarteira.SaldoDolar2);
            db.AddInParameter(dbCommand, "@SALDO_BITCOIN2", DbType.Decimal, objCarteira.SaldoBitcoin2);
            db.AddInParameter(dbCommand, "@PERCENTUAL_TAXA_COMPRA", DbType.Decimal, objCarteira.PercentualTaxaCompra);
            db.AddInParameter(dbCommand, "@PERCENTUAL_TAXA_VENDA", DbType.Decimal, objCarteira.PercentualTaxaVenda);
            db.AddInParameter(dbCommand, "@PERCENTUAL_LUCRO", DbType.Decimal, objCarteira.PercentualLucro);
            db.AddInParameter(dbCommand, "@CEA_MOEDA", DbType.Int32, IntUtils.ToIntNullProc(objCarteira.Moeda.IdMoeda));
            db.AddInParameter(dbCommand, "@FL_ATIVO", DbType.Boolean, objCarteira.Ativo);

            db.ExecuteNonQuery(dbCommand, transaction);

            objCarteira.IdCarteira = ObjectUtils.ToInt(db.GetParameterValue(dbCommand, "@CDA_CARTEIRA"));

            return(objCarteira);
        }
예제 #3
0
        public EntCarteira ObterPorId(Int32 IdCarteira)
        {
            EntCarteira objCarteira = new EntCarteira();

            using (DbConnection connection = db.CreateConnection())
            {
                connection.Open();
                DbTransaction transaction = connection.BeginTransaction();
                try
                {
                    objCarteira = dalCarteira.ObterPorId(IdCarteira, transaction, db);
                    transaction.Commit();
                }
                catch
                {
                    transaction.Rollback();
                    throw;
                }
                finally
                {
                    connection.Close();
                }
            }
            return(objCarteira);
        }
        private void CheckAndTriggerCreateOrder(decimal rsi, EntMoeda objMoeda, EntCarteira objCarteira)
        {
            Decimal rsiSuperior = StringUtils.ToDecimal(ConfigurationManager.AppSettings["RsiLimiteSuperior"]);
            Decimal rsiInferior = StringUtils.ToDecimal(ConfigurationManager.AppSettings["RsiLimiteInferior"]);

            if ((rsi >= rsiSuperior || rsi <= rsiInferior) && objMoeda.OperacaoVendaAberta.IdOperacao == 0)
            {
                EntResumoDiario ultimoStatus = new BllResumoDiario().ObterTodos(objMoeda.IdMoeda, StringUtils.ToDate(DateUtils.ToString(DateTime.Now)), DateTime.Now, 1).OrderByDescending(x => x.Data).ToList()[0];

                Decimal valor = ultimoStatus.MelhorCompra;
                if (valor < ultimoStatus.MelhorVenda)
                {
                    valor = ultimoStatus.MelhorVenda;
                }
                if (valor < ultimoStatus.PrecoUltimaTransacao)
                {
                    valor = ultimoStatus.PrecoUltimaTransacao;
                }

                //RSI inferior - cria ordem de compra
                if (rsi <= rsiInferior && objCarteira.SaldoDolar > 10 && objMoeda.OperacaoCompraAberta.IdOperacao == 0)
                {
                    CriaOrdemCompra(objMoeda, objCarteira);
                }
                else if (rsi >= rsiSuperior && (objCarteira.SaldoBitcoin * valor) > 10 && objMoeda.OperacaoVendaAberta.IdOperacao == 0 && objMoeda.OperacaoCompraAberta.IdOperacao > 0)
                {
                    CriaOrdemVenda(objMoeda, objCarteira, ultimoStatus);
                }
            }
        }
        private void MonitorarVenda(EntMoeda objMoeda, EntCarteira objCarteira)
        {
            try
            {
                if (StringUtils.ToBoolean(ConfigurationManager.AppSettings["teste"]))
                {
                    Aviso(objMoeda.Codigo, "BITCOINER - ORDEM DE VENDA CONCLUIDA", "Concluida ordem de venda em " + DateUtils.ToStringCompleto(DateTime.Now) + "\n" + objMoeda.Codigo + "\nValor: US$ " + DecimalUtils.ToString_8(objMoeda.OperacaoVendaAberta.ValorBitcoin) + " | Quantidade: " + DecimalUtils.ToString_8(objMoeda.OperacaoVendaAberta.ValorReais));

                    objMoeda.OperacaoVendaAberta.DataFimExecucao = DateTime.Now;
                    new BllOperacao().Alterar(objMoeda.OperacaoVendaAberta, EntUsuario.USUARIO_PADRAO);

                    objCarteira.SaldoBitcoin = objCarteira.SaldoBitcoin - objMoeda.OperacaoCompraAberta.ValorReais;
                    objCarteira.SaldoDolar   = objCarteira.SaldoDolar + objMoeda.OperacaoCompraAberta.ValorReais * objMoeda.OperacaoVendaAberta.ValorBitcoin;
                    new BllCarteira().Alterar(objCarteira, EntUsuario.USUARIO_PADRAO);

                    objMoeda.OperacaoCompraAberta = new EntOperacao();
                    objMoeda.OperacaoVendaAberta  = new EntOperacao();
                    new BllMoeda().Alterar(objMoeda, EntUsuario.USUARIO_PADRAO);
                }
                else
                {
                    WebCallResult <BinanceOrder> ordemTemp = client.Spot.Order.GetOrder(objMoeda.Codigo + EntMoeda.USDT, StringUtils.ToInt64(objMoeda.OperacaoVendaAberta.Operacao));
                    if (ordemTemp != null && ordemTemp.Data != null)
                    {
                        BinanceOrder ordem = ordemTemp.Data;
                        if (ordem.Status == OrderStatus.Filled)
                        {
                            Aviso(objMoeda.Codigo, "BITCOINER - ORDEM DE VENDA CONCLUIDA", "Concluida ordem de venda em " + DateUtils.ToStringCompleto(DateTime.Now) + "\n" + objMoeda.Codigo + "\nValor: US$ " + DecimalUtils.ToString_8(ordem.Price) + " | Quantidade: " + DecimalUtils.ToString_8(ordem.QuantityFilled));

                            if (ordem.UpdateTime != null)
                            {
                                objMoeda.OperacaoVendaAberta.DataFimExecucao = ordem.UpdateTime.Value;
                            }
                            else
                            {
                                objMoeda.OperacaoVendaAberta.DataFimExecucao = DateTime.Now;
                            }
                            objMoeda.OperacaoVendaAberta.ValorBitcoin = ordem.Price;
                            new BllOperacao().Alterar(objMoeda.OperacaoVendaAberta, EntUsuario.USUARIO_PADRAO);

                            objMoeda.OperacaoCompraAberta = new EntOperacao();
                            objMoeda.OperacaoVendaAberta  = new EntOperacao();
                            new BllMoeda().Alterar(objMoeda, EntUsuario.USUARIO_PADRAO);

                            objCarteira.SaldoBitcoin = objCarteira.SaldoBitcoin - ordem.QuantityFilled;
                            objCarteira.SaldoDolar   = objCarteira.SaldoDolar + ordem.QuoteQuantityFilled;
                            new BllCarteira().Alterar(objCarteira, EntUsuario.USUARIO_PADRAO);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Aviso(objMoeda.Codigo, "BITCOINER - ERRO MONITORAMENTO VENDA", "Houve um erro no monitoramento de venda " + objMoeda.Codigo + " em " + DateUtils.ToStringCompleto(DateTime.Now) + "\n\n" + ex.Message + "\n\n" + ex.StackTrace);
            }
        }
예제 #6
0
        public void Remover(EntCarteira objCarteira, DbTransaction transaction, Database db)
        {
            DbCommand dbCommand = db.GetStoredProcCommand("STP_CarteiraRemover");

            dbCommand.CommandTimeout = BdConfig.CommmandTimeout;

            db.AddInParameter(dbCommand, "@CDA_CARTEIRA", DbType.Int32, objCarteira.IdCarteira);
            db.AddInParameter(dbCommand, "@FL_ATIVO", DbType.Boolean, objCarteira.Ativo);

            db.ExecuteNonQuery(dbCommand, transaction);
        }
예제 #7
0
        private List <EntCarteira> Popular(DbDataReader dtrDados)
        {
            List <EntCarteira> listEntReturn = new List <EntCarteira>();
            EntCarteira        entReturn;

            try
            {
                while (dtrDados.Read())
                {
                    entReturn = new EntCarteira();

                    entReturn.IdCarteira                 = ObjectUtils.ToInt(dtrDados["CDA_CARTEIRA"]);
                    entReturn.Carteira                   = ObjectUtils.ToString(dtrDados["TX_CARTEIRA"]);
                    entReturn.Usuario.IdUsuario          = ObjectUtils.ToInt(dtrDados["CEA_USUARIO"]);
                    entReturn.Usuario.Usuario            = ObjectUtils.ToString(dtrDados["TX_USUARIO"]);
                    entReturn.SaldoReais                 = ObjectUtils.ToDecimal(dtrDados["SALDO_REAIS"]);
                    entReturn.SaldoDolar                 = ObjectUtils.ToDecimal(dtrDados["SALDO_DOLAR"]);
                    entReturn.SaldoBitcoin               = ObjectUtils.ToDecimal(dtrDados["SALDO_BITCOIN"]);
                    entReturn.SaldoReais2                = ObjectUtils.ToDecimal(dtrDados["SALDO_REAIS2"]);
                    entReturn.SaldoDolar2                = ObjectUtils.ToDecimal(dtrDados["SALDO_DOLAR2"]);
                    entReturn.SaldoBitcoin2              = ObjectUtils.ToDecimal(dtrDados["SALDO_BITCOIN2"]);
                    entReturn.PercentualTaxaCompra       = ObjectUtils.ToDecimal(dtrDados["PERCENTUAL_TAXA_COMPRA"]);
                    entReturn.PercentualTaxaVenda        = ObjectUtils.ToDecimal(dtrDados["PERCENTUAL_TAXA_VENDA"]);
                    entReturn.PercentualLucro            = ObjectUtils.ToDecimal(dtrDados["PERCENTUAL_LUCRO"]);
                    entReturn.Moeda.IdMoeda              = ObjectUtils.ToInt(dtrDados["CEA_MOEDA"]);
                    entReturn.Moeda.Moeda                = ObjectUtils.ToString(dtrDados["TX_MOEDA"]);
                    entReturn.Moeda.CasasDepoisDaVirgula = ObjectUtils.ToInt(dtrDados["NU_CASAS_APOS_VIRGULA"]);
                    entReturn.Ativo = ObjectUtils.ToBoolean(dtrDados["FL_ATIVO"]);
                    listEntReturn.Add(entReturn);
                }

                dtrDados.Close();
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(listEntReturn);
        }
예제 #8
0
 public void Alterar(EntCarteira objCarteira, Int32 IdUsuario)
 {
     using (DbConnection connection = db.CreateConnection())
     {
         connection.Open();
         DbTransaction transaction = connection.BeginTransaction();
         try
         {
             dalCarteira.Alterar(objCarteira, transaction, db);
             SaveLog(IdUsuario, EntLog.LOG_EDITAR, "Carteira", objCarteira.IdCarteira, objCarteira, transaction, db);
             transaction.Commit();
         }
         catch (Exception ex)
         {
             transaction.Rollback();
             SaveLog(IdUsuario, EntLog.LOG_ERRO, "Carteira", objCarteira.IdCarteira, objCarteira, ex.Message, db, connection);
             throw;
         }
         finally
         {
             connection.Close();
         }
     }
 }
        private void CriaOrdemVenda(EntMoeda objMoeda, EntCarteira objCarteira, EntResumoDiario ultimoStatus)
        {
            try
            {
                Decimal valor = ultimoStatus.MelhorCompra;
                if (valor < ultimoStatus.MelhorVenda)
                {
                    valor = ultimoStatus.MelhorVenda;
                }
                if (valor < ultimoStatus.PrecoUltimaTransacao)
                {
                    valor = ultimoStatus.PrecoUltimaTransacao;
                }

                if (valor < (objMoeda.OperacaoCompraAberta.ValorBitcoin * StringUtils.ToDecimal("1,005")))
                {
                    Aviso(objMoeda.Codigo, "BITCOINER - ORDEM DE VENDA NÃO CRIADA - VALOR MENOR QUE COMPRA", "Não criada ordem de venda em " + DateUtils.ToStringCompleto(DateTime.Now) + "\n" + objMoeda.Codigo + "\nValor: US$ " + DecimalUtils.ToString_8(valor), false);
                    return;
                }

                Decimal quantidade = objCarteira.SaldoBitcoin;
                quantidade = DecimalUtils.ToDecimalRound(quantidade, objMoeda.CasasDepoisDaVirgula);

                if (StringUtils.ToBoolean(ConfigurationManager.AppSettings["teste"]))
                {
                    EntOperacao objOperacao = new EntOperacao();
                    objOperacao.Ativo              = true;
                    objOperacao.Carteira           = objCarteira;
                    objOperacao.DataCriacao        = DateTime.Now;
                    objOperacao.DataInicioExecucao = DateTime.Now;
                    objOperacao.IsVenda            = true;
                    objOperacao.Operacao           = new Random().Next(10000, 99999).ToString();
                    objOperacao.ValorBitcoin       = valor;
                    objOperacao.ValorDolar         = quantidade * valor;
                    objOperacao.ValorReais         = quantidade;
                    objOperacao = new BllOperacao().Inserir(objOperacao, EntUsuario.USUARIO_PADRAO);

                    objMoeda.OperacaoVendaAberta = objOperacao;
                    new BllMoeda().Alterar(objMoeda, EntUsuario.USUARIO_PADRAO);

                    Aviso(objMoeda.Codigo, "BITCOINER - ORDEM DE VENDA", "Criada ordem de venda em " + DateUtils.ToStringCompleto(DateTime.Now) + "\n" + objMoeda.Codigo + "\nValor: US$ " + DecimalUtils.ToString_8(valor) + " | Quantidade: " + DecimalUtils.ToString_8(quantidade));
                }
                else
                {
                    var result = client.Spot.Order.PlaceOrder(objMoeda.Codigo + EntMoeda.USDT, OrderSide.Sell, OrderType.Market, quantity: quantidade);

                    if (result.Success)
                    {
                        EntOperacao objOperacao = new EntOperacao();
                        objOperacao.Ativo              = true;
                        objOperacao.Carteira           = objCarteira;
                        objOperacao.DataCriacao        = DateTime.Now;
                        objOperacao.DataInicioExecucao = DateTime.Now;
                        objOperacao.IsVenda            = true;
                        objOperacao.Operacao           = result.Data.OrderId.ToString();
                        objOperacao.ValorBitcoin       = valor;
                        objOperacao.ValorDolar         = quantidade * valor;
                        objOperacao.ValorReais         = quantidade;
                        objOperacao = new BllOperacao().Inserir(objOperacao, EntUsuario.USUARIO_PADRAO);

                        objMoeda.OperacaoVendaAberta = objOperacao;
                        new BllMoeda().Alterar(objMoeda, EntUsuario.USUARIO_PADRAO);

                        Aviso(objMoeda.Codigo, "BITCOINER - ORDEM DE VENDA", "Criada ordem de venda em " + DateUtils.ToStringCompleto(DateTime.Now) + "\n" + objMoeda.Codigo + "\nValor: US$ " + DecimalUtils.ToString_8(valor) + " | Quantidade: " + DecimalUtils.ToString_8(quantidade));
                    }
                    else
                    {
                        Aviso(objMoeda.Codigo, "BITCOINER - ORDEM DE VENDA", "ERRO Criada ordem de venda em " + DateUtils.ToStringCompleto(DateTime.Now) + "\n" + objMoeda.Codigo + "\nValor: US$ " + DecimalUtils.ToString_8(valor) + " | Quantidade: " + DecimalUtils.ToString_8(quantidade) +
                              "\n\n" + result.Error.Message);
                    }
                }
            }
            catch (Exception ex)
            {
                Aviso(objMoeda.Codigo, "BITCOINER - ERRO CRIAÇÃO ORDEM DE VENDA", "Houve um erro na criação de ordem de venda " + objMoeda.Codigo + " em " + DateUtils.ToStringCompleto(DateTime.Now) + "\n\n" + ex.Message + "\n\n" + ex.StackTrace);
            }
        }