Esempio n. 1
0
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            decimal?d;

            if (value != null)
            {
                d = DecimalUtils.Truncate((decimal)value, Precision);
            }
            else
            {
                d = null;
            }
            JToken.FromObject(d).WriteTo(writer);
        }
Esempio n. 2
0
 /// <inheritdoc />
 public Boolean TrySample <TRng>(TRng rng, out System.Decimal result) where TRng : notnull, IRng
 {
     result = DecimalUtils.GenerateCandidateDecimal(rng);
     return(0 < result && result <= 1);
 }
        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);
            }
        }