Está chegando o novo MetaTrader 5 e MQL5

Yuriy Zaytsev | 4 dezembro, 2013

Eu darei uma breve descrição de alguns momentos.


Fig. 1. Não é Photoshop - é o MQL5.

Quase tudo que interessou a mim e a outros no MQL5 e MT5 é implementado em um nível muito alto.

A mudança básica no MQL5 é a aparência da programação orientada a objetos. Eu não me aprofundarei sobre a POO - é somente que programadores experientes obtém mais possibilidades. Para aqueles que gostaram do MQL4 e não sabem sobre a POO, os desenvolvedores deixaram a possibilidade de escrever em MQL5 utilizando o estilo do MQL4 sem POO. A diferença está na funcionalidade que deve ser aprendida novamente.

Vamos pegar um exemplo simples: as variáveis de preço de compra e de venda não existem mais. A fim de obter os valores de venda, a função abaixo deve ser solicitada:

SymbolInfoDouble(Symbol(),SYMBOL_BID);

Não há Low[0] ou iLow ( Symbol(), PERIOD_D1, 0 ), frequentemente usados, mas você pode reconstruí-los facilmente. As novas funções com os dados do histórico dão possibilidades de leitura dentro do histórico, desde um ponto até o outro, de uma certa barra até uma outra certa barra ou de um tempo selecionado até outro tempo selecionado. A leitura prévia da série visível de dados foi carregada na memória. Você precisando ou não, ela foi lida; e se você precisava ler M1, ele foi lido desde 1999 (caso havia histórico disponível) até a data, hora e minuto atuais.

Agora apenas a faixa necessária pode ser lida, o que consideravelmente economiza tempo e memória.

MqlRates rates_arrayG[];
Int Bar=30; // ler apenas 30 barras a partir de zero
iCopBar=CopyRates(Symbol(),PERIOD_M1,0,Bar,rates_arrayG);

Este recurso economiza tanto tempo tanto como memória.

Tal mudança na funcionalidade não assusta. Nós simplesmente precisamos de tempo para aprender novas funções-analógicas.

Algumas inovações funcionais que eu esperei do MQL:

Vamos nos concentrar um pouco neles.

A função OnTimer() é solicitada se o temporizador é pré-inicializado na função de pré-definição OnInit (processador de eventos de inicialização do EA).

Exemplo:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetTimer(1); //cada segundo irá se referir ao OnTimer()
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit()
  {
   EventKillTimer(); // o cancelamento do evento timer deve ser feito na saída
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   MqlDateTime str1;
   TimeGMT(str1); // nova função para ver as horas
   Comment(str1.hour
           ,str1.min
           ,str1.sec
           ,str1.day
           ,str1.mon
           ,str1.year
           ,str1.day_of_year
           ,OrdersTotal()
           ,PositionsTotal()
           );
  }

Portanto, o controle pode ser obtido não apenas no recibo de ponto como era antes, mas também do temporizador, que permite escrever programas gerenciáveis em tempo real. Com esta possibilidade, sistemas mais elaborados podem ser criados.

Eu gostei da função OnTrade(). Esta função é solicitada no momento em que qualquer um dos seguintes eventos de trade é ativado: emissão de pedidos, ativação de StopLoss ou TakeProfit, alteração dos níveis de StopLoss ou TakeProfit, emissão/exclusão de um pedido pendente.

Agora é muito mais fácil monitorar eventos conectados com operações de trade. Agora não há necessidade de ciclos para verificar o estado dos pedidos em pontos ou barras. Tais ciclos são utilizados no MQL4, os quais consideravelmente reduzem o desempenho do programa, que é tão importante na otimização.

Vamos nos concentrar na função OnChartEvent() . A solicitação da função é realizada para vários eventos. Eu não cheguei a testar cada um deles, mas a lista é impressionante:

A possibilidade de gerenciar negociações e gráficos em um novo nível funcional - isto é o que os desenvolvedores prometeram.

Novos objetos gráficos, botões e campos de entrada apareceram. O gerenciamento de tabela ficou fantástico, é possível até inserir figuras de arquivos - esta opção oferece muitas possibilidades para aqueles que gostam de um design especial. Isto não é Photoshop, é o resultado das possibilidades do MQL5 e MetaTrader 5. Dentro dos novos recursos, há um para que você possa criar seus próprios botões e campos de entrada, adicionando, por exemplo, um botão para fechar todos os pedidos abertos, ou o botão de compra e venda rápida com parâmetros de interrupção e tomada pré-definidos.


Fig. 2. Objetos gráficos permitem criar um painel informacional.

Fig. 2. Objetos gráficos permitem criar um painel informacional

Há um fator desagradável: os objetos não podem ser criados a partir de indicadores. Isto foi feito intencionalmente para agilizar o desempenho dos indicadores. A boa notícia é que eles entendem isso e, provavelmente, implementarão a possibilidade de iniciar vários Expert Advisors em uma tabela. Assim, nós seremos capazes de criar indicadores-EA com objetos e sem negociação. Tais indicadores podem ser criados agora - eles funcionarão como indicadores. Agora, a tarefa é resolvida iniciando um EA de negociação em uma tabela e os objetos de criação do EA em uma segunda tabela, e então implementando a troca entre elas.

Por exemplo, eu consegui transformar meu indicador de progresso de MQL4 para MQL5 em poucas horas. A maioria do tempo foi gasta para aprender a função e depurar. No MQL5, o código ficou menor.

E quanto ao terminal em si, eu fiquei impressionado pelo número de períodos de tempo. Na minha opinião, há até o excesso. Porém, a abundância de períodos de tempo pode ser útil para alguns traders. Bem, agora há apenas uma etapa para a criação de um período de tempo definido livremente. Todos os dados são armazenados agora apenas como um período de tempo em minutos, portanto não há problemas com a sincronização dos diferentes períodos de tempo - esta é uma importante solução tecnológica.

Agora não há arquivos para diferentes períodos de tempo no catálogo HISTÓRICO



Fig. 3. O histórico inteiro é armazenado como um arquivo único.

Outra agradável introdução é que agora podemos limpar registros.


Fig. 4. Usar um botão para limpar o diário do EA, de fato exclui todas as mensagens desnecessárias

Esta é apenas uma breve resenha do MetaTrader 5. Eu não posso descrever todos os novos recursos do sistema por um período tão curto de tempo.os testes começaram em 09.09.2009. Esta é uma data simbólica, e tenho certeza que será um número de sorte. Alguns dias passaram-se desde que eu obtive a versão beta do terminal MetaTrader 5 e MQL5. Eu ainda não consegui testar todos os seus recursos, mas já estou impressionado.

Os mágicos da MetaQuotes criaram um produto incrível. Eu sou um desenvolvedor com 25 anos de experiência, vi o começo de muitos projetos e posso afirmar isso com segurança!

Lembranças,
Yuriy Zaytsev

Skype: yurazyuraz
yzh@mail.ru