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