Mergulhe rapidamente na linguagem MQL5

MetaQuotes | 10 dezembro, 2013

Por que você precisa de MQL5?

Pode haver muitas razões pelas quais você decidiu estudar a moderna linguagem de programação de estratégias de negociação MQL5 e nós apreciamos a sua decisão! Usuários avançados podem navegar facilmente na documentação da linguagem, bem como na variedade de artigos e serviços apresentados aqui. Mas, se você acabou de descobrir o terminal do cliente MetaTrader 5, muitas coisas podem parecer incomuns e confusas à primeira vista.

Então, quais são as vantagens de conhecer MQL5? Talvez você tenha decidido estudar a linguagem OOP (programação orientada a objeto) atual. Após estudar MQL5, você pode dominar facilmente outras linguagens de alto nível, tal como C++, С#, Java e assim por diante. É claro que isso não significa que elas sejam muito similares, mas os seus princípios básicos têm muito em comum.

Ou talvez você já conheça uma dessas linguagens e tenha um projeto para desenvolvimento do seu próprio robô de negociação ou sistema analítico de informações para trabalhar em mercados financeiros. Neste caso, você dominará facilmente a linguagem MQL5 especializada, criada especificamente para esse propósito.

Por outro lado, talvez você já conheça a MQL4, utilizada ativamente para a criação de diversos robôs de negociação e indicadores para para o popular terminal de negociação MetaTrader 4? Se este for o caso, você simplesmente precisa se esforçar um pouco para perceber todo o potencial da nova linguagem MQL5 e todos os benefícios do novo ambiente de desenvolvimento MetaEditor 5.

Pode haver diversas razões para estudar MQL5 e nós queremos dar algumas dicas sobre onde começar e no que prestar atenção. Então, vamos começar.

Mergulhe rapidamente na linguagem MQL5

Possibilidades e recursos da linguagem

A linguagem MetaQuotes 5 (MQL5) foi desenvolvida pela MetaQuotes Software Corp. com base em sua longa experiência na criação de plataformas de negociação online de diversas gerações. A seguir são apresentadas as principais vantagens dessa linguagem.

Para iniciantes em programação

Caso não tenha a experiência de programação em linguagens em alto nível, você pode usar qualquer manual C++ como exemplo ao estudar o básico sobre a linguagem do MQL5 (sintaxe, tipos de dados, variáveis, operadores, funções, OOP e assim por diante). Os desenvolvedores de MQL5 procuraram assegurar a compatibilidade máxima dos seus recursos com a linguagem C++ altamente popular.

A experiência demonstra que é possível aprender MQL5 do zero dentro de alguns meses, enquanto que pode ser necessário menos de um ano para alguns usuários estudarem e descobrirem todos os seus recursos. Veja o artigo Oportunidades ilimitadas com o MetaTrader 5 e MQL5. Talvez ele inspire você a criar algo realmente ótimo.

Para usuários MQL4

Primeiramente, você poderá considerar a nova abordagem para a criação de indicadores desconfortável. Muitas das novas funções de gerenciador de evento podem surpreender você, enquanto que sintaxe similar a C e os novos tipos de dados possam inicialmente parecer incomuns.

Mas, após pouco tempo, você apreciará todas as vantagens de MQL5 em relação a MQL4. E, o que você pensa sobre as diversas possibilidades de trabalho com gráficos e objetos gráficos e a possibilidade de desenhar qualquer imagem como em uma tela? Você terá a oportunidade de experimentar tudo isso após ter se familiarizado com a MQL5.

Para programadores profissionais

Se você codifica em qualquer uma das linguagens modernas, dominar rapidamente a MQL5 será muito fácil para você. Você já conhece a OOP e o modelo de evento. Agora, você apenas precisa conhecer as funções específicas a seguir, que foram criadas especificamente para negociação algorítmica.

Também há as seguintes diferenças sutis na sintaxe da linguagem, implementadas por razões de segurança de escrita de código e tempo ótimo de operação de aplicativo.

Se você nunca realizou operações de negociação, você poderá ter algumas dúvidas a respeito dos termos de negociação e do Strategy Tester ao escrever o seu robô de negociação. A seção de artigos contém publicações úteis para ajudar você com isso, a exemplo dos seguintes documentos:

Assim, a linguagem MQL5 não é um problema para um programador profissional. O principal problema é a familiarização com negociação e seus conceitos relacionados.


Instalação do terminal MetaTrader 5

O instalador web do terminal MetaTrader 5 pode ser baixado no website oficial através do link https://download.mql5.com/cdn/web/metaquotes.software.corp/mt5/mt5setup.exe. A instalação do terminal MetaTrader 5 é muito fácil. Tudo é feito em alguns cliques. Porém, recomendamos que você instale o terminal em qualquer disco, com exceção daquele em que o sistema operacional Windows está instalado. A razão para isso é que a Microsoft implementou o novo sistema de controle de ações do usuário, iniciando com o Windows Vista, UAC.

