
Simulação de mercado (Parte 19): Iniciando o SQL (II)
Introdução
Olá pessoal, e sejam bem-vindos a mais um artigo da série sobre como construir um sistema de replay/simulação.
No artigo anterior Simulação de mercado (Parte 18): Iniciando o SQL (I), começamos a ver os primeiros comandos que podemos usar no SQL. Isto para que fosse possível fazer a criação inicial de um banco de dados a fim de receber informações e para pesquisas futuras. Mostrei que você pode usar o mesmo que é visto em qualquer programa ou script do SQL, dentro do MetaEditor. E por consequência também poderá usar o mesmo código, só que dentro de um executável feito em MQL5. Isto para que possa ser executado diretamente pelo MetaTrader 5.
Porém existe um comando em SQL, que se você tentar executar usando o MetaEditor não conseguirá ter existo. O mesmo irá reportar um erro quando você tentar executá-lo. Porém quero deixar bem claro uma coisa. Todos os comandos possíveis de serem usados no SQL poderá ser usado sem problemas no MQL5 e no MetaEditor. Isto por que o MetaTrader 5, de fato faz uso do SQLite. Apesar de você poder usar todo e qualquer comando, em um executável do MQL5. A mesma coisa não se aplica ao MetaEditor. Então para não ficar um mal entendido aqui. Vamos ver de que comando estou falando.
Um comando SQL, que nunca será executado pelo MetaEditor
Muito bem, a hora de experimentar as coisas é agora. Isto por que estamos iniciando no aprendizado, e os efeitos colaterais serão pequenos. Porém, quero alerta a você, caro leitor, para nunca executar nenhum comando de SQL em um banco de dados importante, sem antes entender o que ele faz. Se for experimentar algo novo. Faça isto da maneira o mais segura possível. Para não gerar aborrecimentos depois. Pois como diz o ditado: A fé pode mover montanhas, mas não irá restaurar os seus dados.
Então, vamos ver que bendito comando é este. Na animação abaixo, você pode ver do que se trata.
Preste bastante atenção: O comando DROP, quando usado no SQL, nos permite apagar de forma permanente alguma coisa. Se você usar este comando sem prestar a devida atenção que esteja fazendo, terá sérios problemas. Isto por que o SQL não irá lhe pedir nenhum tipo de confirmação. Ele simplesmente irá deletar o que você informou, para ser deletado.
Mas quando estamos usando o MetaEditor, não conseguiremos, e repito isto somente irá acontecer no MetaEditor, apagar o arquivo de banco de dados. Porém se você enviar o mesmo comando, que como deu para ver na animação gerou um erro, para o SQL executar. Seu arquivo de banco de dados será deletado.
No entanto, você pode de maneira equivocada imaginar que o MetaEditor esteja se recusando a executar o comando DROP. Mas como deu para ver na mesma animação, não é isto que acontece. Tanto que foi possível deletar a tabela criada anteriormente.
Talvez você possa, neste momento, estar pensando: Mas se tentarmos usar o comando CREATE DATABASE, no MetaEditor, também não conseguiremos, assim como também o comando USE. Sim é verdade. Porém ambos comandos de fato são implementados, porém de uma maneira que você não precise digitar os mesmos.
No entanto, para remover um arquivo de banco de dados, de uma unidade de disco, o MetaEditor não fará tal coisa. Então existe uma diferença aqui. Que é justamente o fato de que o MetaEditor, por questões de segurança, não permitirá a execução do comando DROP DATABASE, quem em SQL diz para apagar o arquivo de banco de dados.
Então, aqui acabei de demonstrar e você pode experimentar, que de fato existe um comando do SQL que o MetaEditor não executará. Fora este comando, todos demais podem e serão executados sem falhas. Assim sendo, considero explicado o comando DROP, que nada mais é do que um comando para remover de forma permanente alguma coisa. Seja uma coluna, tabela ou mesmo um banco de dados inteiro. Então tome cuidado com este comando, pois ele não irá lhe pedir nenhuma confirmação, se deve ou não ser executado.
Porém, existem formas de impedir que algo seja deletado sem as devidas permissões. Mas para isto seria preciso explicar mais profundamente como trabalhar com SQL. E o intuito aqui, não é e não será este. O objetivo aqui, é apenas lhe fornecer uma base, para que você consiga entender o que faremos depois. Isto já usando o SQL dentro de um executável criado no MQL5.
Inserindo informações no banco de dados
O próximo comando a ser visto é o responsável por inserir informações no banco de dados. E sim, você não deve tentar editar de forma manual um arquivo de banco de dados. O correto é sempre utilizar comandos do SQL para fazer isto. Não importa se o banco é pequeno, ou com poucas colunas e dados. Você nunca o deverá editar de forma manual. Deverá sempre usar comandos SQL para tal atividade.
O comando responsável por inserir informações no banco de dados é bastante simples. Porém você precisa tomar alguns cuidados. Na verdade, o que você realmente precisa é de ficar atento ao usar o comando. Já que ele funciona, como se fosse um modelo chave valor. Quem sabe programação em Python, logo de cara, perceberá a ideia aqui.
Isto por que, o comando em SQL para inserir informações no banco de dados, se parece muito com seria como a criação de dicionário em Python. Ou seja, você usa uma chave, e atribui um valor a esta chave. Mas aqui no SQL a coisa funciona um pouco diferente. Mas a ideia é a mesma. Vamos então entender como isto de fato acontece.
Agora não iremos mais mostrar o mesmo comando no MetaEditor. Isto por que, aceito já ter ficado claro, o fato de que os comandos a serem dados serão os mesmos. Então não faz sentido ficar repetindo a mesma coisa. Para ficar mais simples de explicar o comando, iremos usar um pequeno código em SQL. Algo bem simples e singelo.
Observe o código abaixo:
01. CREATE DATABASE IF NOT EXISTS MT5_Tutor_DB; 02. USE MT5_Tutor_DB; 03. 04. CREATE TABLE IF NOT EXISTS tb_Quotes 05. ( 06. of_day DATE, 07. symbol CHAR(6), 08. price DECIMAL(5, 2) 09. ); 10. 11. INSERT INTO tb_Quotes (of_day, symbol , price) 12. VALUES ('2023-07-06', 'BOVA11' , 105.61); 13. 14. SELECT * FROM tb_Quotes;
Script em SQL
Por hora não se preocupe com a linha 14. Ela está ali apenas para que você possa visualizar o resultado de forma mais simples. Este código pode ser usado tanto no MetaEditor, quanto diretamente no servidor SQL. Porém se você for usar ele no MetaEditor, deve se atentar para o fato de que a linha um e dois deverão ser executadas de uma outra maneira. Já expliquei isto nos artigos anteriores. Na dúvida pesquise os mesmos para saber como proceder no MetaEditor, a fim de executar este mesmo código. O que de fato nos interessa aqui, é a linha quatro, que é onde criamos a tabela, e a linha 11 que é onde inserimos dados na tabela.
Este código apesar de funcionar, não é de fato um código que você deverá usar quando for criar um banco de dados. O motivo disto é que ele permite que os dados possam ser duplicados infinitamente dentro do banco de dados. Se você já ouviu algo sobre banco de dados, sabe que neles não podemos duplicar valores. Eles são criados de maneira e evitar que isto ocorra. Porém, apesar de que o propósito seja este, se você codificar de forma amadora um script em SQL. Com toda a certeza terá valores duplicados. Esta forma amadora é vista no código acima. Porém como o propósito aqui é explicar como adicionar valores ao banco de dados. Podemos nos dar ao luxo de permitir valores duplicados. E mesmo alguns erros durante esta inserção. Como por exemplo, campos tendo o valor NULL.
Mas para que você entenda o que está acontecendo. Veja que na linha quatro iremos criar a tabela apenas se ela não existir no banco. Esta tabela terá as seguintes colunas. Acompanhe a explicação: Na linha seis, dizemos que queremos uma coluna, cujo conteúdo será uma data.
Na linha sete, dizemos que queremos uma coluna cujo conteúdo ocupará seis carácteres. Isto nos permitirá a colocar o nome do ativo que iremos armazenar. Esta nomenclatura, segue o padrão encontrado no nome dos ativos na B3 ( Bolsa do Brasil ).
Na linha oito, dizemos que queremos um espaço de cinco carácteres, dos quais dois serão usados para indicar o valor decimal. Isto nos permite colocar cotações que vão de 0 a 999.99, o que para ativos negociados na B3 são mais do que o suficiente. Ok, note que não estamos definindo nenhuma chave ou condição de bloqueio. É justamente a ausência de tais condições é que permitem que valores sejam duplicados.
Mas agora, vamos ver o que está acontecendo na linha 11. Observe que o comando para inserir algo na tabela se inicia com INSERT INTO. Logo depois, dizemos qual é a tabela que receberá os valores. No caso a tb_Quotes, que acabando de criar. Em seguida, declaramos os nomes das colunas que irão receber os valores.
Agora preste atenção, você pode colocar as colunas em qualquer ordem, mas deverá respeitar o mesmo nome que elas tem na tabela. Ou seja, se você colocar um nome diferente do que existe na tabela, o comando gerará um erro. Uma vez que você definiu a ordem das colunas, você adiciona a palavra VALUES, e começa a declarar os valores a serem usados. Neste ponto, você deverá colocar os valores na mesma sequência em que as colunas foram declaradas. Ou seja, se você declarar a coluna price antes da coluna symbol, deverá ajustar as coisas aqui. De forma que o preço venha antes do nome do símbolo.
Talvez isto tenha ficado confuso, mas se você usar o que é mostrado abaixo, irá ter o mesmo efeito do script mostrado acima. Isto para inserir valores:
INSERT INTO tb_Quotes (of_day, price, symbol) VALUES ('2023-07-06', 105.61, 'BOVA11');
Script em SQL
Note que troquei a ordem da declaração das colunas. Por conta disto, foi preciso modificar a ordem de colocação dos valores. Este é o principal cuidado no qual você deve ter. Agora, talvez você esteja confuso quanto uma coisa. Por que a data está sendo declarada desta forma? Bem, o motivo é que este é o formato esperado pelo MySQL. Ou seja, primeiro dizemos o ano, depois o mês e for fim o dia. Alguns bancos de dados permitem você usar outros formatos. Onde depois, quando a informação for ser gravada no banco de dados ela será formatada, como é visto aqui. Um exemplo disto é o SQL Server, que permite você usar o formato dia-mês-ano. Mas de qualquer maneira, dentro do banco de dados, o formato será ano-mês-dia.
Muito bem, se você executar este script, mostrado acima, irá ter como resultado a imagem abaixo sendo mostrada.
Agora preste atenção, se você voltar a executar, a linha 11 novamente, irá duplicar esta mesma informação no banco de dados. O resultado será o que é visto logo abaixo.
Você pode pensar: Mas isto não é problema, basta que eu apague a linha que está duplicada. Sim, bastaria você apagar a linha duplicada. Mas você deve primeiro entender, que aqui o exemplo é simples. Pense agora em um banco de dados real. Você pode ter uma quantidade monstruosa de registros. Ter um registro duplicado irá tornar o seu banco completamente inadequado para ser usado. Além, é claro, impedir ou no mínimo dificultar, mudanças ou atualizações de algum registro específico. Por isto que criar banco de dados é algo que demanda estudo e planejamento.
Apesar de conceitualmente, o script mostrado acima está correto, já que ele é executado. Ele não está correto por permitir que o banco possa conter dados duplicados. Mas pior do que isto, ele não permite que voc6e mude ou atualize algum registro. Para entender este detalhe, vamos usar uma outra forma de inserir dados no banco. Então ao no lugar de declarar todas as colunas e valores de uma única vez. Vamos fazer isto em partes. Algo que em muitos cenários de fato acontece. Assim o código para inserir os mesmos valores vistos no script, ficaria como mostrado abaixo:
01. CREATE DATABASE IF NOT EXISTS MT5_Tutor_DB; 02. USE MT5_Tutor_DB; 03. 04. CREATE TABLE IF NOT EXISTS tb_Quotes 05. ( 06. of_day DATE, 07. symbol CHAR(6), 08. price DECIMAL(5, 2) 09. ); 10. 11. INSERT INTO tb_Quotes (of_day) VALUES ('2023-07-06'); 12. INSERT INTO tb_Quotes (symbol) VALUES ('BOVA11'); 13. INSERT INTO tb_Quotes (price) VALUES (105.61); 14. 15. SELECT * FROM tb_Quotes;
Script em SQL
Veja que aqui estamos literalmente usando o conceito chave valor. Que é o mesmo usado quando criamos dicionários em Python. E sim, podemos fazer este tipo de coisa no SQL e o banco de dados irá receber os valores armazenando os mesmos dentro da tabela indicada. Porém, observe o resultado da execução deste script. Isto pode ser visto logo abaixo:
Mas o que aconteceu? Por que tivemos este resultado, e não o que havia sido obtido anteriormente? Existe dois motivos para isto. O primeiro é o fato de que estamos simplesmente adicionando dados ao banco. E o segundo é que o banco está estruturado de forma a poder duplicar valores. Caso você tente modificar, algum registro não conseguirá fazer isto, se o seu banco estiver sendo criado como mostrado nestes scripts. Precisamos criar alguma forma poder selecionar um registro específico para podermos manipular e modificar o seu valor. Assim poderemos inserir os dados um a um, no estilo chave valor. Mas como poderemos de fato fazer isto?
A primeira coisa a ser feita é a transformação de uma destas colunas em uma chave única. Este é o primeiro passo. Ao fazer isto, você imediatamente irá impedir de que algum registro venha a ser duplicado dentro do banco de dados. Mas a minha pergunta é: Qual a melhor forma de fazer isto?
Algumas pessoas costumam criar uma coluna apenas para este propósito. O que de fato não está errado. Mas o tipo de solução depende de caso a caso. No nosso caso, não precisamos cria uma coluna extra apenas para servir de chave única. Podemos fazer isto apenas selecionando a coluna correta. Então vamos pensar.
A coluna preço pode receber valores que hora serão diferentes, hora serão iguais. Então pode não ser uma boa a tornar única. Já a coluna que contém o nome do ativo, irá com toda a certeza se repetir, a cada novo registro adicionado. Já a coluna que informa a data, temos uma possível candidata.
Mas por que possível, e não a candidata? O motivo é: De quanto em quanto tempo iremos de fato, colocar novos registros no banco? E por que isto é importante? O motivo é que se você for fazer registros em um prazo muito curto, terá que realmente criar uma coluna apenas para isto. Mas se os registros forem feitos uma vez por dia. A solução foi encontrada.
Assim supondo, que você queira guardar a cotação diária de um ativo, poderá modificar o primeiro script visto acima da seguinte forma:
01. CREATE DATABASE IF NOT EXISTS MT5_Tutor_DB; 02. USE MT5_Tutor_DB; 03. 04. CREATE TABLE IF NOT EXISTS tb_Quotes 05. ( 06. of_day DATE PRIMARY KEY, 07. symbol CHAR(6), 08. price DECIMAL(5, 2) 09. ); 10. 11. INSERT INTO tb_Quotes (of_day, symbol , price) 12. VALUES ('2023-07-06', 'BOVA11' , 105.61); 13. 14. SELECT * FROM tb_Quotes;
Script em SQL
Observe que tudo que foi modificado no primeiro script. É justamente a linha seis, onde adicionamos o termo PRIMARY KEY. Neste momento, estamos dizendo que o valor da coluna of_day será a chave primaria desta tabela. Podemos ter mais de uma coluna sendo chave primária. Porém, NÃO e volto a repetir, NÃO podemos ter valores duplicados na chave primária. Se você tentar fazer isto, o SQL irá entender isto como um erro. E o comando não será executado.
Então se você tentar executar novamente o comando INSERT INTO, usando a mesma data já existente no banco de dados. Você não conseguirá fazer isto. Será preciso informar uma outra data para que o registro que você esteja tentando inserir seja aceito pelo SQL. Este tipo de medida, extremamente simples, é que torna um banco de dados consistente. Evitando que registros sejam duplicados. Como foi dito, uma simples medida, resolveu uma série de problemas.
O resultado da execução do script acima é visto na imagem abaixo:
Note que ela é diferente das demais imagens. Apesar de que no momento da pesquisa ela irá ter o mesmo resultado. Naturalmente você deve estar pensando que poderemos agora inserir dados no estilo chave valor, ou melhor dizendo: coluna valor. Sim podemos fazer isto. Então a sua primeira ideia é criar um script como mostrado abaixo:
01. CREATE DATABASE IF NOT EXISTS MT5_Tutor_DB; 02. USE MT5_Tutor_DB; 03. 04. CREATE TABLE IF NOT EXISTS tb_Quotes 05. ( 06. of_day DATE PRIMARY KEY, 07. symbol CHAR(6), 08. price DECIMAL(5, 2) 09. ); 10. 11. INSERT INTO tb_Quotes (of_day) VALUES ('2023-07-07'); 12. INSERT INTO tb_Quotes (symbol) VALUES ('BOVA11'); 13. INSERT INTO tb_Quotes (price) VALUES (105.61); 14. 15. SELECT * FROM tb_Quotes;
Script em SQL
Lembrando que este script mostrado acima, está sendo executado imediatamente depois de já termos um valor em of_day. Assim para evitar que o SQL impeça que o registro seja criado, você muda a data. Você de fato estará usando a lógica. Demostrando que entendeu como as chaves primárias funcionam. Mas ao executar este script, você obtém um erro. E sendo curioso, você procura ver o que aconteceu ao banco de dados. Tendo como resultado a imagem abaixo:
Agora você pode estar encucado. Por que foi gerado um erro, se o registro foi criado? O motivo é que na linha 12 você está tentando inserir uma informação. Mas ao fazer isto o SQL tentará criar, um novo registro. Mas espera um pouco ai. Como assim, o SQL está tendo de criar, um novo registro, se eu não estou dizendo que estou criando uma nova chave primária? Achei que enquanto estivesse usando uma chave primária, estaria usando o mesmo registro. De fato, no começo, muita gente comete este equívoco. Isto por que eles de fato não entenderam o conceito.
Mas vamos esclarecer as coisas. Quando você usa o comando INSERT INTO você cria uma nova entrada de registro no banco de dados. Mas para modificar este registro, que é justamente o desejado agora. Você tem que usar um outro comando. Assim vamos separar as coisas e ver isto em um outro tópico.
Modificando e atualizando um registro
Para que o SQL saiba qual registro modificar ou atualizar precisamos de uma chave única. Ou seja, uma chave primária. Assim por conta que definimos o valor of_day, como nossa chave primária, a primeira coisa que devemos fazer é tentar adicionar ela no banco de dados. Se ela já existir o SQL impedirá a criação de um novo registro.
Uma vez que temos a chave primária definida e registrada no banco de dados. Podemos modificar ou atualizar os valores das demais colunas. Preste atenção a isto. Você não deve tentar modificar o valor da chave primária. Isto para evitar problemas. Você deve de fato criar a chave e depois atualizar o registro. Assim o código que faz a atualização de forma a termos um novo registro, usando o conceito de chave valor, ou melhor dizendo, coluna valor. É visto logo abaixo:
01. CREATE DATABASE IF NOT EXISTS MT5_Tutor_DB; 02. USE MT5_Tutor_DB; 03. 04. CREATE TABLE IF NOT EXISTS tb_Quotes 05. ( 06. of_day DATE PRIMARY KEY, 07. symbol CHAR(6), 08. price DECIMAL(5, 2) 09. ); 10. 11. INSERT INTO tb_Quotes (of_day) VALUES ('2023-07-07'); 12. UPDATE tb_Quotes SET symbol = 'BOVA11' WHERE of_day = '2023-07-07'; 13. UPDATE tb_Quotes SET price = 105.61 WHERE of_day = '2023-07-07'; 14. 15. SELECT * FROM tb_Quotes;
Script em SQL
O resultado da execução deste script é visto logo abaixo:
Note que estamos considerando, o fato de já haver um registro anterior, a execução deste script acima. Por conta disto é que fizemos as coisas desta forma. Então na linha 11 criamos a chave para indicar que estaremos adicionando uma nova entrada no banco de dados. Assim que temos está chave criada. Usamos o comando UPDATE da seguinte forma:
- Logo depois do nome do comando, dizemos qual é o nome da tabela.
- Segue o nome da tabela o comando SET, este diz que iremos modificar ou atualizar alguma coluna.
- A seguir temos o nome da coluna com o respectivo valor a ser colocado nela.
- Para que o SQL, encontre o registro a ser atualizado, usamos o comando WHERE indicando qual é a chave a ser usada.
Aqui temos algumas outras questões. Mas não vou complicar as coisas. Vamos manter tudo da forma o mais simples possível. Isto por que a ideia aqui é lhe dar uma base, para que você possa usar o SQL junto com o MetaTrader 5. E não promover um curso sobre SQL. Mas sugiro que você procure estudar um pouco mais a fundo as coisas que estou mostrando. Pois aqui podemos fazer muito mais coisas, de forma a agilizar todo o trabalho que o SQL terá que fazer. Isto para não ficarmos sobrecarregando o SQL com requerimentos pouco eficientes. A ideia aqui é ser didático e não eficiente.
Muito bem, agora que você já sabe, como inserir, modificar e atualizar um registro. Falta entender como remover um registro. Mas novamente, vamos separar as coisas para que você não as confunda.
Deletando um registro
Remover um registro do banco de dados é algo muito simples de ser feito. Existem diversas maneiras, de se eliminar, ramos inteiros de registros, de dentro de um banco de dados. Mas novamente, vamos ver a forma mais simples e básica. Isto de forma que você possa fazer, pelo menos o básico. Ou seja, que você consiga remover um registro do banco de dados.
Para fazer isto, vamos fazer a suposição do seguinte: Você adicionou um registro para o dia 07 de julho de 2023, mas percebeu depois que neste dia não houve negociação. Então você deseja remover este registro do banco de dados. Já que um registro inválido, mata totalmente o banco de dados. Assim uma da maneira de se fazer isto, é usando o seguinte script mostrado abaixo:
1. USE MT5_Tutor_DB; 2. 3. DELETE FROM tb_Quotes WHERE of_day = '2023-07-07'; 4. 5. SELECT * FROM tb_Quotes;
Script em SQL
Note que primeiro selecionamos na linha um o banco de dados. E já na linha três enviamos o pedido para eliminar um registro do banco de dados. De que forma isto foi feito? Da forma o mais simples possível. Ou seja, primeiro dizemos o nome do comando que é: DELETE FROM, depois dizemos o nome da tabela na qual o registro se encontra. No caso a tb_Quotes. Logo em seguida, dizemos quem será eliminado. Para fazer isto usamos o comando WHERE seguido da informação que diz ao SQL o tipo de correspondência procurada. No nosso caso, estamos usando a chave primária do dia que queremos eliminar do banco de dados.
Para finalizar o script, na linha cinco, pedimos ao SQL para que a tabela nos seja mostrada. Notaram como é extremamente simples de se remover um registro. Mas esta forma que está sendo mostrada é apenas uma de tantas formas possíveis.
Considerações finais
Aqui neste artigo, procurei tentar deixar as coisas o mais simples quanto foi possível fazer. Sei que existem forma muito melhores de se fazer as mesmas coisas mostradas aqui. Se você, caro leitor, já tem experiência e conhecimento sobre programas SQL. Sabe muito bem, que tudo o conteúdo mostrado aqui, é o verdadeiro arroz com feijão sobre SQL. Para quem não sabe, o termo: ARROZ COM FEIJÃO, é uma expressão regional. Muito usada para dizer, que você precisa de um mínimo, mas que também precisa de alguma variedade também mínima a fim de se satisfazer de alguma forma.
Mas voltando ao assunto, quero por meio destes artigos sobre SQL, preparar minimamente, você caro leitor, a conseguir fazer algo em SQL. E não venha a precisar de fato, a programar algumas coisas. Que como eu disse no primeiro artigo sobre SQL, não faz sentido você perder tempo, programado rotinas e mais rotinas a fim de conseguir, gerar ou produzir algo que o próprio SQL já contém.
Este tipo de coisa, estou fazendo para que você, caro leitor, se sinta motivado a sempre procurar por um conhecimento adequado e mais amplo. Que não fique na zona de conforto. Ou que venha a ficar perdendo tempo, programando coisas que poderiam ser feitas de maneira muito mais simples, eficiente e seguras se você usasse a ferramenta adequada.
Muita gente as vezes torce o nariz ao ver um programador ou grupo, usando algum tipo de ferramenta. Dizendo que aquilo não está de acordo com o interesse pessoal daquela pessoa que torce o nariz. Mas quero dizer a você caro leitor, e que aspira ser um programador realmente de qualidade. Esqueça esta coisa de vaidade. Comece a usar as ferramentas disponíveis e que estão ao seu dispor. Você se tornará muito mais produtivo. Muito mais confiante no que faz. Mas principalmente, muito mais valorizado. Isto por que, enquanto muitos estão quebrando a cabeça buscando uma solução. Você tendo um conhecimento mais amplo. Vai logo na ferramenta adequada e produz facilmente a solução que um cliente deseja. Fica neste artigo uma mensagem:
O mundo da tecnologia evolui muito rapidamente. No momento em que você entendeu algo. Significa que aquilo se tornou obsoleto.
Pense nisto. E nos vemos no próximo artigo. Pois ainda existem algumas coisas a serem explicadas sobre o SQL, antes de podermos de fato começarmos a produzir algo para nosso sistema de replay / simulador usando a união entre o SQL e o MQL5. Então até mais.
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 |
Aviso: Todos os direitos sobre esses materiais pertencem à MetaQuotes Ltd. É proibida a reimpressão total ou parcial.
Esse artigo foi escrito por um usuário do site e reflete seu ponto de vista pessoal. A MetaQuotes Ltd. não se responsabiliza pela precisão das informações apresentadas nem pelas possíveis consequências decorrentes do uso das soluções, estratégias ou recomendações descritas.





- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso