示例#1
0
        private List <EntMoeda> Popular(DbDataReader dtrDados)
        {
            List <EntMoeda> listEntReturn = new List <EntMoeda>();
            EntMoeda        entReturn;

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

                    entReturn.IdMoeda = ObjectUtils.ToInt(dtrDados["CDA_MOEDA"]);
                    entReturn.Moeda   = ObjectUtils.ToString(dtrDados["TX_MOEDA"]);
                    entReturn.Codigo  = ObjectUtils.ToString(dtrDados["TX_CODIGO"]);
                    entReturn.OperacaoCompraAberta.IdOperacao = ObjectUtils.ToInt(dtrDados["CEA_OPERACAO_COMPRA"]);
                    entReturn.OperacaoVendaAberta.IdOperacao  = ObjectUtils.ToInt(dtrDados["CEA_OPERACAO_VENDA"]);
                    entReturn.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);
        }
 public EntMoeda Remover(EntMoeda objMoeda, Int32 IdUsuario)
 {
     using (DbConnection connection = db.CreateConnection())
     {
         connection.Open();
         DbTransaction transaction = connection.BeginTransaction();
         try
         {
             objMoeda.Ativo = !objMoeda.Ativo;
             dalMoeda.Remover(objMoeda, transaction, db);
             SaveLog(IdUsuario, EntLog.LOG_REMOVER, "Moeda", objMoeda.IdMoeda, objMoeda, transaction, db);
             transaction.Commit();
         }
         catch (Exception ex)
         {
             transaction.Rollback();
             SaveLog(IdUsuario, EntLog.LOG_ERRO, "Moeda", objMoeda.IdMoeda, objMoeda, ex.Message, db, connection);
             throw;
         }
         finally
         {
             connection.Close();
         }
     }
     return(objMoeda);
 }
        public EntMoeda ObterPorId(Int32 IdMoeda)
        {
            EntMoeda objMoeda = new EntMoeda();

            using (DbConnection connection = db.CreateConnection())
            {
                connection.Open();
                DbTransaction transaction = connection.BeginTransaction();
                try
                {
                    objMoeda = dalMoeda.ObterPorId(IdMoeda, transaction, db);
                    transaction.Commit();
                }
                catch
                {
                    transaction.Rollback();
                    throw;
                }
                finally
                {
                    connection.Close();
                }
            }
            return(objMoeda);
        }
        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 AtualizaInformacoesResumoMoeda(EntMoeda objMoeda)
        {
            try
            {
                // Spot.Market | Spot market info endpoints
                var resumo = client.Spot.Market.Get24HPrice(objMoeda.Codigo + EntMoeda.USDT);

                /*// Spot.Order | Spot order info endpoints
                *  client.Spot.Order.GetAllOrders("BTCUSDT");
                *  // Spot.System | Spot system endpoints
                *  client.Spot.System.GetExchangeInfo();
                *  // Spot.UserStream | Spot user stream endpoints. Should be used to subscribe to a user stream with the socket client
                *  client.Spot.UserStream.StartUserStream();*/

                //var result = client.Spot.Order.PlaceTestOrder("BNBBTC", OrderSide.Buy, OrderType.Limit, timeInForce: TimeInForce.GoodTillCancel, quantity: 1, price: 2);

                EntResumoDiario objResumo = new EntResumoDiario();
                objResumo.ResumoDiario         = "Resumo " + objMoeda.Moeda;
                objResumo.Ativo                = true;
                objResumo.Data                 = DateTime.Now;
                objResumo.Moeda.IdMoeda        = objMoeda.IdMoeda;
                objResumo.PrecoUltimaTransacao = resumo.Data.LastPrice;
                objResumo.ValorMaximo          = resumo.Data.HighPrice;
                objResumo.ValorMinimo          = resumo.Data.LowPrice;
                objResumo.Volume               = resumo.Data.BaseVolume;
                objResumo.Quantidade           = resumo.Data.TotalTrades;
                objResumo.MelhorCompra         = resumo.Data.AskPrice;
                objResumo.MelhorVenda          = resumo.Data.BidPrice;
                new BllResumoDiario().Inserir(objResumo, EntUsuario.USUARIO_PADRAO);
            }
            catch (Exception ex)
            {
                Aviso(objMoeda.Codigo, "BITCOINER - ERRO ATUALIZAÇÃO RESUMO", "Houve um erro na atualização do resumo para " + objMoeda.Codigo + " em " + DateUtils.ToStringCompleto(DateTime.Now) + "\n\n" + ex.Message + "\n\n" + ex.StackTrace);
            }
        }
        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);
            }
        }
示例#7
0
        public void Remover(EntMoeda objMoeda, DbTransaction transaction, Database db)
        {
            DbCommand dbCommand = db.GetStoredProcCommand("STP_MoedaRemover");

            dbCommand.CommandTimeout = BdConfig.CommmandTimeout;

            db.AddInParameter(dbCommand, "@CDA_MOEDA", DbType.Int32, objMoeda.IdMoeda);
            db.AddInParameter(dbCommand, "@FL_ATIVO", DbType.Boolean, objMoeda.Ativo);

            db.ExecuteNonQuery(dbCommand, transaction);
        }
示例#8
0
        public void Alterar(EntMoeda objMoeda, DbTransaction transaction, Database db)
        {
            DbCommand dbCommand = db.GetStoredProcCommand("STP_MoedaAlterar");

            dbCommand.CommandTimeout = BdConfig.CommmandTimeout;

            db.AddInParameter(dbCommand, "@CDA_MOEDA", DbType.Int32, objMoeda.IdMoeda);
            db.AddInParameter(dbCommand, "@TX_MOEDA", DbType.String, objMoeda.Moeda);
            db.AddInParameter(dbCommand, "@TX_CODIGO", DbType.String, objMoeda.Codigo);
            db.AddInParameter(dbCommand, "@CEA_OPERACAO_COMPRA", DbType.Int32, IntUtils.ToIntNullProc(objMoeda.OperacaoCompraAberta.IdOperacao));
            db.AddInParameter(dbCommand, "@CEA_OPERACAO_VENDA", DbType.Int32, IntUtils.ToIntNullProc(objMoeda.OperacaoVendaAberta.IdOperacao));
            db.AddInParameter(dbCommand, "@NU_CASAS_APOS_VIRGULA", DbType.Int32, objMoeda.CasasDepoisDaVirgula);
            db.AddInParameter(dbCommand, "@FL_ATIVO", DbType.Boolean, objMoeda.Ativo);

            db.ExecuteNonQuery(dbCommand, transaction);
        }
        //formula: RSI = 100 – 100/ (1 + RS) RS = Average Gain of n days UP  / Average Loss of n days DOWN
        private void CalculaRsi(EntMoeda objMoeda)
        {
            try
            {
                List <BinanceSpotKline> klines = client.Spot.Market.GetKlines(objMoeda.Codigo + EntMoeda.USDT, Binance.Net.Enums.KlineInterval.OneMinute, null, null, 100).Data as List <BinanceSpotKline>;

                /*decimal rsi = calculateRSIValues(klines, 6, objMoeda.IdMoeda);
                 * Aviso("RSI 100 6: " + rsi, "", false);
                 *
                 * rsi = calculateRSIValues(klines, 8, objMoeda.IdMoeda);
                 * Aviso("RSI 100 8: " + rsi, "", false);
                 *
                 * rsi = calculateRSIValues(klines, 10, objMoeda.IdMoeda);
                 * Aviso("RSI 100 10: " + rsi, "", false);
                 *
                 * rsi = calculateRSIValues(klines, 5, objMoeda.IdMoeda);
                 * Aviso("RSI 100 5: " + rsi, "", false);*/

                decimal rsi = calculateRSIValues(klines, 14, objMoeda.IdMoeda);
                Aviso(objMoeda.Codigo, "RSI 100 14: " + rsi, "", false);
                //Console.WriteLine("---------");

                EntCarteira objCarteira = new BllCarteira().ObterTodos("", EntUsuario.USUARIO_PADRAO, objMoeda.IdMoeda, 1)[0];

                if (objMoeda.OperacaoCompraAberta.IdOperacao == 0 || (objMoeda.OperacaoCompraAberta.IdOperacao > 0 && objMoeda.OperacaoVendaAberta.IdOperacao == 0))
                {
                    CheckAndTriggerCreateOrder(rsi, objMoeda, objCarteira);
                }

                if (objMoeda.OperacaoVendaAberta.IdOperacao > 0)
                {
                    MonitorarVenda(objMoeda, objCarteira);
                }
                else if (objMoeda.OperacaoCompraAberta.IdOperacao > 0 && objMoeda.OperacaoCompraAberta.DataFimExecucao.Year < 2000)
                {
                    MonitorarCompra(objMoeda, objCarteira);
                }
            }
            catch (Exception ex)
            {
                Aviso(objMoeda.Codigo, "BITCOINER - ERRO CALCULO RSI", "Houve um erro no calculo do RSI " + objMoeda.Codigo + " em " + DateUtils.ToStringCompleto(DateTime.Now) + "\n\n" + ex.Message + "\n\n" + ex.StackTrace);
            }
        }
示例#10
0
 public void Alterar(EntMoeda objMoeda, Int32 IdUsuario)
 {
     using (DbConnection connection = db.CreateConnection())
     {
         connection.Open();
         DbTransaction transaction = connection.BeginTransaction();
         try
         {
             dalMoeda.Alterar(objMoeda, transaction, db);
             SaveLog(IdUsuario, EntLog.LOG_EDITAR, "Moeda", objMoeda.IdMoeda, objMoeda, transaction, db);
             transaction.Commit();
         }
         catch (Exception ex)
         {
             transaction.Rollback();
             SaveLog(IdUsuario, EntLog.LOG_ERRO, "Moeda", objMoeda.IdMoeda, objMoeda, 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);
            }
        }