Assim, se você não tem experiência em administração de sistemas ou se você não gosta de navegar por muitas pastas ocultas, especifique a pasta da instalação do terminal longe dos Arquivos de Programas para permitir que o terminal de dados seja armazenado no mesmo diretório do terminal MetaTrader 5. Por exemplo, instale o terminal no disco D:\, caso o sistema operacional esteja instalado em C:\.

Mais informações sobre as diferenças entre os modos de operação do MetaTrader 5 que dependem do caminho de instalação podem ser encontradas em Iniciação → Iniciar o terminal no guia do usuário integrado.


Indicadores, scripts e Expert Advisors

A linguagem MQL5 utiliza três tipos básicos de programa. Cada tipo é melhor adequado para resolver suas tarefas específicas, da seguinte forma:

Exemplos de indicadores do MetaTrader 5

O melhor é começar a aprender os fundamentos da MQL5 através da escrita de scripts, utilizando exemplos da documentação da MQL5 ou da Base de códigos. Assim, você pode começar a trabalhar com funções de objeto e experimentar as operações de negociação em uma conta de demonstração.

O próximo passo é escrever os seus próprios indicadores personalizados e analisar exemplos da base de códigos e dos artigos. Após dominar os indicadores, você estará pronto para aprender as funções de gerenciamento de eventos.

O objetivo final é a criação de Expert Advisors simples e testá-los em relação a dados históricos utilizando o Strategy Tester no terminal MetaTrader 5. Há muitos artigos sobre esse assunto em Experts, Tester e Sistemas de negociação.

E, é claro, devemos mencionar o recurso mais excitante relacionado à programação MQL5: o desenvolvimento de módulos personalizados para os Expert Advisors através do Assistente MQL5. Você pode encontrar diversos artigos sobre esse assunto e a base de códigos contém uma série de Módulos do Assistente MQL5 prontos.


Modelo de evento

Um programa MQL5 somente funciona quando alguns eventos ocorrem. Eles podem ser o download e inicialização de um programa MQL5, nova chegada de tick (mudança do símbolo de preço), alterações de propriedades de gráfico, alteração de um símbolo ou um período de tempo em um gráfico, atuação de ordem pendente e assim por diante.

Dessa forma, o modelo de evento permite que você escreva programas interativos da forma mais simples possível. Há grandes possibilidades para escrever painéis gráficos personalizados e criar interfaces de usuário convenientes que possam se adequar as suas necessidades. As funções integradas para trabalho com gráficos permitem a criação de aplicativos bem projetados e com recursos completos.

Exemplo simples de gerenciamento de eventos em programa MQL5


A possibilidade de gerar eventos personalizados utilizando a função EventChartCustom() para qualquer gráfico ativo no MetaTrader 5 permite a criação de sistemas interativos complexos. A retenção e o gerenciamento de eventos são realizados pela função OnChartEvent(). Os recursos mencionados foram apresentados em Aparelho de negociação baseado em histórico de negociações e no exemplo da função EventChartCustom().


Depuração e guia do usuário

O terminal MetaTrader 5 e o MetaEditor 5 contêm guias do usuário integrados bem documentados que podem ser acessados através da tecla F1. Toda a documentação é atualizada automaticamente através de LiveUpdate. Além disso, esse guia do usuário também está disponível online em diversos idiomas no site oficial da plataforma de negociação MetaTrader 5.

A principal fonte de aprendizagem é a documentação da MQL5, que não se encontra apenas online em https://www.mql5.com/pt/docs, mas também está disponível para download nos formatos CHM e PDF em diversos idiomas.

O terminal do cliente e o MetaEditor 5 estão bastante integrados um com o outro. Você sempre pode mudar para outro aplicativo ao pressionar a tecla F4. Isso é um recurso muito conveniente ao se editar um código, especialmente se você estiver trabalhando simultaneamente com diversos terminais.

Qualquer programa MQL5 pode ser depurado no terminal diretamente a partir do editor através da tecla F5. O gráfico abrirá automaticamente e o seu programa (um script, um indicador ou um Expert Advisor) será executado nele. Ao depurar scripts, você também deve considerar que o upload deles é feito automaticamente após a finalização da operação OnStart(). Dessa forma, o processo de depuração finaliza automaticamente nessa etapa e o gráfico "depuração" é fechado sem salvar todos os seus objetos gráficos criados pelo script. Deste modo, coloque um ponto de interrupção ou um Sleep() com um valor muito grande antes do operador return() bem ao final do script.

O modo de depuração é necessário tanto para detectar erros no seu programa como para estudar e aprender MQL5. Além de utilizar pontos de quebra em seu código, há uma função DebugBreak() especial, que somente trabalha se um programa estiver no modo de depuração.

E, é claro, devemos mencionar o poderoso sistema de busca integrado ao MetaTrader 5, o qual permite procurar quaisquer dados necessários não apenas em um arquivo ou pasta, mas também no website MQL5.community (Artigos, Fórum e base de códigos).

Configurar parâmetros de busca no MetaEditor 5

Os resultados obtidos podem ser filtrados pelas categorias necessárias. Dessa forma, o ambiente de desenvolvimento fornece não apenas um guia de usuário integrado para o editor e a linguagem MQL5, mas também a possibilidade de encontrar materiais úteis no website mql5.com.


Perfil de código

O ambiente de desenvolvimento MetaEditor 5 oferece aos programadores diversos recursos para simplificar a depuração e a escrita de códigos. Do que mais os programadores precisam além do recurso de depuração? Perfil de código, é claro. A definição do perfil é realizada através do agrupamento dos recursos do aplicativo, tal como o tempo de execução dos seus fragmentos individuais (funções, linhas), de maneira conveniente.

A definição de perfil permite que você detecte rapidamente as partes do seu aplicativo que mais consomem tempo. Você pode avaliar as mudanças implementadas em termos de velocidade de operação para selecionar os algoritmos mais eficientes. Os desenvolvedores profissionais já estão bem cientes das possibilidades deste recurso, enquanto que os iniciantes podem examinar os seus programas sob uma nova luz.

Perfil de código no MetaTrader 5

