コード例 #1
0
        internal static ResultCotacoes ObterCotacoes(DateTime dataAtual, int idAtivo)
        {
            while (Math.Abs(DateTime.Now.Ticks - _ultimoTickRequisicao) < IntervaloMinimo)
            {
                Thread.Sleep(10);
            }

            string url = $"https://iqoption.com/api/quote/history/v1/expirations?active_id={idAtivo}&tz_offset=0&";

            url += $"date={dataAtual.Year}-{dataAtual.Month}-{dataAtual.Day}-{dataAtual.Hour}";

            if (dataAtual.Minute != 0)
            {
                url += $"-{dataAtual.Minute}";
            }

            string json = new WebClient().DownloadString(url);

            _ultimoTickRequisicao = DateTime.Now.Ticks;

            ResultCotacoes result = JsonConvert.DeserializeObject <ResultCotacoes>(json);

            result.result.expirations.RemoveAll(e => Regex.Match(e.datetime,
                                                                 @"[\d]{4}-[\d]{2}-[\d]{2} [\d]{2}:[\d]{2}:([\d]{2})").Groups[1].Value != "00");

            return(result);
        }
コード例 #2
0
        private static void CargaHistorico()
        {
            Log.GravarLinha("Iniciando carga do histórico de cotações");

            DateTime dataAtual = Configuracoes.DataMaxima;
            DateTime dataCorte = Configuracoes.DataMinima;

            while (dataAtual >= dataCorte)
            {
                if (!Configuracoes.IncluirOtc)
                {
                    while (Cotacao.EhOtc(dataAtual))
                    {
                        Log.GravarLinha("Ignorando período OTC: " + dataAtual.ToString("dd-MM-yyyy HH:mm") + " (UTC)");
                        dataAtual = dataAtual.AddMinutes(-1);
                    }
                }

                string processando = $"Consultando: {dataAtual.ToString("dd-MM-yyyy")} UTC";
                processando += $" - Hora: {dataAtual.ToString("HH")}";
                processando += " - Minuto: ";

                if (dataAtual.Minute == 0)
                {
                    processando += "00 ao 16";
                }
                else
                {
                    processando += dataAtual.Minute.ToString().PadLeft(2, '0');
                }

                Log.GravarLinha(processando);

                foreach (int idAtivo in Configuracoes.Ativos)
                {
                    Log.GravarLinha($"Ativo: {Cotacao.ConverterCotacao(idAtivo)}");

                    ResultCotacoes result = Api.ObterCotacoes(dataAtual, idAtivo);

                    if (Configuracoes.ExibirLogCotacao)
                    {
                        List <Cotacao> cotacoes = result.result.expirations;
                        cotacoes.Reverse();

                        foreach (Cotacao cotacao in cotacoes)
                        {
                            Log.GravarLinha($"{cotacao.datetime} - {cotacao.value}");
                        }
                    }

                    BancoDados.GravarCotacao(idAtivo, result);
                }

                dataAtual = dataAtual.Minute == 17 ? dataAtual.AddMinutes(-17) : dataAtual.AddMinutes(-1);
            }
        }
コード例 #3
0
        /*
         *  CREATE TABLE COTACAO(
         *          IDATIVO INT,
         *          DATA DATETIME,
         *          VALOR FLOAT)
         *
         *  CREATE INDEX COTACAO_IN_01 ON COTACAO(IDATIVO)
         *  CREATE INDEX COTACAO_IN_02 ON COTACAO(DATA)
         *  CREATE INDEX COTACAO_IN_03 ON COTACAO(IDATIVO, DATA)
         */

        internal static void GravarCotacao(int idAtivo, ResultCotacoes result)
        {
            List <Cotacao> cotacoes = result.result.expirations;

            cotacoes.Reverse();

            foreach (Cotacao cotacao in cotacoes)
            {
                DateTime dataRef      = DateTime.ParseExact(cotacao.datetime, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
                double   valorCotacao = Convert.ToDouble(cotacao.value);

                string sql = string.Empty;

                if (Configuracoes.Sobreescrever)
                {
                    sql += "IF EXISTS(SELECT 1 FROM COTACAO WHERE IDATIVO = @IDATIVO AND DATA = @DATA)" + Environment.NewLine;
                    sql += '\t' + "UPDATE COTACAO SET VALOR = @VALOR WHERE IDATIVO = @IDATIVO AND DATA = @DATA" + Environment.NewLine;
                    sql += "ELSE" + Environment.NewLine;
                    sql += '\t' + "INSERT INTO COTACAO(IDATIVO, DATA, VALOR) VALUES(@IDATIVO, @DATA, @VALOR)";
                }
                else
                {
                    sql += "IF NOT EXISTS(SELECT 1 FROM COTACAO WHERE IDATIVO = @IDATIVO AND DATA = @DATA)" + Environment.NewLine + '\t';
                    sql += '\t' + "INSERT INTO COTACAO(IDATIVO, DATA, VALOR) VALUES(@IDATIVO, @DATA, @VALOR)";
                }

                if (Configuracoes.GravarBancoDados)
                {
                    Log.GravarLinha("Gravando na base");

                    SqlConnection conexao = new SqlConnection(Configuracoes.CadeiaConexao);
                    SqlCommand    comando = new SqlCommand(sql, conexao);
                    comando.Parameters.AddWithValue("@IDATIVO", idAtivo);
                    comando.Parameters.AddWithValue("@DATA", dataRef);
                    comando.Parameters.AddWithValue("@VALOR", valorCotacao);
                    conexao.Open();
                    comando.ExecuteNonQuery();
                    conexao.Close();
                }

                GravarScript(sql, idAtivo, dataRef, valorCotacao);
            }
        }