Terminal
- 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.
- 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.
- 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
- 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).
- 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.
- 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");
d.Print(10);
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'
- 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;
};
void OnStart()
{
Derived d;
d.Print("text");
d.Print(42);
d.Print(3.14);
}
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
- 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.
- 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:
- armazenamento confiável do histórico de versões e trabalho com branches,
- testes rápidos e mesclagem segura de alterações,
- criação de repositório próprio ou fork de um projeto alheio com apenas um clique,
- colaboração transparente em equipe, com registro da contribuição de cada membro,
- catálogo de projetos abertos e oportunidade de aprender com outros.
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:

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.

- Adicionada tradução do terminal para o idioma irlandês.
- Atualizadas as traduções da interface do usuário.
Web Terminal
- Corrigida a exibição do horário da sessão de negociação e de cotações na especificação do símbolo.
- Corrigida a exibição das configurações de margem na especificação do símbolo.
- Alterada a forma de exibir as sessões dos instrumentos de negociação na especificação do símbolo.
- Adicionado suporte a contas do tipo Contest. Essas contas são exibidas em azul, e contas Demo, em verde.
- Corrigida a precisão dos cálculos de margem com alavancagem flutuante em alguns casos.
- 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.
- Corrigido erro que impedia a colocação de ordem limite entre os preços Bid e Ask no modo de execução em bolsa.
- 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".
- Corrigido erro em que o botão de fechamento rápido da posição não era exibido.

- Corrigida a exibição das moedas da conta de negociação na janela de seleção da lista de contas.
Veja as notícias anteriores, por favor: