preview
Simulação de mercado (Parte 20): Iniciando o SQL (III)

Simulação de mercado (Parte 20): Iniciando o SQL (III)

MetaTrader 5Testador |
187 0
Daniel Jose
Daniel Jose

Introdução

Olá pessoal, e sejam bem-vindos a mais um artigo da série sobre como construir um sistema de replay/simulação.

Neste artigo, iremos começar a tratar de um assunto, que é ao mesmo tempo espinhoso. Mas se você conseguir entender, o que começaremos a ver a partir deste artigo, poderá começar a ter um grande progresso na sua carreira. O assunto não será algo muito simples. Porém irei tentar deixar as coisas de uma maneira que seja o mais simples possível de ser entendido e assimilado.


Preparando o cenário

No artigo anterior Simulação de mercado (Parte 19): Iniciando o SQL (II), expliquei como você pode usando scripts. Adicionar, modificar e mesmo deletar registros em um banco de dados. Porém, para que possamos de fato avançar na explicação. Precisaremos de um banco de dados, que contenha um mínimo de elementos. Isto para que você realmente consiga entender o que será explicado.

Apesar de podermos fazer as coisas com um banco de dados, tendo cerca de 10 ou pouco mais registros. A coisa realmente se torna melhor assimilada, quando usamos um arquivo de banco de dados que contenha mais de 15 mil registros. Ou seja, se você for criar isto manualmente irá ser uma bela de uma tarefa. No entanto, dificilmente você irá encontrar algum banco de dados, mesmo para fins didáticos disponível para download. Mas não precisamos de fato recorrer a este tipo de coisa. Podemos usar o MetaTrader 5, para criar um banco de dados para nós. Mesmo que ele não seja, assim tão perfeito, mas, pelo menos, terá uma grande quantidade de registros. E é isto que precisamos de fato.

Para entender de fato como faremos isto, que é usar o MetaTrader 5 para produzir um banco de dados, para que possamos estudar o próximo assunto. Será preciso que voltemos um pouco no tempo.

Existem pessoas, ou mesmo organizações pequenas que utilizam o Excel como um programa de banco de dados. Muitos de vocês podem não acreditar, ou mesmo perceber se isto, é ou não verdade. Mas não é somente o Excel que é usado desta maneira. Existem muitos outros programas que são usados assim. Mas neste momento, vamos nos restringir ao Excel. Quando usamos o Excel, como um programa a fim de conseguir manipular um banco de dados. Irá aparecer na aba de ribbon do Excel uma opção. Na imagem abaixo, você pode ver do que se trata.

Para que esta aba venha a surgir. Precisamos fazer algumas coisas. Uma delas, e talvez a mais simples. É abrir um arquivo que tenha um determinado formato, ou estrutura. Isto é feito, por meio do local mostrado na imagem abaixo.

Lembre-se de que estou mostrando uma forma. Mas não é a única. Agora vem a pergunta: Que tipo de arquivo estou pretendendo usar aqui? Você muito provavelmente usará diversos tipos de arquivos. E quando digo isto, estou me referindo ao detalhe de que a estrutura interna do arquivo pode ser qualquer uma. Porém, para facilitar, mas principalmente para que você possa entender onde quero chegar. Vamos ao MetaTrader 5. Na imagem abaixo, vemos onde quero chegar.

Note que aqui, fizemos o requerimento junto ao servidor de negociação, para obter todos os ticks negociados em um dado dia. Isto para um dado ativo. O que está sendo mostrado nesta imagem acima, é justamente um conjunto de informações de um banco de dados. Porém, aqui, nesta janela, você não consegue manipular dos dados da maneira que é possível ser feito quando usamos um programa adequado para isto. Assim você poderia exportar estas informações para um arquivo. Este poderá ter o formato CSV.

Uma vez que este arquivo, esteja salvo em um disco local. Você poderá de fato usar ele em um programa que manipula arquivos de bancos de dados. Mas, e é importante que você entenda isto. Antes de realmente manipular o conteúdo do arquivo, o interpretando como uma tabela de dados. Precisamos converter ele em um banco de dados. E é neste ponto que mora a mágica do processo. E é justamente onde quero chegar.


O primeiro contato fora de uma WorkBench

Então, uma vez que você tenha salvo as informações vistas na imagem acima em um arquivo. Poderá em um primeiro momento as carregar no Excel. O resultado será que o Excel, não mais irá tratar o arquivo, como você possivelmente esteja imaginando. Ele, Excel, irá de fato tornar o arquivo um equivalente a um banco de dados. Assim a interface do Excel irá mudar e ficará como mostrado abaixo.

Ok. Você pode pensar, que poderá trabalhar aqui, da mesma forma como iria trabalhar, se fizesse uso de comandos em SQL. Na verdade, não é bem assim que as coisas irão funcionar, quando você utiliza o Excel, ou um outro programa que permite você ter algum acesso a um banco de dados. Apesar de você, de fato vim a poder fazer diversas coisas aqui. Sua experiência não será nem de perto a mesma quando se faz uso do SQL puro. Então, vamos esquecer o Excel, e partir para uma outra direção. Isto para que possamos entender o comando que será explicado.


Usando o MetaEditor para pesquisar o banco de dados

Muito provavelmente você esteja imaginando que temos um grande abacaxi em mãos. Já que em muitos casos, o arquivo baixado pelo MetaTrader 5, e salvo como um CSV pode conter alguns megabytes de tamanho. E tornar tal coisa, algo aceitável a fim de podermos usar pesquisas SQL nestes dados baixados é algo muito complicado. Só possível por grandes gurus ou mestres da computação. Porém, a verdade é que se você não entende as ferramentas que tem em mãos, terá sempre um problema a ser resolvido. Mesmo que a solução esteja na sua frente.

Assim, a maneira mais simples, e sem fazer uso de nenhuma programação. De tornar todos aqueles dados baixados pelo MetaTrader 5, em algo mais agradável é usando o MetaEditor. Isto tornará de fato o arquivo CSV baixado, em um verdadeiro arquivo de banco de dados. Mas como? Como posso tornar um arquivo CSV salvo pelo MetaTrader 5, em um arquivo de banco de dados, usando para isto o MetaEditor? Parece algo, extremamente complicado. Não é tão complicado assim, meu caro leitor. É tudo uma questão de entender a ferramenta que você tem em mãos.

Primeiramente faça o seguinte: Vamos começar criando um banco de dados novo e completamente limpo. Já expliquei como fazer isto usando o MetaEditor. Uma vez com este arquivo de banco de dados criado. Você precisará fazer os seguintes passos.

Primeiro, selecione a opção indicada na imagem abaixo:

Esta opção permite, que você importe uma tabela para dentro do banco de dados. Lembre-se de que uma tabela é um conjunto de registros. E como o arquivo CSV é um conjunto de registro, iremos importar ele, como sendo uma tabela. Uma vez que você tenha selecionado a opção indicada. Você será direcionado a uma janela, que tem como objetivo, configurar a forma como o MetaEditor irá importar os dados, criando assim a tabela final. Você pode ver esta janela na imagem abaixo.

Para simplificar ao máximo, coloquei o arquivo CSV dentro do diretório do MQL5. Mas no final, o que importa, é o fato, de você selecionar o arquivo correto. Porém, se você simplesmente selecionar o arquivo, como mostrado na imagem acima. E logo em seguida clicar no botão ABRIR. Não terá nenhuma resposta do MetaEditor. Isto por que você apenas selecionou o arquivo. Mas não o importou ainda. É preciso fazer algumas configurações extras nesta mesma janela. Cada uma das configurações a serem feitas, depende de caso a caso. Não existe uma regra fixa.

Você precisa entender, e de forma mínima, o que o arquivo a ser importado contém. Não adianta, você simplesmente chegar, abrir o MetaEditor, pedir para importar os dados e esperar que o MetaEditor entenda o que o arquivo contenha. As coisas não são assim. Então a primeira coisa que você precisa configurar é o separador das informações. Lembre-se de que elas foram baixadas pelo MetaTrader 5. E se você não mudou a formatação do arquivo, o separador utilizado é o carácter de tabulação. Então mudando esta informação, temos a imagem abaixo.

Muito bem, este é o primeiro ponto a ser configurado. Agora temos mais um ponto. Isto considerando que você apenas baixou o arquivo e o está importando aqui no MetaEditor. O ponto em questão é o nome da tabela a ser usado. Agora, é o momento que muitos poderiam ficar bastante confusos. Isto por que no MetaEditor não temos nenhuma tabela incluída no banco de dados. Você pode ver isto olhando as imagens acima. Onde no momento que pedimos para importar o arquivo, não existe nenhuma tabela sendo indicada.

Mas então que tipo de informação devemos colocar como sendo a tabela? Você simplesmente deve dizer o nome que a tabela terá ao ser criada. Por isto que eu disse para você usar um arquivo totalmente limpo. Assim ficaria mais claro, este passo daqui. Então vamos informar um nome para o campo conforme mostrado na imagem abaixo.

Você pode colocar qualquer nome que desejar. Uma vez feito isto, poderá clicar no botão ABRIR. Lembrando mais uma vez, que dependendo do conteúdo do arquivo a ser importado, você precisará ajustar mais opções aqui. Porém, como acabamos de baixar o arquivo pelo MetaTrader 5, e o estamos importando usando o MetaEditor. Apenas estes passos já serão o suficiente para o nosso propósito.

Do momento que você clicar em ABRIR, você deverá esquecer completamente tudo o que você já deve ter visto ao usar este mesmo arquivo no Excel. Pois a coisa aqui será completamente diferente, de tudo que você já viu antes de ler estes artigos sobre banco de dados. Então ao olhar a tela do MetaEditor, você verá inicialmente a seguinte imagem.

Legal. Se você está vendo isto, significa que o MetaEditor, transformou o arquivo CSV em uma tabela dentro do banco de dados chamado MT5_Tutor.db. Muito provavelmente neste momento você esteja bastante confuso e não entendendo absolutamente nada do que esteja acontecendo. Ou do que acabou de acontecer. Mas vamos entender isto, pois o conceito é importante.

Todas aquelas informações, que foram baixadas pelo MetaTrader 5, quando você solicitou ao servidor informações de um ativo em uma determinada data. Agora não são mais toda aquela bagunça de dados e mais dados. Tudo aquilo foi organizado e transformado em uma tabela. Esta tabela contém em seu cabeçalho o mesmo cabeçalho que existia no arquivo CSV. Assim, se você desejar que as colunas dentro do seu banco de dados tenham um outro nome. Bastará antes de importar os dados do arquivo CSV, você edite a primeira e somente a primeira linha, de forma que as colunas tenham um outro nome.

Mas só faça isto, se você realmente já entende o que está fazendo. Pois se você fizer besteira, poderá ter um banco de dados completamente inútil. Mas mesmo que aqueles nomes não lhe agrade, você poderá mudar eles, usando um comando do SQL. Já que agora você não estará mais tratando de um arquivo CSV, mas sim de um banco de dados.

Tudo isto é muito bom e muito bonito. Mas como eu faço para acessar as informações dentro deste tal banco de dados? Achei que seria algo parecido com o Excel, ou algum outro programa de planilha. Mas isto daqui que estou vendo no MetaEditor, para mim é completamente inútil e sem nenhum valor.

Bem, se você está pensando isto, meu caro leitor, é por que você não tem ideia do quanto um banco de dados é poderoso. E saber fazer as coisas dentro dele é algo que exige algum estudo e dedicação. Mas não quero lhe ofender ou lhe menosprezar, meu caro leitor. Sei que muitos ao ver esta imagem acima, iriam ficar completamente frustrados, imaginando que iriam ver um cenário mágico e cheio de coisas legais. Mas vendo isto, desta forma parece tão sem sentido e sem propósito, que você dificilmente se interessaria em estudar e se aprofundar em SQL.

Mas deixe-me tentar mudar um pouco a sua visão sobre SQL. Vamos agora finalmente ver um dos comandos que com toda a certeza, será o que mais irá exigir que você o estude. Mas para separar as coisas vamos ver isto em um novo tópico.


Finalmente o comando SELECT

Este comando select, tem como seu modo mais básico a seguinte sintaxe.

SELECT * FROM table;

Observe que é exatamente, o mesmo comando que está sendo usado na animação logo abaixo.

Mas como interpretar este comando select? Interpretar ele é a coisa mais simples. Mas não somente ele. Todos os comandos em SQL, foram inteligentemente pensados para terem a sua sintaxe, facilmente assimilada. Para você entender e também perceber o que acabei de falar. Vamos ver como ler o comando visto acima.

Você deve ler ele da seguinte maneira: Selecione todos os dados cuja origem é a tabela de nome table. Esta é a forma literal de se ler este comando. Se você de fato entendeu como ler o comando, já deve estar imaginando que podemos fazer algumas coisas bem interessantes. Estou dando aqui o exemplo de leitura literal. Mas experimente fazer isto com outros comandos do SQL. Você irá logo notar que a sua velocidade de assimilação dos comandos será bem alta. Dado o fato de que é bem simples lembrar ou entender cada um dos comandos.

