Nova versão da plataforma MetaTrader 5 build 5100: Migração para Git e hub de desenvolvedores MQL5 Algo Forge, tema escuro e melhorias na interface

Nesta versão, reformulamos significativamente o editor de código-fonte MetaEditor. O armazenamento de versões MQL5 Storage agora utiliza Git em vez de Subversion. Com a transição para o novo sistema, lançamos também um novo portal para gerenciamento de projetos online: MQL5 Algo Forge

5 junho 2025

MetaEditor

  • Atualizamos completamente o armazenamento de código-fonte MQL5 Storage. Agora, ele utiliza Git como sistema de controle de versões, em vez de Subversion. Git é o padrão global entre desenvolvedores, garantindo confiabilidade e flexibilidade na gestão de código.

    • Ramificação e fusão flexíveis: crie ramificações separadas para novas funcionalidades ou testes e, depois, integre facilmente essas alterações à versão principal do projeto.
    • Trabalho mais rápido com o repositório: ao contrário do Subversion, o Git armazena todos os dados localmente, tornando operações como commits, alternância entre versões e comparação de mudanças muito mais rápidas.
    • Operação offline: agora não é necessário estar constantemente conectado ao servidor; você pode fazer commits localmente e enviá-los ao repositório online quando for mais conveniente.
    • Sistema avançado de rastreamento de alterações: o Git permite visualizar facilmente o histórico de mudanças, identificar quem fez o quê e quando, além de facilitar o retorno a versões anteriores sem complicações.
    • Fusão de alterações aprimorada: o sistema avançado de comparação e fusão de código minimiza conflitos e facilita a gestão de projetos colaborativos.

    Colaboração em um novo nível
    Com a migração para o Git, lançamos também um novo portal para gerenciamento de projetos online: MQL5 Algo Forge. Não é apenas uma lista de seus projetos, mas uma rede social completa para desenvolvedores, uma espécie de GitHub para traders algorítmicos. Siga autores interessantes, forme equipes e conduza projetos colaborativos de forma prática.




    Visualize os detalhes dos projetos: estrutura, arquivos, commits, ramificações, etc. Acompanhe a contribuição de cada participante, crie documentação e compartilhe o projeto na Internet.




    Monitore todas as alterações no código: linhas novas, modificadas e removidas. Ao identificar problemas, atribua diretamente uma tarefa ao desenvolvedor dentro do projeto para correção.




    Para o uso com Git, reformulamos o menu do Navegador e da janela ativa de edição de código. Também adicionamos um menu Git separado na barra superior do MetaEditor:




    Todos os detalhes sobre o funcionamento com Git estarão disponíveis na documentação em breve.

Terminal

  1. Adicionamos suporte ao esquema de cores escuro na interface de todos os componentes: terminal de negociação, MetaEditor e testador visual. O tema escuro permite trabalhar na plataforma com mais conforto durante a noite. Para alternar entre os temas, utilize o menu “Exibir”:




    Ao adaptar a interface para suporte a diferentes temas, fizemos diversas melhorias na exibição de diálogos, menus, painéis e botões para tornar o uso mais confortável. No MetaEditor, as informações sobre a posição atual do cursor na janela ativa, assim como o indicador do modo de entrada de texto (INS/OVR), são exibidas no canto superior direito. A barra de status na parte inferior da janela não é mais exibida, para economizar espaço de trabalho.

  2. Foi adicionada a possibilidade de alugar VPS por 12 meses. Ao contratar a hospedagem por um período mais longo, você economiza um terço do valor total.




  3. Otimizamos o consumo de memória, reduzindo agora os recursos necessários para a operação do terminal.
  4. Otimizamos a exibição do histórico de negociações da conta. Agora a plataforma consegue exibir corretamente milhões de registros.
  5. Adicionamos o comando “Padrão” no menu “Janela”. Ele restaura todos os elementos da interface (gráficos, Navegador, Testador de Estratégias etc.) à sua posição original.
  6. Corrigimos um erro que, em alguns casos, fazia a janela de modificação de posição travar.
  7. Corrigimos o cálculo do valor das posições abertas em situações de preços negativos.
  8. Corrigimos o cálculo da margem na especificação do instrumento financeiro quando os preços são negativos.
  9. Corrigimos o cálculo dos valores atuais e a exibição dos gráficos MFE e MAE no relatório de negociação.
  10. Corrigimos a escala dos osciladores nos subgráficos. Agora a escala vertical é exibida corretamente.
  11. Corrigimos o comportamento de esconder e mostrar os books e painéis de opções ao alternar o modo de tela cheia.
  12. Adicionamos a exibição do ticket da posição no histórico de negociação da conta. Para ativar essa coluna, utilize o menu de contexto.
  13. Corrigimos o cálculo do valor de liquidação na aba “Ativos” para futuros e opções.
  14. Corrigimos a cópia dos dados da conta criada para a área de transferência. Na etapa final do registro de uma conta demo ou prévia, os dados da conta — login, senhas etc. — são exibidos. Agora é possível copiá-los corretamente para a área de transferência e salvá-los em arquivo separado, inclusive no macOS.
  15. Corrigimos a exibição da seção de log do VPS. Em alguns casos, uma mensagem de erro era exibida na página.
  16. Corrigimos o suporte a monitores HiDPI em sistemas Linux.
  17. Atualizamos as traduções da interface do usuário.