A captura de tela acima apresenta o perfil do código exibido no fórum (https://www.mql5.com/en/forum/7134). Experimente o perfil de código através do download do código no tópico do fórum mencionado.


Memória MQL5: armazenar e gerenciar o seu trabalho de maneira uniforme

Outro recurso interessante e conveniente para a programação MQL5 é a sua memória de códigos fonte MQL5 pessoal. Ao usá-lo, você sempre terá acesso direto aos seus arquivos através do MetaEditor 5 de qualquer lugar no mundo. Você pode armazenar não apenas programas MQL5, mas também fontes C++ (cpp, h) e arquivos fonte BMP e WAV.

Adicionar arquivo à Memória MQL5

Você pode adicionar e extrair os seus códigos, reverter alterações — em resumo, você pode fazer tudo que os sistemas SVN modernos têm para oferecer. Além de trabalhar com a Memória MQL5 diretamente a partir do MetaEditor 5, você pode usar qualquer cliente externo que suporte Subversion 1.7, tal como o Tortoise SVN.


A vida dos indicadores, gráficos e objetos gráficos

Toda a experiência anterior foi considerada durante o desenvolvimento do MetaTrader 5. Dessa forma, alguns recursos podem parecer incomuns à primeira vista. Por exemplo, o modelo eficiente é utilizado para cálculo do indicador — um indicador representa uma parte de cálculo. Muitos Expert Advisors, scripts e outros indicadores podem utilizar resultados de um indicador. Isso também significa que se um indicador for configurado em diversos gráficos com o mesmo símbolo e período de tempo, o cálculo será realizado em uma única entidade de cálculo. Esta abordagem economiza tanto tempo como memória.

Além disso, os valores de um indicador podem ser calculados com o uso de valores de outro indicador ou com o uso dos valores das séries em MQL5. Isso permite a obtenção de cálculos complexos de indicador de maneira unificada e simples. Como já foi mencionado, são muitas as possibilidades de representação gráfica de valores de indicador em linguagem MQL5.

Todas as operações relacionadas às propriedades do gráfico e gerenciamento de objetos gráficos são assíncronas. Isso evita que os usuários percam tempo ao esperar que o sistema de vídeo do terminal exiba as alterações em cores, tamanhos e assim por diante. Se você deseja obter resultados imediatos da execução das funções em Funções de objeto ou Operações de gráfico, chame ChartRedraw() para que o gráfico seja redesenhado à força. Caso contrário, o gráfico será redesenhado automaticamente pelo terminal na primeira oportunidade.


Operações de negociação

A negociação em MQL5 é realizada através do envio de solicitações através do uso da função OrderSend(). Uma solicitação é uma estrutura MqlTradeRequest especial preenchida com os valores necessários de acordo com uma ação de negociação necessária.

Você pode comprar ou vender, fazer pedidos de compra/venda com condições definidas ou apagar um pedido pendente. Caso a função OrderSend() tenha sido executada com sucesso, o resultado da execução da solicitação de negociação é fixado à estrutura MqlTradeResult.

A princípio, você não precisa verificar a exatidão do preenchimento da estrutura MqlTradeRequest ao estudar MQL5. A biblioteca padrão possui uma classe CTrade especial para a realização de operações de negociação. Essa classe foi designada para simplificar o trabalho dos programadores de MQL5.

Trabalhar com pedidos

OrderOpen

Realiza o pedido com parâmetros definidos.

OrderModify

Modifica os parâmetros do pedido pendente.

OrderDelete

Deleta o pedido pendente.

Trabalhar com posições

PositionOpen

Abre a posição com parâmetros definidos.

PositionModify

Modifica os parâmetros da posição.

PositionClose

Fecha a posição.

Métodos adicionais

Buy

Abre uma posição longa com parâmetros específicos.

Sell

Abre uma posição curta com parâmetros específicos.

BuyLimit

Realiza o pedido do tipo Limite de Compra (comprar a preço mais baixo que o preço atual de mercado) com parâmetros específicos.

BuyStop

Realiza o pedido do tipo Parada de Compra (comprar a preço mais alto que o preço atual de mercado) com parâmetros específicos.

SellLimit

Realiza o pedido do tipo Limite de Venda (vender a preço mais alto que o preço atual de mercado) com parâmetros específicos.

SellStop

Realiza o pedido do tipo Parada de Venda (vender a preço mais baixo que o preço atual de mercado) com parâmetros específicos.


Um exemplo de uso da classe CTrade pode ser encontrado no Expert Advisor de treinamento do exemplo MACD no pacote de entrega padrão do terminal. O Expert Advisor pode ser encontrado em \MQL5\Experts\Examples\MACD. Algumas outras classes úteis para trabalhar com ordens, posições, negócios, e assim por diante, podem ser encontradas na seção Classes de negociação juntamente com a CTrade.


Strategy Tester do MetaTrader 5

O MetaTrader 5 não permite somente negociar em diversos mercados financeiros com o uso de robôs de negociação, mas também possibilita a verificação da lucratividade e estabilidade desses robôs em diferentes momentos históricos. Para conseguir fazer isso, o Strategy Tester foi implementado no terminal.

Deve-se considerar que o terminal atua como o gerente de execução, distribuindo tarefas a serviços individuais denominados agentes durante o teste/otimização de um Expert Advisor. Assim, os testes são realizados como sessões de comunicação entre o terminal e os agentes. O provador envia tarefas aos agentes e obtém resultados de execução em troca.

Otimização do sistema de negociação no provador do terminal MetaTrader 5

As mensagens do provador e dos agentes são colocadas no diário. Ao testar, os agentes podem enviar um grande número de mensagens geradas em um Expert Advisor pelas funções Print() e Alert(). Dessa forma, nem todas as mensagens dos agentes são exibidas no diário. Algumas delas podem ser ignoradas. Isso é feito para evitar que o teste fique lento por causa da necessidade de exibir todas as mensagens.

Dessa forma, o diário é armazenado separadamente em \tester\logs\, enquanto que os relatórios detalhados com todas as mensagens são salvos nas pastas adequadas dos agentes do provador. Lembre-se disto ao procurar relatórios detalhados para análise de teste. Felizmente, o provador possui um visualizador de relatórios especial em que você pode encontrar os relatórios para um intervalo específico.

Além dos testes, há também um modo de otimização dos parâmetros de entrada de um Expert Advisor, no qual o provador pode utilizar dezenas, centenas ou mesmo milhares de agentes de teste (por exemplo, a partir da Rede MQL5 em nuvem). Nessa caso, o envio de mensagens e a exibição através das funções Print() e Alert() são completamente suprimidos para não aumentar o volume do tráfico de saída na direção do provador e para economizar espaço no disco rígido do computador em que os agentes de teste estão localizados. Uma única exceção é feita para a função OnInit(). A função pode utilizar Print() para enviar a mensagem que pode esclarecer uma razão para uma inicialização mal sucedida ou recusa para realização de um teste utilizando a função ExpertRemove() por razões técnicas.

Você pode encontrar mais informações em Tester. Acreditamos que você gostará das possibilidades do Strategy Tester do terminal do cliente MetaTrader 5.


Vá além dos limites

Quem quer que você seja, você descobrirá novas oportunidades após estudar MQL5. Isso pode incluir uma melhor compreensão de linguagens de programação, novas perspectivas de negociação ou familiarização com novas tecnologias. O novo terminal MetaTrader 5 inclui tantos novos recursos que provavelmente seria muito difícil encontrar um único desenvolvedor que tenha descoberto todo o seu potencial até agora.

Neste artigo, nós não mencionamos ainda diversos outros recursos, incluindo o trabalho conveniente com DLLs, download de programas da base de códigos para o editor, a execução deles com um clique no terminal e muito mais. Se você não tem receio de ler a extensa lista de recursos do terminal, você é bem-vindo para fazer isso em MetaTrader 5: Mais do que você pode imaginar!

Desejamos sucesso a vocês e esperamos vê-los entre os membros permanentes da comunidade MQL5!