Mas voltando ao que nos interessa, neste momento. Observe o resultado da animação. Ali temos uma quantidade bastante grande de registros sendo retornados. Este tipo de coisa, é justamente o que eu desejava que ocorresse. Isto por que, se você usar o comando SELECT em uma tabela com poucos registros irá imaginar que não faz sentido usar o SQL. Porém quando a quantidade de registros é bastante grande. Você pode vir a ficar mais interessado em aprender a programação de SQL.

Qual é o real problema que temos aqui? O problema é a quantidade de informações que estão sendo retornadas. Mas se você entendeu como ler de forma literal o comando select. Já deve estar pensando uma maneira de reduzir a quantidade de dados. Fazendo algum tipo de filtragem. Bem, de fato se você começou a pensar assim, já é um bom sinal. Ainda mais se você pensou em substituir o asterisco por alguma outra coisa. Já que o asterisco, seria um valor curinga. Quem faz uso de um prompt de comando, sabe do que estou falando. Porém sem querer lhe desanimar, já que se você pensou como acabei de falar, não está no caminho errado. Pelo contrário está no caminho correto. Apenas precisa ser de alguma forma direcionado para fazer as coisas de uma maneira mais adequada.

Mas vamos pensar um pouco. Se você for substituir o asterisco do comando. Pelo que você deveria substitui-lo a fim de fazer alguma filtragem nos resultados que serão retornados pelo SQL? Esta é a mesma pergunta que os projetistas da linguagem SQL, tiveram que responder. Isto quando o SQL ainda estava sendo desenvolvido. Pense um pouco e me diga: Como você faria esta filtragem, tendo um verdadeiro montante de dados e muitas colunas?

Mas antes de explicar como, os projetistas e desenvolvedores resolveram brilhantemente esta questão. Quero chamar a sua atenção para um outro detalhe, que está presente aqui no MetaEditor. Isto por que este detalhe pode ser importante em algum momento futuro. Observe a imagem abaixo.

Veja que estou destacando uma região da imagem. O motivo é que se você olhar para o canto direito, da região destacada. Notará que foram carregados uma quantidade de registros. Em alguns momentos, pode ser necessário que você navegue entre estes registros a vim de observar os dados encontrados. Isto quando já estaremos fazendo uma filtragem um pouco mais seletiva. Clicando nas setinhas dentro da área demarcada, você pode ir para o próximo bloco de registros carregados. Observe que os blocos são carregados em incrementos de mil em mil.

Então o valor indicado na região demarcada, representa mil blocos. Assim se você deseja ir para o bloco de oito mil, bastará mudar o valor um para nove, e o bloco oito mil será carregado e apresentado no MetaEditor. Mas por que nove, o valor não deveria ser oito? O motivo é que a contagem se dá partindo do valor um. Porém o valor um indica que o bloco irá terminar no valor mil. Parece um pouco confuso no começo. Mas com um pouco de uso, você logo irá conseguir entender a lógica.

Experimente interagir um pouco com esta interface do MetaEditor, a fim de realmente entender como fazer a coisas aqui. Já que a acho bem mais enxuta que uma WorkBench. Mas mesmo assim, conseguimos fazer algumas coisas, sem precisar recorrer a uma WorkBench mais parruda. Ainda mais quando estamos apenas pesquisando dentro de um banco de dados.

Muito bem. Agora voltemos a nossa questão de como filtrar os resultados da pesquisa. Talvez você ainda esteja quebrando a cabeça para pensar em uma solução que seja fácil de assimilar. Mas, a solução que os projetistas desenvolveram é ao meu ver a melhor proposta que poderia ser feita. Aquele asterisco, poderá ser trocado por outra coisa. Irei mostrar isto em outro momento. Mas para filtrar a pesquisa, os desenvolvedores adicionaram uma outra coisa ao comando select. Mas aqui, temos um pequeno macete. Que dependendo do que você deseja pesquisar e como irá pesquisar. Fará com que o comando select fique ligeiramente diferente com relação a sua sintaxe.

A primeira coisa que você precisa entender é: Como usar o nome das colunas nas pesquisas. Isto talvez possa parecer meio estranho e extravagante. Mas, se você já filtrou resultados de uma tabela no Excel. Sabe que você deve selecionar uma coluna e depois indicar como a filtragem será feita. Seja baseado em um valor maior, menor ou igual a um determinado ponto, ou critério. A mesma coisa acontece aqui no SQL. Só que aqui, não fazemos as coisas como seria feita no Excel. O que fazemos é enviar um comando para que o SQL o execute. Assim a filtragem será devidamente executada.

Por exemplo. Suponhamos que você queira, que o SQL lhe mostre todos os registros cujo valor de FLAGS seja igual a 88. Você então sabe que de alguma forma terá que colocar no comando select, algo do tipo:

FLAGS = 88

Isto parece obvio. Mas para fazer isto você precisa adicionar uma coisinha ao comando. Então o comando anterior visto no início do tópico, ficaria como mostrado abaixo:

SELECT * FROM tb_Quotes WHERE "<FLAGS>" = 88;

Lembrando que o nome de nossa tabela é tb_Quotes. Ok, ao executar o comando mostrado acima, todos os registros cujo valor da coluna FLAGS for igual a 88, serão mostrados na área de resultados. Agora observe o seguinte: Por que o nome da coluna se encontra entre aspas? O motivo é que é uma string. Sempre que você for usar uma string no SQL, ela deverá estar entre aspas. Além disto, note o fato de que existem junto ao nome da coluna, os carácteres de maior e menor. Se você não utilizasse as aspas o SQL, poderia confundir estes carácteres do nome com algum comando interno do próprio SQL.

Neste momento, você pode estar pensando: Mas por que eu faria isto no SQL? Se eu fizesse uso do Excel ou outro programa similar, conseguiria os mesmos resultados e de maneira até mais simples. Não vejo utilidade em aprender SQL. De fato, meu caro leitor. Isto que acabei de mostrar poderia ser feito no Excel, de uma forma até mais simples. Mas o detalhe é que você está ignorando uma coisa. No atual momento, estamos apenas começando a ver como o SQL funciona. Estas coisas iniciais, podem realmente serem feitas em outros programas. E muitas delas de maneira muito mais fácil.

Porém quando trabalhamos com banco de dados reais. Muitas das vezes, usamos uma coisa que são as tabelas relacionadas. E pesquisas relacionadas. Este tipo de coisa não dá para fazer em programas como o Excel. Bem, até daria, mas seria muito mais trabalhoso e custoso do que é feito aqui no SQL.

Além deste fato, existe um outro, e que faz com que muitos programadores de longa data, não programe certas coisas. Eles simplesmente preferem usar o SQL, ou algo do tipo, para fazer certos tipos de trabalho. Para entender do que estou falando, precisamos voltar no primeiro artigo sobre SQL. Lá mencionei que muitas das vezes, é preferível fazer uso de uma ferramenta ou tecnologia já estabelecida. A ter que programar uma série de procedimentos e rotinas para fazer algumas coisas. Pois bem, neste ponto, onde você basicamente já sabe, como criar, inserir, modificar, remover e pesquisar registros de um banco de dados. Podemos nos aprofundar um pouco mais a respeito do que foi falado naquele artigo específico.

Vamos pensar em algo que foi visto até o momento. Para fazer tudo que fizemos usando o mínimo de conhecimento sobre SQL. Você, caro leitor, mesmo usando uma linguagem que permita você a trabalhar com dados variados como por exemplo o Python. Iria demorar muito mais tempo para produzir as mesmas coisas que já estamos fazendo, apenas pelo simples fato, de no lugar de usar o SQL, decidisse fazer as mesmas coisas usando o Python. Não estou aqui dizendo que você não conseguiria fazer as coisas. Somente estou dizendo que você iria demorar muito mais tempo, tendo todo um trabalho para criar, testar e desenvolver as rotinas para fazer o que é foi visto até aqui.

E lembrando que, até o momento, tudo que apresentei foi a parte mais básica sobre SQL. E mesmo assim, você, se for um programador de qualidade e um bom conhecimento em Python, iria demorar dias ou mesmo semanas para obter algo minimamente parecido. Ou como muitos iriam de fato desejar, similar ao que pode ser feito no SQL. Estou voltando neste mesmo assunto. Pelo fato de que, quero, ou melhor dizendo, gostaria que você não ficasse perdendo tempo, tentando reinventar a roda. Se você estudar, mesmo que seja o nível mais básico de SQL. Porém voltado a usar ele para o propósito que ele realmente foi criado. Verá que não faz sentido tentar programar algo que faz a mesma coisa que o SQL faz.


Considerações finais

Neste momento, não mostrei um dos principais pontos do SQL. Apesar de ter mencionado isto, nos artigos anteriores. Ainda não fizemos uso de algo que faz bancos de dados serem um assunto tão amplo. Mas já que neste artigo apresentei o comando básico que nos permite pesquisar informações em um banco de dados. Podemos nos aprofundar um pouco mais, nas questões que tornam o SQL, algo que você deve de fato levar em conta, se realmente deseja ser um bom profissional. No próximo artigo ainda iremos falar um pouco mais sobre programação SQL. Isto por que existe um conceito que ainda falta ser explorado e explicado.