MQL5

  1. Adicionamos o operador de multiplicação matricial @. Ele segue as regras da álgebra linear e permite multiplicar matrizes e vetores, além de realizar produto escalar entre vetores.

    Multiplicação matricial (matriz × matriz)
    matrix A(2, 3);
    matrix B(3, 2);
    matrix C = A @ B; // Resultado: matriz C de tamanho [2,2]
    Multiplicação matricial (matriz × vetor)
    matrix M(2, 3);
    vector V(3);
    vector R = M @ V; // Resultado: vetor R com 2 elementos
    Multiplicação matricial (vetor × matriz)
    matrix M(2, 3);
    vector V(1, 2);
    vector R = V @ M; // Resultado: vetor R com 3 elementos
    Produto escalar (vetor × vetor)
    vector V1(1, 3), V2(1, 3);
    double r = V1 @ V2; // Resultado: escalar
  2. Adicionamos o parâmetro ddof aos métodos Std, Var e Cov. Ele define o número de graus de liberdade subtraídos do divisor ao calcular o desvio padrão. Por padrão, ddof é 0 para Std e Var, e 1 para Cov.

    Como o ddof afeta os cálculos:

    • Por padrão ddof=0, e o desvio padrão é calculado para a população inteira (population standard deviation).
    • Se ddof=1, o cálculo considera o desvio padrão amostral (sample standard deviation), corrigindo a estimativa para um subconjunto de dados — método comum na estatística.

  3. Adicionamos novos métodos da OpenBLAS:

    Cálculo de autovalores e autovetores

    • EigenTridiagonalDC — calcula autovalores e autovetores de uma matriz tridiagonal simétrica usando o algoritmo “dividir e conquistar” (função LAPACK STEVD).
    • EigenTridiagonalQR — calcula autovalores e autovetores de uma matriz tridiagonal simétrica usando o algoritmo QR (função LAPACK STEV).
    • EigenTridiagonalRobust — calcula autovalores e autovetores de uma matriz tridiagonal simétrica usando o algoritmo MRRR (Multiple Relatively Robust Representations) (função LAPACK STEVR).
    • EigenTridiagonalBisect — calcula autovalores e autovetores de uma matriz tridiagonal simétrica usando o algoritmo de bissecção (função LAPACK STEVX).
    • ReduceToBidiagonal — reduz uma matriz geral real ou complexa de dimensão m×n para uma forma bidiagonal superior ou inferior B, utilizando uma transformação ortogonal: QT A P = B. Se m≥n, então B é uma matriz bidiagonal superior; caso contrário, é inferior. (Função LAPACK GEBRD).
    • ReflectBidiagonalToQP — gera as matrizes ortogonais Q e PT (ou PH para tipos complexos), determinadas pelo método ReduceToBidiagonal ao reduzir uma matriz real ou complexa A à forma bidiagonal: A = Q B PT.  Q e PT são produtos de refletores elementares H(i) ou G(i), respectivamente. (Funções LAPACK ORGBR, UNGBR).
    • ReduceSymmetricToTridiagonal — reduz uma matriz simétrica real ou hermitiana complexa A para uma forma tridiagonal B por meio de uma transformação ortogonal de similaridade: QT A Q = B.  (Funções LAPACK SYTRD, HETRD).
    • ReflectTridiagonalToQ — gera a matriz ortogonal Q, que é o produto de n-1 refletores elementares de ordem n retornados pela função ReduceSymmetricToTridiagonal.

    • LinearEquationsSolution — resolve um sistema de equações lineares com matriz de coeficientes quadrada A e múltiplos vetores de termos independentes.
    • LinearEquationsSolutionTriangular — resolve um sistema de equações lineares com matriz de coeficientes quadrada e triangular A e múltiplos vetores de termos independentes.
    • LinearEquationsSolutionSy — resolve um sistema de equações lineares com matriz A simétrica ou hermitiana conjugada e múltiplos vetores de termos independentes.
    • LinearEquationsSolutionComplexSy — resolve um sistema de equações lineares com matriz A complexa e simétrica e múltiplos vetores de termos independentes.
    • LinearEquationsSolutionGeTrid — resolve um sistema de equações lineares com matriz A simétrica ou hermitiana conjugada, definida positiva, e múltiplos vetores de termos independentes.
    • LinearEquationsSolutionSyPD — resolve um sistema de equações lineares com matriz de coeficientes geral (não simétrica) e tridiagonal A e múltiplos vetores de termos independentes.
    • LinearEquationsSolutionSyTridPD — resolve um sistema de equações lineares com matriz A simétrica tridiagonal e definida positiva, e múltiplos vetores de termos independentes.
    • FactorizationQR — calcula a decomposição QR de uma matriz geral de dimensão m por n: A = Q * R (função LAPACK GEQRF).
    • FactorizationQRNonNeg — calcula a decomposição QR de uma matriz geral de dimensão m por n: A = Q * R, onde R é uma matriz triangular superior com elementos não negativos na diagonal (função LAPACK GEQRFP).
    • FactorizationQRPivot — calcula a decomposição QR de uma matriz geral de dimensão m por n com permutação de colunas: A P = Q R (função LAPACK GEQP3).
    • FactorizationLQ — executa a decomposição LQ de uma matriz geral de dimensão m por n: A = L * Q (função LAPACK GELQF).
    • FactorizationQL — executa a decomposição QL de uma matriz geral de dimensão m por n: A = Q * L (função LAPACK GEQLF).
    • FactorizationRQ — executa a decomposição RQ de uma matriz geral de dimensão m por n: A = R * Q (função LAPACK GERQF).
    • FactorizationPLU — calcula a decomposição LU de uma matriz geral A de dimensão m por n usando seleção parcial do pivô e permutação de linhas (função LAPACK GETRF).
    • FactorizationPLUGeTrid — calcula a decomposição LU de uma matriz tridiagonal geral (não simétrica) A de dimensão n por n usando seleção parcial do pivô e permutação de linhas (função LAPACK GTTRF).
    • FactorizationLDL — calcula a decomposição de uma matriz simétrica real ou hermitiana complexa A usando seleção diagonal do pivô pelo método de Bunch-Kaufman (funções LAPACK SYTRF e HETRF).
    • FactorizationLDLSyTridPD — calcula a decomposição de uma matriz tridiagonal simétrica definida positiva (para dados reais) ou hermitiana definida positiva (para dados complexos) A (função LAPACK PTTRF).
    • FactorizationCholesky — calcula a decomposição de uma matriz simétrica real ou hermitiana complexa definida positiva A (função LAPACK POTRF).
    • FactorizationCholeskySyPS — calcula a decomposição de Cholesky com seleção completa do pivô (complete pivoting) para uma matriz simétrica real (ou hermitiana complexa) semi-definida positiva de dimensão n por n (função LAPACK PSTRF).

  4. Adicionamos a função e o método Random para preencher vetores e matrizes com valores aleatórios. Os valores são gerados de forma uniforme dentro de um intervalo definido.
    static vector vector::Random(
      const ulong   size,       // tamanho do vetor
      const double  min=0.0,    // valor mínimo
      const double  max=1.0     // valor máximo
       );
    
    static matrix matrix::Random(
      const ulong   rows,       // quantidade de linhasм
      const ulong   cols        // quantidade de colunas
      const float   min=0.0,    // valor mínimo
      const float   max=1.0     // valor máximo
       );
  5. Adicionamos suporte a pseudônimos adicionais para tipos inteiros. Isso facilita a portabilidade de código de outras linguagens como C e C++.

    Esses aliases não criam novos tipos, apenas fornecem nomes alternativos para tipos já existentes no MQL5. Eles podem ser utilizados em todos os contextos nos quais os tipos base são válidos.

    • int8_t
    • uint8_t
    • int16_t
    • uint16_t
    • int32_t
    • uint32_t
    • int64_t
    • uint64_t

  6. Adicionadas funções para identificar o esquema de cores do terminal:


    Para detectar a mudança de esquema de cores, utilize o manipulador OnChartEvent. Quando o esquema é alterado, o evento CHARTEVENT_CHART_CHANGE é disparado duas vezes.

  7. Corrigido erro que causava falha no MetaEditor durante a compilação de código contendo o método Array::Reserve. O método Reserve não altera o tamanho do array, apenas reserva espaço para a quantidade especificada de elementos, evitando realocações de memória ao adicionar novos itens.
  8. Corrigido o funcionamento do método Array::Push, que adiciona novos elementos ao final do array. O erro ocorria com arrays que já possuíam espaço reservado no buffer.
  9. Corrigidas as funções relacionadas ao uso com OpenCL.

