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 CriaOrdemCompra(EntMoeda objMoeda, EntCarteira objCarteira) { try { 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; } Decimal quantidade = objCarteira.SaldoDolar / valor; 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 = false; 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.OperacaoCompraAberta = objOperacao; new BllMoeda().Alterar(objMoeda, EntUsuario.USUARIO_PADRAO); Aviso(objMoeda.Codigo, "BITCOINER - ORDEM DE COMPRA", "Criada ordem de compra 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.Buy, 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 = false; 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.OperacaoCompraAberta = objOperacao; new BllMoeda().Alterar(objMoeda, EntUsuario.USUARIO_PADRAO); Aviso(objMoeda.Codigo, "BITCOINER - ORDEM DE COMPRA", "Criada ordem de compra 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 COMPRA", "ERRO Criada ordem de compra 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 COMPRA", "Houve um erro na criação de ordem de compra " + objMoeda.Codigo + " em " + DateUtils.ToStringCompleto(DateTime.Now) + "\n\n" + ex.Message + "\n\n" + ex.StackTrace); } }