Example #1
0
        public void TestaBuscaDeAtivos()
        {
            JObject result = APIAtivos.BuscarAtivo("");

            Assert.IsTrue((Boolean)result["results"]["error"]);
            result = APIAtivos.BuscarAtivo("XOUD");
            Assert.IsTrue((Boolean)result["results"]["XOUD"]["error"]);
            result = APIAtivos.BuscarAtivo(null);
            Assert.IsTrue((Boolean)result["results"]["error"]);

            result = APIAtivos.BuscarAtivo("PETR4");
            Assert.IsNull(result["results"]["error"]);
            result = APIAtivos.BuscarAtivo("PETR4");
            Assert.IsNotNull(result["results"]["PETR4"]);
            Assert.IsNotNull(result["results"]["PETR4"]["price"]);
            Assert.IsTrue(Decimal.TryParse(result["results"]["PETR4"]["price"].ToString(), out decimal price));
        }
Example #2
0
        private static void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
        {
            if (timerAtivo)
            {
                return;
            }
            timerAtivo = true;
            Console.WriteLine("*************************************************");
            Console.WriteLine($"O evento foi disparado às {DateTime.Now}");
            checarArquivoDeConfiguracao();
            Console.WriteLine($"Estou monitorando o ativo:{entradaUsuario.ativo}");
            Console.WriteLine($"Estou monitorando o ativo enviarei um email caso o preço esteja maior que {entradaUsuario.referenciaVenda.ToString("#.00", CultureInfo.InvariantCulture)} ou menor que {entradaUsuario.referenciaCompra.ToString("#.00", CultureInfo.InvariantCulture)}.");
            Console.WriteLine("*************************************************");
            JObject respostaAPI = APIAtivos.BuscarAtivo(entradaUsuario.ativo);

            if (!(respostaAPI["results"]["error"] is null))
            {
                Console.WriteLine($"Falha ao conectar com a API às {DateTime.Now}. Detalhes: {respostaAPI["results"]["message"].ToString()}");
            }
Example #3
0
        protected override void OnDoWork(DoWorkEventArgs e)
        {
            CultureInfo usCulture = new CultureInfo(System.Configuration.ConfigurationManager.AppSettings["Culture"]);

            workerThread = Thread.CurrentThread;
            try
            {
                bool bgWorkingRunning = false;
                while (!bgWorkingRunning)
                {
                    if (this.CancellationPending)
                    {
                        break;
                    }
                    bgWorkingRunning = true;
                    entradaUsuario   = FormMain.entradaUsuario;
                    JObject respostaAPI = APIAtivos.BuscarAtivo(entradaUsuario.ativo);
                    if (!(respostaAPI["results"]["error"] is null))
                    {
                        Console.WriteLine($"Falha ao conectar com a API às {DateTime.Now}. Detalhes: {respostaAPI["results"]["message"].ToString()}");
                    }
                    else
                    {
                        Decimal precoAtivoAtual = Convert.ToDecimal(respostaAPI["results"][entradaUsuario.ativo]["price"], usCulture);
                        entradaUsuario.precoAtual = precoAtivoAtual;
                        if (precoAtivoAtual > entradaUsuario.referenciaVenda)
                        {
                            string corpoDoEmail = LeitorDeArquivos.modeloEmailVenda()
                                                  .Replace("#Ativo", entradaUsuario.ativo)
                                                  .Replace("#precoAtivo", precoAtivoAtual.ToString())
                                                  .Replace("#referenciaDeVenda", entradaUsuario.referenciaVenda.ToString());


                            if (Email.Enviar("[stock-quote-alert] Alerta para venda", corpoDoEmail))
                            {
                                Console.WriteLine("E-mail enviado");
                            }
                            else
                            {
                                Console.WriteLine("Falha ao enviar o email");
                            }
                        }
                        else if (precoAtivoAtual < entradaUsuario.referenciaCompra)
                        {
                            string corpoDoEmail = LeitorDeArquivos.modeloEmailCompra()
                                                  .Replace("#Ativo", entradaUsuario.ativo)
                                                  .Replace("#precoAtivo", precoAtivoAtual.ToString())
                                                  .Replace("#referenciaDeCompra", entradaUsuario.referenciaCompra.ToString());
                            Email.Enviar("[stock-quote-alert] Alerta para compra", corpoDoEmail);
                        }
                    }


                    if (DateTime.Now.TimeOfDay < Convert.ToDateTime("10:00").TimeOfDay || DateTime.Now.TimeOfDay > Convert.ToDateTime("17:30").TimeOfDay)
                    {
                        //Os valores dos ativos não são atualizados antes das 10:00 e também não são atualizados depois das 17:30, então o app espera
                        DateTime startTime   = DateTime.Now;
                        DateTime endtime     = Convert.ToDateTime("10:00");
                        DateTime endOftheDay = Convert.ToDateTime("23:59");
                        TimeSpan duration    = Convert.ToDateTime("10:00").AddDays(1).Subtract(DateTime.Now);
                        if (((int)DateTime.Now.DayOfWeek) == 6)
                        {
                            duration = Convert.ToDateTime("10:00").AddDays(2).Subtract(DateTime.Now);
                        }
                        else if (((int)DateTime.Now.DayOfWeek) == 5)
                        {
                            duration = Convert.ToDateTime("10:00").AddDays(3).Subtract(DateTime.Now);
                        }
                        else
                        {
                            duration = TimeSpan.FromMilliseconds(1000 * 60 * 15); // A api é atualizada a cada 15 minutos, então a requisição será feita a cada 15 minutos
                        }
                        FormMain.entradaUsuario = entradaUsuario;
                        this.ReportProgress(1);
                        //Thread.Sleep(duration); //TODO: Remover esse comentário para o app funcionar durante o tempo que a API é atualizada
                        Thread.Sleep(1000 * 60 * 1);
                    }

                    bgWorkingRunning = false;
                }