MetaTester

  1. Otimização de estratégias de negociação acelerada.
  2. Corrigido erro que, em alguns casos, levava ao consumo excessivo de memória RAM pelos agentes de teste ao executar tarefas pela MQL5 Cloud Network.

Web Terminal

  1. Corrigida a opção de salvar senha na janela de conexão à conta.
  2. Corrigido o funcionamento dos botões de movimentação do gráfico. Em alguns casos, o gráfico desaparecia ao utilizá-los.
  3. Corrigida a validação do campo “Nome do meio” no formulário de solicitação de conta real. Agora esse campo não é mais obrigatório.
  4. Corrigida a abertura de contas demo. Em alguns casos, havia redirecionamento incorreto para o site da corretora.
  5. Corrigida a exibição dos botões para abertura de contas demo e reais. Agora esses botões são ocultados quando a função correspondente está desativada pela corretora.
  6. Corrigido o campo “Depósito” no formulário de abertura de contas demo.
  7. Corrigida a exibição do campo “Negociação” na especificação do contrato.
  8. Corrigido o campo de busca de símbolos na janela “Observação do mercado”. Agora o botão “X” para sair do modo de busca é exibido corretamente.
  9. Corrigida a dica exibida no campo para inserir o código de confirmação por email no formulário de abertura de conta.