Este conceito é o que envolve chaves primarias e chaves estrangeiras. Algo que faz toda a diferença quando se está criando um sistema de tabelas relacionadas. E saber usar tabelas relacionadas faz toda a diferença. Principalmente pelo fato de que elas ajudam muito em uma pesquisa no banco de dados. Mas também nos permite fazer e criar algumas coisas que de outra forma não seria possível. Então se você realmente se interessou pelo assunto que envolve banco de dados. Não perca o próximo artigo. Pois ali a coisa irá começar a deixar de ser básica e começará a se tornar um pouco mais séria.

Arquivo Descrição
Experts\Expert Advisor.mq5
Demonstra a interação entre o Chart Trade e o Expert Advisor (É necessário o Mouse Study para interação)
Indicators\Chart Trade.mq5 Cria a janela para configuração da ordem a ser enviada (É necessário o Mouse Study para interação)
Indicators\Market Replay.mq5 Cria os controles para interação com o serviço de replay/simulador (É necessário o Mouse Study para interação)
Indicators\Mouse Study.mq5 Permite interação entre os controles gráficos e o usuário (Necessário tanto para operar o replay simulador, quanto no mercado real)
Services\Market Replay.mq5 Cria e mantém o serviço de replay e simulação de mercado (Arquivo principal de todo o sistema)
Code VS C++\Servidor.cpp Cria e mantém um soquete servidor criado em C++ (Versão Mini Chat)
Code in Python\Server.py Cria e mantém um soquete em python para comunicação entre o MetaTrader 5 e o Excel
Indicators\Mini Chat.mq5 Permite implementar um mini chat via indicador (Necessário uso de um servidor para funcionar)
Experts\Mini Chat.mq5 Permite implementar um mini chat via Expert Advisor (Necessário uso de um servidor para funcionar)
Scripts\SQLite.mq5 Demonstra uso de script SQL por meio do MQL5
Files\Script 01.sql Demonstra a criação de uma tabela simples, com chave estrangeira
Files\Script 02.sql Demonstra a adição de valores em uma tabela

Arquivos anexados |
Anexo.zip (571.71 KB)
Recursos do Assistente MQL5 que você precisa conhecer (Parte 40): Parabolic SAR Recursos do Assistente MQL5 que você precisa conhecer (Parte 40): Parabolic SAR
O Parabolic Stop-and-Reversal (SAR) é um indicador de pontos de confirmação e término de tendência. Como ele detecta tendências com atraso, sua principal função era posicionar ordens stop-loss móveis para posições abertas. Vamos analisar se é possível utilizá-lo como sinal de EA com a ajuda de classes de sinais personalizadas para EAs, montadas usando o Assistente.
Funcionalidades do Assistente MQL5 que você precisa conhecer (Parte 39): Índice de força relativa Funcionalidades do Assistente MQL5 que você precisa conhecer (Parte 39): Índice de força relativa
O RSI é um oscilador de momentum popular que mede o ritmo e a magnitude da recente variação no preço de um título financeiro, para avaliar situações de sobrecompra ou sobrevenda. Entender a velocidade e a escala é essencial para identificar pontos de reversão. Aplicaremos esse oscilador em mais uma classe personalizada de sinais e examinaremos algumas de suas características. No entanto, começaremos resumindo nossa discussão sobre as bandas de Bollinger.
Algoritmo de Otimização Aritmética (AOA): O caminho do AOA até o SOA (Simple Optimization Algorithm) Algoritmo de Otimização Aritmética (AOA): O caminho do AOA até o SOA (Simple Optimization Algorithm)
Neste artigo, apresentamos o Algoritmo de Otimização Aritmética (Arithmetic Optimization Algorithm, AOA), que se baseia em operações aritméticas simples: adição, subtração, multiplicação e divisão. Essas operações matemáticas básicas são fundamentais para a busca de soluções ótimas em diversas tarefas.
Do básico ao intermediário: Herança Do básico ao intermediário: Herança
Este com toda a certeza, é um artigo, que você deverá dedicar um bom tempo a fim de entender como, por que as coisas mostradas aqui funcionam. Isto pelo simples fato de que, tudo que será visto e mostrado aqui, é originalmente direcionado ao que seria uma programação orientada em objetos. Mas que na verdade, tem como base e princípios uma programação estrutural.