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