Discussão do artigo "Simplificando o uso de bancos de dados em MQL5 (Parte 1): Introdução aos bancos de dados e ao SQL"

Novo artigo Simplificando o uso de bancos de dados em MQL5 (Parte 1): Introdução aos bancos de dados e ao SQL foi publicado:

Neste artigo, veremos como utilizar bancos de dados em MQL5 por meio das funções nativas da linguagem. Abordaremos desde a criação de tabelas e a inserção, atualização e exclusão de registros até a importação e exportação de dados, sempre com exemplos de código. Este conteúdo oferece uma base sólida para compreender os mecanismos internos de acesso aos dados e prepara o terreno para abordarmos o ORM (Object-Relational Mapping, mapeamento objeto-relacional), que implementaremos em MQL5.

Quando falamos em MQL5, a maioria das conversas gira em torno de indicadores, EAs, estratégias de negociação e backtests. Mas chega um momento em que qualquer trader ou desenvolvedor que leva a automação a sério percebe que armazenar dados é fundamental. É aí que entram os bancos de dados. Talvez você pense: "Mas eu já salvo meus resultados em arquivos CSV ou TXT. Por que complicar as coisas usando um banco de dados?" A resposta está na estruturação dos dados, na eficiência e na confiabilidade que um banco de dados oferece, especialmente quando precisamos lidar com grandes volumes de informações ou operações complexas.

À primeira vista, falar de bancos de dados no contexto do MQL5 pode parecer um exagero. Afinal, a linguagem é voltada principalmente ao trading, aos indicadores e aos robôs de negociação automatizada. No entanto, quando começamos a desenvolver estratégias que envolvem grandes volumes de dados, backtests complexos ou registros detalhados de ordens, as limitações dos arquivos convencionais logo se tornam evidentes. É nesse cenário que saber criar, acessar e utilizar bancos de dados passa a ser um recurso capaz de transformar seu fluxo de trabalho no trading.

Quem começa a explorar bancos de dados em MQL5 encontra dezenas de funções nativas e exemplos isolados. Armazenar registros e consultá-los é relativamente simples, mas logo surge uma questão: como estruturar tudo isso de maneira que possa ser reutilizado em projetos reais? Nesta série de artigos, vamos além da documentação. Começaremos pelas funções básicas do SQLite e avançaremos, passo a passo, até a implementação de um mini-ORM em MQL5 (TickORM). A proposta é organizar as chamadas diretas em camadas de abstração bem planejadas, inspiradas nas tecnologias Java JDBC e JPA, mas adaptadas ao ecossistema MetaTrader.

Neste artigo, apresentarei os fundamentos do uso de bancos de dados com MQL5 e SQL. Isso servirá de base para os próximos artigos, nos quais encapsularemos essas funções em classes, interfaces e, por fim, em um ORM.


Autor: joaopedrodev

Gosto muito de ler seus artigos técnicos!

Neste primeiro artigo, mostrei apenas a ponta do iceberg. O TickORM vai muito além: a ideia é mudar completamente a maneira como você trabalha com bancos de dados no MQL5. O objetivo é alcançar algo direto, simples e poderoso, em que abrir um banco de dados, criar um repositório e manipular entidades seja tão natural quanto trabalhar com matrizes. Ao final da série, o uso se assemelhará ao exemplo abaixo, no qual você salva, pesquisa, atualiza e exclui registros sem escrever uma única consulta manualmente. Esse é o caminho que estou abrindo com o TickORM.

int OnInit(void)
  {
   IDatabaseManager *database = new CDatabaseManager();
   if(database.OpenDatabase("trades.sqlite"))
     {
      //--- Repositório de instâncias
      AccountRepository repo(database);
      
      //--- Inserir
      Account acc;
      acc.number = 10;
      repo.save(acc);
      
      //--- Selecionar tudo
      Account acc[];
      repo.findAll(acc);
      ArrayPrint(acc);
      
      //--- Selecionar por id
      Account acc = repo.findById(1);
      Print(acc.id);
      Print(acc.number);
      
      //--- Atualização
      Account acc;
      acc.id = 1;
      acc.number = 10;
      repo.update(acc);
      
      //--- Excluir por ID
      repo.deleteById(1);
     }
   
   database.CloseDatabase();
   delete database;
   return(INIT_SUCCEEDED);
  }
Um ORM adequado para o MQL5 é extremamente necessário neste momento. Felizmente, contamos com pessoas como você, criando bibliotecas tão legais e importantes que facilitam nossas vidas. Adoro todos os projetos e artigos em que você trabalhou até agora, cara. Todos eles resolveram um grande problema que eu enfrentava ao trabalhar com o MQL5 em determinadas tarefas.
joaopedrodev trabalha com bancos de dados no MQL5. O objetivo é alcançar algo direto, simples e poderoso, em que abrir um banco de dados, criar um repositório e manipular entidades seja tão natural quanto trabalhar com matrizes. Ao final da série, o uso se assemelhará ao exemplo abaixo, no qual você salva, pesquisa, atualiza e exclui registros sem escrever uma única consulta manualmente. Esse é o caminho que estou abrindo com o TickORM.

Para sua informação: uma implementação de ORM para MQL5 foi apresentada no livro.

MQL5 Book: Advanced language tools / SQLite database / OOP (MQL5) and SQL integration: ORM concept
MQL5 Book: Advanced language tools / SQLite database / OOP (MQL5) and SQL integration: ORM concept
  • www.mql5.com
The use of a database in an MQL program implies that the algorithm is divided into 2 parts: the control part is written in MQL5, and the execution...