Nova versão da plataforma MetaTrader 5 build 5260: melhorias no Algo Forge e novas regras de herança no MQL5

Nesta versão, continuamos a expansão da biblioteca de álgebra linear OpenBLAS no MQL5, adicionando uma nova seção de funções. Graças a essas ferramentas, os desenvolvedores têm acesso a um ciclo completo de transformações, isto é, desde a preparação inicial da matriz até o cálculo preciso e estável do seu espectro

5 setembro 2025

Terminal

  1. Corrigida a exibição das configurações de margem na especificação do instrumento de negociação. Antes, ao usar alavancagem flutuante (por exemplo, dependendo do volume de posições na conta), em alguns casos as configurações de margem na especificação do contrato eram exibidas incorretamente.
  2. Corrigida a ordenação de ordens no book, caso o símbolo permita negociação com preços negativos. Agora, ordens com preços positivos, negativos e nulos são exibidas corretamente e na ordem adequada. 
  3. No guia do terminal foi adicionada a seção Como o testador carrega dados históricos. Nela reunimos as informações principais necessárias para compreender o funcionamento do testador de estratégias com o histórico de negociações. O testador sempre carrega um "buffer de histórico antes do início", para garantir estabilidade nos cálculos:
    • D1 e abaixo — desde o início do ano anterior. Isso garante pelo menos 1 ano de histórico.  Por exemplo, se a data de início do teste for 01.03.2023, o testador baixará dados do terminal a partir de 01.01.2022. Ou seja, 14 meses antes da data de início do teste.
    • W1 — 100 barras semanais (~2 anos).
    • MN1 — 100 barras mensais (~8 anos).

    Se houver menos dados, o testador ajusta a data real de início para a mais próxima disponível, onde as condições são atendidas.

    Devido a esses requisitos, às vezes ocorre a seguinte situação: o teste não começa na data especificada, mas em uma posterior. No log do testador isso é acompanhado por uma mensagem:

    start time changed to 2024.03.15 00:00 to provide data at beginning

MQL5

  1. Foram adicionados 5 novos métodos ao OpenBLAS, que é a nova seção Matrix Balance, que amplia as possibilidades de trabalho com matrizes quadradas. O novo conjunto de funções oferece:
    • Balanceamento de matrizes para aumentar a precisão do cálculo de autovalores.
    • Restauração de autovetores após transformações.
    • Redução à forma de Hessenberg e decomposição de Schur, incluindo a geração de matrizes ortogonais.

    Graças a essas ferramentas, os desenvolvedores têm acesso a um ciclo completo de transformações, isto é, desde a preparação inicial da matriz até o cálculo preciso e estável do seu espectro.

    Nos bastidores são utilizados algoritmos LAPACK já validados (GEBAL, GEBAK, GEHRD, ORGHR, HSEQR), que garantem alta performance e confiabilidade:

    • MatrixBalance — balanceia uma matriz quadrada (real ou complexa) por meio de permutações e/ou escalonamento de linhas e colunas. Reduz a 1-norma, aumentando a precisão do cálculo subsequente de autovalores/autovetores (baseado na função LAPACK GEBAL).
    • EigenVectorsBackward — gera os autovetores (à direita ou à esquerda) da matriz original após o balanceamento, realizando a transformação reversa (baseado em GEBAK). 
    • ReduceToHessenbergBalanced — transforma a matriz balanceada em forma triangular superior de Hessenberg por meio de uma transformação ortogonal (GEHRD).
    • ReflectHessenbergBalancedToQ — gera a matriz ortogonal Q, formada como produto de matrizes de reflexão obtidas durante a redução à forma de Hessenberg (ORGHR).
    • EigenHessenbergBalancedSchurQ — executa a decomposição de Schur: calcula os autovalores da matriz de Hessenberg, bem como as matrizes T (forma triangular superior de Schur) e Z (matriz de vetores), atualizando Q se necessário (HSEQR).


  2. Foram adicionados dois novos métodos na seção Eigen Values. Ambas as funções permitem obter autovetores de forma eficiente após a decomposição de Schur e complementam o conjunto completo de ferramentas de álgebra linear no MQL5:

    • EigenVectorsTriangularZ — calcula os autovetores de uma matriz triangular superior quase real ou de uma matriz triangular superior complexa (forma de Schur). Utiliza a decomposição A = Q · T · Qᴴ (TREVC). Destaca-se pela alta precisão.
    • EigenVectorsTriangularZBlocked — variante em blocos do cálculo de autovetores (TREVC3). Funciona mais rápido do que EigenVectorsTriangularZ, mas pode ser menos preciso.


  3. Foi introduzida uma mudança importante no processo de herança, nomeadamente a regra method hiding.

    Anteriormente, se em uma classe ou estrutura derivada fosse definido um método com o mesmo nome do que no classe base, ocorria sobrecarga: todas as variantes dos métodos (tanto da classe base quanto da derivada) ficavam disponíveis no herdeiro. Agora, métodos com o mesmo nome na classe derivada escondem os métodos da classe base (method hiding).

    Se for necessário chamar o método oculto da classe base, é preciso indicar explicitamente o escopo durante a chamada:
    class Base
      {
    public: 
       void Print(int x)   { ::Print("Base int: ", x); }
       void Print(double y){ ::Print("Base double: ", y); }
      };
    
    class Derived : public Base
      {
    public:
       void Print(string s){ ::Print("Derived string: ", s); }
      };
    
    void OnStart()
      {
       Derived d;
       d.Print("text");    // вызов Derived::Print(string)
       d.Print(10);        // ВНИМАНИЕ! вызов Derived::Print(string), т.к. Base::Print скрыт (недоступен)
       d.Base::Print(10);  // явный вызов скрытого метода предка
      }
    Por algum tempo, o compilador MQL5 emitirá um aviso se o método oculto da classe base for mais adequado aos parâmetros da chamada do que o método disponível na derivada. Exemplo para o código acima d.Print(10):
    call resolves to 'void Derived::Print(string)' instead of 'void Base::Print(int)' due to new rules of method hiding
       see declaration of function 'Derived::Print'
       see declaration of function 'Base::Print'
    implicit conversion from 'number' to 'string'

  4. Foi adicionado o operador using para restaurar as sobrecargas de métodos da classe base.

    Para controlar o novo comportamento, no MQL5 foi introduzido o operador using. Ele permite “trazer” para o escopo da classe ou estrutura todas as sobrecargas do método a partir do tipo base:
    class Base
      {
    protected:
       void Print(int x)   { ::Print("Base int: ", x); }
       void Print(double y){ ::Print("Base double: ", y); }
      };
    
    class Derived : public Base
      {
    public:
       void Print(string s){ ::Print("Derived string: ", s); }
       using Base::Print;  // возвращаем перегрузки Print из Base
      };
    
    void OnStart()
      {
       Derived d;
       d.Print("text");   // Derived::Print(string)
       d.Print(42);       // Base::Print(int)
       d.Print(3.14);     // Base::Print(double)
      }
    Se removermos using Base::Print;, então as chamadas d.Print(42) e d.Print(3.14) não estarão mais disponíveis, o que significa que restará apenas o método Derived::Print(string).

    Além disso, no exemplo apresentado é possível ver que métodos protected da classe base passaram a estar acessíveis na derivada (protected foi alterado para public).

    Dessa forma, os desenvolvedores ganham um controle mais flexível e previsível sobre hierarquias de classes e podem definir exatamente quais sobrecargas de métodos da classe base devem permanecer acessíveis no herdeiro.

MetaEditor

  1. Acelerados os cálculos de hashes SHA-1 para operações Git ao trabalhar com o Algo Forge. Isso garante um ganho de desempenho superior a 40% em operações em massa.
  2. Corrigida a lógica de verificação de modificações em arquivos para operações Git. Se apenas a data de modificação mudou, mas o conteúdo permaneceu o mesmo, o arquivo não será mais considerado alterado. Isso elimina falsos positivos e evita conflitos com o repositório remoto.

Algo Forge

Foi publicada a documentação de suporte sobre o uso do MQL5 Algo Forge. Nela você encontrará todos os principais benefícios do Git, sem complexidade desnecessária:
  1. armazenamento confiável do histórico de versões e trabalho com branches,
  2. testes rápidos e mesclagem segura de alterações,
  3. criação de repositório próprio ou fork de um projeto alheio com apenas um clique,
  4. colaboração transparente em equipe, com registro da contribuição de cada membro,
  5. catálogo de projetos abertos e oportunidade de aprender com outros.

  6. Clonagem de um projeto existente
    No forge.mql5.io, acesse o projeto que deseja clonar e execute o comando Fork. Preencha o nome do fork a ser criado e a descrição, e salve as alterações:

    Clonagem de projeto

    Em seguida, vá para o MetaEditor com a mesma conta MQL e execute o comando atualizar (Refresh) no Navegador.  Na pasta Shared projects aparecerá o seu projeto clonado. Agora, carregue-o a partir do portal Algo Forge com o comando Git Clone. Assim, você baixará não apenas todos os arquivos do projeto, mas também todo o histórico de commits e todos os branches desse projeto. Ou seja, poderá continuar trabalhando no fork tendo à disposição todo o histórico do projeto clonado.  

    Comando Git Clone para obter um projeto do Algo Forge

  7. Adicionada tradução do terminal para o idioma irlandês.
  8. Atualizadas as traduções da interface do usuário.


Web Terminal

  1. Corrigida a exibição do horário da sessão de negociação e de cotações na especificação do símbolo.
  2. Corrigida a exibição das configurações de margem na especificação do símbolo.
  3. Alterada a forma de exibir as sessões dos instrumentos de negociação na especificação do símbolo.
  4. Adicionado suporte a contas do tipo Contest. Essas contas são exibidas em azul, e contas Demo, em verde.
  5. Corrigida a precisão dos cálculos de margem com alavancagem flutuante em alguns casos. 
  6. Corrigido erro de abertura de nova conta, que acontecia em determinadas situações, o botão "Next" não funcionava para avançar para a próxima etapa.
  7. Corrigido erro que impedia a colocação de ordem limite entre os preços Bid e Ask no modo de execução em bolsa.
  8. Corrigido erro na exibição do preço de execução da ordem. Após o envio da ordem, a janela mostrará o resultado da execução, isto é, sucesso da operação de negociação ou recusa com a descrição do motivo pelo qual não foi executada. Em alguns casos, o preço de execução era mostrado como "0".
  9. Corrigido erro em que o botão de fechamento rápido da posição não era exibido.

    Botão de fechamento de posição

  10. Corrigida a exibição das moedas da conta de negociação na janela de seleção da lista de contas.