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