O que há de novo no MetaTrader 5?

Histórico de atualizações das plataformas desktop, móvel e web

22 março 2024
MetaTrader 5 build 4260: melhorias gerais

Terminal

  1. Corrigido um erro de assinatura de produtos gratuitos no serviço "Assinaturas". Em alguns casos, o botão correspondente pode estar ausente na caixa de diálogo.
  2. Atualizações nas traduções da interface do usuário.

MQL5

  1. Expandido o suporte para eventos de teclado:

    • Adicionado o evento CHARTEVENT_KEYUP para o manipulador OnChartEvent. Ele permite monitorar quando um usuário solta uma tecla no teclado.
    • Adicionado o tratamento de teclas "Mortas" (Dead keys), que são teclas que permitem alterar a aparência do próximo caractere a ser inserido. Por exemplo, no layout grego, para colocar acentos em vogais ά, έ, ύ, etc., é necessário pressionar a tecla ";", e então digitar a letra. Agora, o pressionamento dessas teclas pode ser monitorado usando a função TranslateKey.
    • As funções TranslateKey e TerminalInfoInteger foram melhoradas. Agora, ao receber eventos CHARTEVENT_KEYUP ou CHARTEVENT_KEYDOWN no OnChartEvent, você pode obter o estado completo do teclado no momento do evento. Por exemplo, se um usuário pressionou a tecla Z, você poderá saber se a tecla Ctrl ou Shift foi pressionada naquele momento. Para outros eventos, as funções funcionarão como antes, retornando o estado do teclado no momento atual.

  2. Atualizada biblioteca Alglib. Devido à atualização, os seguintes métodos nas classes CMatrixDouble e CMatrixComplex foram alterados:
    vector<double/complex> operator[](const int i) const;
    vector<double/complex> operator[](const ulong i) const;
    Agora, em vez deles, é usado um método com um valor de retorno constante:
    const vector<double/complex> operator[](const ulong i) const;
    A correção permitirá capturar o uso incorreto do resultado no na nova versão do Alglib, o código mat[row][col]=x funciona de forma diferente do antigo. Antes, era uma escrita na matriz, e agora - escrita em um objeto vector<double/complex> temporário, que é destruído imediatamente após a escrita.

    Adicionar const ao valor de retorno torna impossível usar a gravação mat[row][col]=x. Como mat[row] agora retorna um vetor constante, tentar reescrever seu elemento através de mat[row][col] levará a um erro de compilação.

  3. Corrigido um erro que, em alguns casos, poderia levar a um funcionamento incorreto das funções ChartGet*.

MetaEditor

  1. Adicionada pesquisa pelo livro "Redes Neurais e Algotrading no MQL5". Agora, ele está unificado em uma seção com o livro anteriormente lançado "Programação em MQL5 para Traders".



Tester

  1. Corrigida a otimização em um grande número de agentes remotos. Em alguns casos, o erro poderia levar a uma carga excessiva no CPU.


MetaTrader 5 Web Terminal

  1. Corrigida a emissão de ordens limitadas para instrumentos com execução a mercado. Agora, ao alterar o preço de uma ordem limitada em relação ao atual (mais alto ou mais baixo), o tipo de ordem proposto não mudará de Buy Limit para Sell Limit e vice-versa, como acontece para instrumentos de outros tipos. Assim, o usuário poderá, se necessário, emitir ordens Buy Limit acima do mercado e Sell Limit abaixo do mercado, para garantir limitação de preço na transação.
  2. Corrigida a exibição de contadores de símbolos selecionados na "Observação do Mercado".
7 março 2024
MetaTrader 5 build 4230: mais aplicativos embutidos e expansão do suporte ONNX

Terminal

  1. Adicionados 28 novos EAs e 12 novos indicadores ao pacote padrão da plataforma. Os aplicativos estão disponíveis nas seções "Advisors\Free Robots" e "Indicators\Free Indicators" no Navegador. Para cada um deles, o código fonte está disponível com comentários detalhados, o que ajudará você a estudar a linguagem MQL5.

    Nos robôs, foram implementadas estratégias de negociação baseadas em indicadores técnicos e padrões de velas, como 3 Black Crows – 3 White Soldiers, Bullish Engulfing – Bearish Engulfing, Bullish Harami – Bearish Harami e outros. Os novos indicadores são a implementação de canais populares: Camarilla, DeMark, Donchian, Fibonacci, Keltner e outros.



  2. Estão em andamento preparativos para lançar assinaturas de dados de mercado Nasdaq. Diretamente da plataforma, os traders poderão acessar cotações em tempo real e um histórico de preços profundo de centenas de instrumentos financeiros de uma das maiores bolsas. Para isso, é necessário apenas uma conta demo no servidor MetaQuotes-Demo e uma conta MQL5.community.



    Ao assinar, basta adicionar os instrumentos relevantes à "Observação do Mercado" e começar a trabalhar. Você poderá abrir gráficos, analisá-los com qualquer objeto e indicador, bem como usar os dados para testar estratégias de negociação no testador. O acesso a todas as informações é feito de maneira padrão, como para os instrumentos financeiros comuns com os quais você trabalha com a corretora.

  3. A seção de margem na especificação do instrumento foi aprimorada. Agora ela mostra tanto os coeficientes de margem para cada tipo de instrumento quanto os valores finais de margem calculados.



    Também foram corrigidos erros na exibição da margem para alguns tipos de instrumentos.

  4. Adicionado um link para o canal do Telegram MQL5 no menu "Ajuda". No canal, são publicados regularmente materiais interessantes para desenvolvedores: revisões de novos artigos sobre programação e robôs e indicadores gratuitos da biblioteca de códigos CodeBase. Inscreva-se no canal para não perder informações importantes.



  5. Adicionado suporte para o parâmetro ShutdownTerminal na seção [StartUp] dos arquivos de configuração personalizados. Use este parâmetro para iniciar a plataforma e executar tarefas únicas por meio de scripts. Por exemplo, você tem um script que tira um screenshot do gráfico. Você cria um arquivo de configuração que inicia este script junto com a plataforma. Se adicionar a ele ShutdownTerminal com o valor "Yes", a plataforma será automaticamente desligada logo após a conclusão do script.
  6. Reforçada a segurança dos protocolos de rede e produtos no Mercado.
  7. o suporte ao serviço de "Sinais" foi desativado para contas demo. Para obter estatísticas avançadas sobre suas contas de treinamento, use o novo relatório de negociação. Ele fornece uma série de indicadores sobre a rentabilidade e o risco da sua estratégia, contém gráficos de crescimento, balanço e patrimônio líquido, diagramas de distribuição de operações por direção e instrumentos, e muito mais.
  8. Corrigida a exibição de links para contratos de corretagem no menu "Ajuda".
  9. Melhorada a seleção do melhor servidor ao alugar um VPS.
  10. Corrigida a atualização da página de assinaturas ao alternar entre seções no Navegador.
  11. Corrigida a atualização da lista de contratos ao abrir uma conta preliminar.
  12. Atualizadas as traduções da interface do usuário.

MQL5

  1. Adicionada a propriedade MQL_STARTED_FROM_CONFIG à enumeração ENUM_MQL_INFO_INTEGER. Retorna verdadeiro se o script/expert foi iniciado na seção StartUp do arquivo de configuração. Isso significa que este script/expert foi escrito no arquivo de configuração com o qual o terminal foi iniciado.
  2. Continua o trabalho de expansão do suporte para modelos ONNX.

    As tarefas de aprendizado de máquina nem sempre exigem maior precisão computacional. Para acelerar os cálculos, alguns modelos usam tipos de dados com menor precisão, como Float16 e até mesmo Float8. Para que os usuários possam fornecer esses dados como entrada para os modelos, as seguintes funções foram adicionadas ao MQL5:
    bool ArrayToFP16(ushort &dst_array[],const float &src_array[],ENUM_FLOAT16_FORMAT fmt);
    bool ArrayToFP16(ushort &dst_array[],const double &src_array[],ENUM_FLOAT16_FORMAT fmt);
    bool ArrayToFP8(uchar &dst_array[],const float &src_array[],ENUM_FLOAT8_FORMAT fmt);
    bool ArrayToFP8(uchar &dst_array[],const double &src_array[],ENUM_FLOAT8_FORMAT fmt);
    
    bool ArrayFromFP16(float &dst_array[],const ushort &src_array[],ENUM_FLOAT16_FORMAT fmt);
    bool ArrayFromFP16(double &dst_array[],const ushort &src_array[],ENUM_FLOAT16_FORMAT fmt);
    bool ArrayFromFP8(float &dst_array[],const uchar &src_array[],ENUM_FLOAT8_FORMAT fmt);
    bool ArrayFromFP8(double &dst_array[],const uchar &src_array[],ENUM_FLOAT8_FORMAT fmt);
    Como os formatos de números reais para 16 e 8 bits podem variar, no parâmetro fmt nas funções de conversão é necessário especificar qual formato de número precisa ser processado. Para versões de 16 bits, é utilizada a nova enumeração NUM_FLOAT16_FORMAT, que atualmente possui os seguintes valores:

    • FLOAT_FP16 — formato padrão de 16 bits, também conhecido como half.
    • FLOAT_BFP16 — formato especial brain float point.

    Para versões de 8 bits, é utilizada a nova enumeração ENUM_FLOAT8_FORMAT, que atualmente possui os seguintes valores:

    • FLOAT_FP8_E4M3FN — número de ponto flutuante de 8 bits, 4 bits para o expoente e 3 bits para a mantissa. Geralmente usado como coeficientes.
    • FLOAT_FP8_E4M3FNUZ — número de ponto flutuante de 8 bits, 4 bits de expoente e 3 bits de mantissa. Suporta NaN, não suporta zero negativo e Inf. Geralmente usado como coeficientes.
    • FLOAT_FP8_E5M2FN — número de ponto flutuante de 8 bits, 5 bits de expoente e 2 bits de mantissa. Suporta NaN e Inf. Geralmente usado para gradientes.
    • FLOAT_FP8_E5M2FNUZ — número de ponto flutuante de 8 bits, 5 bits de expoente e 2 bits de mantissa. Suporta NaN e Inf, não suporta zero negativo. Também usado para gradientes.


  3. Adicionados novos métodos de matrizes e vetores usados em aprendizado de máquina:

    • PrecisionRecall — calcula valores para a construção da curva precision-recall. Este método, assim como o método ClassificationScore, é aplicado a um vetor de valores verdadeiros
    • ReceiverOperatingCharacteristic — calcula valores para a construção da curva Receiver Operating Characteristic (ROC). Este método, assim como o método ClassificationScore, é aplicado a um vetor de valores verdadeiros.

  4. ONNX Runtime atualizado para a versão 1.17. Detalhes do lançamento estão disponíveis no GitHub.
  5. pacote de integração com Python atualizado para a versão 5.0.4200, adicionado suporte para Python 3.12. Atualize seu pacote com o comando "pip install --upgrade MetaTrader5" para obter as últimas mudanças.
  6. Corrigido o funcionamento da função OrderCalcMargin para alguns casos.
  7. Adicionado o valor DEAL_REASON_CORPORATE_ACTION à enumeração ENUM_DEAL_REASON - operação realizada como resultado de uma ação corporativa: fusão ou renomeação de um título, transferência de um cliente para outra conta, etc.
  8. Adicionado suporte para comparação de vetores e matrizes complexos para o método Compare. A comparação envolve estimar a distância entre números complexos. A distância é calculada usando a seguinte fórmula sqrt(pow(r1-r2, 2) + pow(i1-i2, 2)) e é um número real que já pode ser comparado com épsilon.
  9. Corrigida a conversão de variáveis ​​de tipo de cor para texto no formato RGB.
  10. Corrigido o retorno do resultado da obtenção de autovetores no método Eig no caso de autovalor complexo. Adicionada sobrecarga de método para soluções complexas.

MetaEditor

  1. Adicionado um link para o recém-publicado livro "Programação no MQL5 para traders" no menu Ajuda\MQL5.community. O livro também foi adicionado ao sistema de busca, permitindo que você encontre materiais necessários diretamente do MetaEditor:




  2. O recurso de busca embutido foi aprimorado:

    • A seção de resultados de busca na janela "Ferramentas" foi dividida em duas abas: "Busca" — para resultados de busca online (documentação, artigos, livro, etc.), "Busca em arquivos" — para resultados locais.
    • Na seção de resultados, foi adicionada uma linha de busca separada. Você pode usá-la em vez da linha de busca na barra de ferramentas principal do MetaEditor.

  3. Adicionado suporte aos modos AVX, AVX2 e AVX512 na compilação de programas a partir da linha de comando. Para isso, adicione um dos seguintes parâmetros ao comando: /avx, /avx2 ou /avx512.
  4. O motor SQLite para trabalhar com bancos de dados foi atualizado para a versão 3.45.
  5. Suporte ao Internet Explorer foi descontinuado. Agora, para a exibição de páginas HTML, é utilizado apenas Microsoft Edge WebView2. Comparado com o obsoleto MSHTML, o novo componente expande significativamente as capacidades de exibição de conteúdo web, fornecendo acesso a tecnologias modernas. A transição para o WebView2 permitirá melhorar a aparência de algumas seções do MetaEditor, aumentar sua performance, criar interfaces mais responsivas.
  6. Corrigido um travamento que ocorria em casos raros durante o preenchimento automático de funções.
  7. Corrigido um travamento que ocorria em casos raros durante o preenchimento automático de funções.

Testador

  1. Corrigido o cálculo do swap triplo caso o dia de início do teste caia no dia do swap triplo.

Correções de acordo com os logs de erro.

MetaTrader 5 Web Terminal

A exibição dos requisitos de margem na especificação do contrato foi melhorada. Agora, além dos coeficientes e parâmetros iniciais para cálculo, é exibido o valor da margem final. Se o valor da margem depender do volume da posição, os níveis correspondentes serão mostrados na caixa de diálogo.



A margem é calculada considerando o preço do instrumento no momento da abertura da janela de especificação e não muda em tempo real. Por isso, os valores devem ser considerados como aproximados. Para recalcular os valores com base nos preços atuais, reabra a especificação do instrumento.
18 janeiro 2024
MetaTrader 5 build 4150: exportação de relatórios de negociação e novos métodos de aprendizado de máquina em MQL5

Terminal

  1. Adicionada exportação de relatório de negociação para arquivo HTML e PDF. Agora você pode compartilhar facilmente seu performance de negociação com colegas ou investidores. Para exportar, use o menu no próprio relatório ou o menu Arquivo.




  2. Adicionada a capacidade de salvar o estado atual da janela Observação do Mercado em um arquivo CSV. Para fazer isso, clique em “Exportar” no menu de contexto. O arquivo armazenará os valores dos indicadores selecionados no momento da exportação. Para carregue mais dados, ative colunas adicionais por meio do menu de contexto.




  3. Aprimorada exibição dos requisitos de margem nas especificações do contrato. Agora, em vez de coeficientes e parâmetros iniciais para cálculo, é exibido o valor da margem final. Se o valor da margem depender do volume da posição, a caixa de diálogo mostrará os níveis correspondentes.



    A margem é calculada levando em consideração o preço do instrumento no momento da abertura da janela de especificação e não muda em tempo real. Dessa forma, os valores devem ser tomados apenas como indicativos. Para recalcular os valores a preços atuais, reabra a especificação do instrumento.

  4. Desativado o suporte ao serviço "Sinais" para contas demo. Para obter estatísticas avançadas sobre suas contas de demonstração, use o novo relatório de negociação. Ele apresenta uma série de indicadores sobre a lucratividade e o risco de sua estratégia, além de conter gráficos de crescimento, saldo e patrimônio líquido, gráficos de distribuição de negociações por direção e instrumentos e muito mais.
  5. Corrigida a exibição de lucro/perda potencial ao editar Take Profit e Stop Loss para ordens Stop Limit.
  6. Inúmeras correções e melhorias no sistema de pagamentos.
  7. Corrigida a verificação de duplicatas ao carregar o conjunto de ferramentas na Observação do Mercado a partir de um arquivo *.set.
  8. Corrigido o instalador web do Paralles. Agora, a plataforma será instalada corretamente ao usar esse sistema de virtualização no macOS com processadores M1/M2/M3.
  9. Atualizadas traduções da interface do usuário.
  10. Correções de log de falhas.

MQL5

  1. Adicionados novos métodos para trabalhar com matrizes e vetores. Eles são usados ​​​​em aprendizado de máquina.

    • ConfusionMatrix — calcula a matriz de erros. O método é aplicado a um vetor de valores previstos.
    • ConfusionMatrixMultilabel — calcula a matriz de erros para cada etiqueta. O método é aplicado a um vetor de valores previstos.
    • ClassificationMetric — calcula uma métrica de classificação para avaliar a qualidade dos dados previstos em relação aos dados reais. O método é aplicado ao vetor de valores previstos.
    • ClassificationScore — calcula uma métrica de classificação para avaliar a qualidade dos dados previstos em relação aos dados reais. O método é aplicado a um vetor de valores verdadeiros.
     
  2. Corrigido o salvamento de dados em um arquivo de texto UTF-8 usando a função FileWrite.
  3. Desativadas e feitas obsoletas as funções Signal*. Agora, elas retornarão conjuntos de sinais vazios.

MetaEditor

  1. Aumentada a frequência de amostragem durante a criação de perfis. Agora, o estado do aplicativo é amostrado 10.000 vezes por segundo, o que permite medir a velocidade de execução da função com muito mais precisão.
  2. Atualizados os modelos disponíveis na ferramenta de auto-preenchimento de código Copilot. Adicionado modelo ChatGPT-4 Turbo, removidas implementações desatualizadas.
  3. Corrigidos erros ao substituir palavras no fragmento de texto selecionado.

Tester

  1. Corrigido o travamento do teste avançado. O problema podia ocorrer no modo de otimização genética.
  2. Otimizado e significativamente acelerado o trabalho com o histórico de negociação dos programas MQL5.
  3. Corrigido o cálculo do lucro em transações de fechamento com oposta. O erro podia ocorrer para instrumentos de negociação que não são a principal ferramenta de teste.

Terminal Web

  1. Corrigida atualização das propriedades dos instrumentos de negociação quando elas são alteradas por parte da corretora.
  2. Corrigida a exibição do corpo da vela no gráfico. O corpo podia não ser visível se fosse pequeno.
  3. Corrigido o funcionamento do campo “País” no formulário de abertura de conta.
20 outubro 2023
MetaTrader 5 build 4040: Melhorias e correções

Terminal

  1. Melhorado o novo relatório de negociação. Corrigida a exibição do primeiro valor no gráfico de crescimento, bem como o cálculo da rebaixamento.



  2. Ao abrir uma conta, cada trader recebe várias mensagens por e-mail interno. Além dos dados de conexão, é possível encontrar muitas informações úteis sobre os recursos da plataforma e serviços integrados. Atualizamos e complementamos esses emails, traduzimos para 50 idiomas e renovamos completamente o design.
  3. Otimizadas as páginas de depósito e retirada de fundos da conta.
  4. Corrigido o erro de alteração de volume ao emitir uma nova ordem. Em algumas combinações de configurações do instrumento de negociação, o campo estava indisponível para edição.
  5. Corrigida a exibição de links para acordos com corretores no diálogo de abertura de uma conta demo.
  6. Atualizadas as traduções da interface do usuário.

MQL5

  1. Corrigido um erro que, em alguns casos, levava à falha do programa MQL5 ao iniciar a plataforma.

Terminal da Web MetaTrader 5

  1. Corrigida a exibição de Stop Loss e Take Profit no histórico de negociações.
  2. Expandida a saída no log. Agora, ele exibirá mensagens sobre conexões bem-sucedidas e malsucedidas.
  3. Corrigido o funcionamento do menu de contexto em "Observação do mercado".
  4. Corrigida a exibição de notificações sobre os resultados das operações ao negociar a partir do livro de ofertas.
  5. Corrigido um erro pelo qual a janela do indicador poderia ser removida do gráfico ao chamar o diálogo de negociação.
  6. Corrigido o arrasto de níveis de negociação no gráfico no caso de eles serem exibidos sobre objetos analíticos.
29 setembro 2023
MetaTrader 5 build 4000: Melhorias no relatório de negociação e no terminal da Web

Terminal

  1. Agora, você pode visualizar o crescimento mensal em dinheiro no novo relatório de negociação. Para acessar essas informações, vá para o relatório "Summary" e selecione o modo "Balance".



  2. Aprimoramos e corrigimos a exibição do novo relatório de negociação.
  3. Atualizamos o ONNX Runtime para a versão 1.16. Os detalhes da versão estão disponíveis no GitHub.
  4. Também atualizamos as traduções da interface do usuário.

MetaTrader 5 Web Terminal

  1. Corrigimos a exibição dos diálogos de alteração de senha e abertura de conta.
  2. Corrigimos um erro na exibição de Stop Loss e Take Profit no histórico, que ocorria após modificações.
  3. Adicionamos a capacidade de rolar na caixa de diálogo de alerta de riscos.
  4. também atualizamos as traduções da interface do usuário.
  5. Realizamos várias melhorias e correções.
21 setembro 2023
MetaTrader 5 build 3980: Melhorias e correções

Terminal

  1. Aprimorado o novo relatório de negociação. Corrigida a exibição dos valores totais dos swaps, bem como o gráfico de lucros para os símbolos.
  2. Otimizadas as páginas de depósito e saque. Saiba mais sobre a nova integração da plataforma com sistemas de pagamento lendo nossa anterior notícia sobre o build 3950.
  3. Otimizado o recálculo de operações financeiras em toda a plataforma, incluindo o testador de estratégias. Os lucros, as margens e muitos outros parâmetros agora são calculados mais rapidamente.
  4. Atualizadas as traduções da interface do usuário.

MQL5

  1. adicionados os métodos Conjugate para os tipos complex, vetor<complex> e matrix<complex>. Eles realizam a conjugação para números complexos.
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       complex a=1+1i;
       complex b=a.Conjugate();
       Print(a, "  ", b);
       /*
       (1,1)  (1,-1)
       */
    
       vectorc va= {0.1+0.1i, 0.2+0.2i, 0.3+0.3i};
       vectorc vb=va.Conjugate();
       Print(va, "  ", vb);
       /*
       [(0.1,0.1),(0.2,0.2),(0.3,0.3)]  [(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]
       */
    
       matrixc ma(2, 3);
       ma.Row(va, 0);
       ma.Row(vb, 1);
       matrixc mb=ma.Conjugate();
       Print(ma);
       Print(mb);
       /*
       [[(0.1,0.1),(0.2,0.2),(0.3,0.3)]
        [(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]]
    
       [[(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]
        [(0.1,0.1),(0.2,0.2),(0.3,0.3)]]
       */
       
       ma=mb.Transpose().Conjugate();
       Print(ma);
       /*
       [[(0.1,0.1),(0.1,-0.1)]
        [(0.2,0.2),(0.2,-0.2)]
        [(0.3,0.3),(0.3,-0.3)]]
       */
      }
  2. Adicionado o processamento da saída do modelo ONNX do tipo Sequence of maps.

    Para modelos ONNX que fornecem sequências Map (ONNX_TYPE_SEQUENCE of ONNX_TYPE_MAP) na camada de saída, um array dinâmico ou fixo de estruturas deve ser passado como parâmetro de saída. Os dois primeiros campos dessa estrutura devem corresponder aos tipos de chave e valor de ONNX_TYPE_MAP e devem ser arrays fixos ou dinâmicos.

    Veja o modelo iris.onnx criado pelo seguinte script Python:
    from sys import argv
    data_path=argv[0]
    last_index=data_path.rfind("\\")+1
    data_path=data_path[0:last_index]
    
    from sklearn.datasets import load_iris
    iris_dataset = load_iris()
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0)
    from sklearn.neighbors import KNeighborsClassifier
    knn = KNeighborsClassifier(n_neighbors=1)
    knn.fit(X_train, y_train)
    
    #  Convert into ONNX format
    from skl2onnx import convert_sklearn
    from skl2onnx.common.data_types import FloatTensorType
    initial_type = [('float_input', FloatTensorType([None, 4]))]
    onx = convert_sklearn(knn, initial_types=initial_type)
    path = data_path+"iris.onnx"
    with open(path, "wb") as f:
        f.write(onx.SerializeToString())
    Abra o arquivo onnx criado no MetaEditor:

    Visualização do modelo ONNX no MetaEditor


    A saída "output_probability" é uma sequência Map, cuja chave tem o tipo INT64 (que corresponde ao tipo long da linguagem MQL5) e o valor do tipo float. Para obter dados dessa saída, declaramos a seguinte estrutura:
    struct MyMap
      {
       long              key[];
       float             value[];
      };
    Aqui usamos arrays dinâmicos com tipos apropriados. Nesse caso, é possível usar arrays fixos, já que para esse modelo o Map sempre contém 3 pares de chave+valor.

    Como uma sequência é retornada do Map, como parâmetro para aceitar os dados com a saída output_probability deve ser passada um array de tais estruturas - dinâmico ou fixo, com base nas propriedades do modelo específico. Por exemplo:
    //--- declaramos um array para receber dados da camada de saída output_probability
    MyMap output_probability[];
    
    ...
    
    //--- execução do modelo
    OnnxRun(model,ONNX_DEBUG_LOGS,float_input,output_label,output_probability);

MetaEditor

  1. Corrigida a exibição do tipo de parâmetro de saída no visualizador de modelos ONNX.

MetaTrader 5 Web Terminal build 3980

  1. Adicionada a seção de contato da corretora ao menu principal.
  2. Adicionado o tratamento de erro de autorização com certificado SSL. Esse tipo de autorização não é compatível com o terminal da Web e, em vez disso, a autorização por senha de uso único pode ser ativada.
  3. Corrigido o link para download da versão desktop da plataforma no menu principal.
  4. Alterado o diálogo de gerenciamento de contas. Se a corretora não tiver contas de demonstração ou reais disponíveis, o item de menu correspondente ficará oculto.
14 setembro 2023
MetaTrader 5 build 3950: Retirada/depósito no terminal e relatório de negociação atualizado

Terminal

  1. Adicionado suporte para operações de saldo, retirada e reposição de saldo da conta de negociação diretamente no terminal do cliente.

    Adicionamos a integração dos sistemas de pagamento mais populares diretamente na plataforma MetaTrader 5, o que permite às corretoras fornecer aos traders um novo nível de serviço. Ao depositar ou recarregar, basta selecionar o método que melhor se adapta a você e realizar a transação. Para maior comodidade, os traders podem salvar os cartões selecionados para que não precisem inserir os detalhes do cartão todas as vezes. Ao mesmo tempo, a corretora não armazena detalhes de pagamento e números de cartão. Todos os dados inseridos pelo usuário durante o pagamento são enviados através de canais seguros para verificação pelo sistema de pagamento que você escolheu para efetuar o pagamento.

    A nova funcionalidade oferece aos traders a oportunidade de gerenciar fundos com um clique, sem sair do terminal do cliente.



  2. O relatório do histórico de negociação foi reformulado e completamente atualizado - agora é mais visual. Revisamos a abordagem de apresentação de informações e traduzimos relatórios estatísticos áridos em gráficos e tabelas interativos. O trabalho ainda está em andamento, mas agora você pode avaliar as mudanças.

    Para visualizar estatísticas de negociação, clique em “Relatórios” no menu “Visualizar”.




    O relatório está dividido em quatro guias, cada uma contendo informações agregadas em seu próprio contexto:

    • Summary — visão geral das suas atividades ao longo do tempo: dados da conta, indicadores gerais de lucro e perda, montante de depósitos e retiradas, gráficos de saldo, crescimento e dividendos, bem como outros dados.
    • Profit/Loss — informações históricas sobre negociações lucrativas e não lucrativas. Dividido por tipos de negociação (manual, cópia e negociação algorítmica), pode ser analisado por negociações individuais, proporções percentuais ou valores monetários por dias, meses e anos.
    • Long/Short — relatório sobre ordens de compra e venda em intervalos de tempo específicos.
    • Symbols — análise detalhada de negociações em instrumentos financeiros. Aqui você verá com quais símbolos você ganha ou perde, com que frequência você negocia com eles, gráficos de negociações e volumes de dinheiro neles.


    Novos relatórios permitem avaliar visualmente vários aspectos dos resultados de negociação, simplesmente clicando nas guias. Os histogramas, gráficos e tabelas são interativos e apresentam informações adicionais ao passar o cursor do mouse sobre eles. Nossos designers trabalharam arduamente para garantir que as informações dos relatórios fossem lidas da maneira mais simples e clara possível. Experimente você mesmo e avalie o resultado!

  3. Adicionado o uso de instruções AVX2 nos casos em que elas são suportadas pelo processador. Isso permitirá o uso mais eficiente dos recursos do processador no qual o terminal está sendo executado. Agora, ao instalar ou atualizar, o próprio terminal detectará a arquitetura do processador e instalará a versão ideal para ele. Quando iniciado, o terminal grava uma mensagem (AVX/AVX2) no log, que mostra para qual conjunto de instruções o terminal foi desenvolvido.
    Terminal	MetaTrader 5 x64 build 3914 started for MetaQuotes Software Corp.
    Terminal	Windows 10 build 19045, 20 x Intel Xeon  E5-2630 v4 @ 2.20GHz, AVX, 41 / 63 Gb memory, 58 / 280 Gb disk, UAC, GMT+2
    

    Advanced Vector Extensions (AVX) é uma extensão do conjunto de instruções x86 para microprocessadores Intel e AMD, proposta em 2008. O desenvolvimento adicional levou ao aparecimento do AVX2 e AVX-512 (2013).

  4. Além de duas versões dos terminais MetaTrader 5 em X64 e AVX, lançamos uma terceira versão do terminal desktop, compilada com suporte direto para comandos AVX2. Ao mesmo tempo, os modelos ONNX agora também podem funcionar com suporte para comandos AVX2.
  5. Adicionada exibição de links para os documentos regulatórios necessários da corretora. Agora você pode obter todas as informações legais necessárias da corretora diretamente no terminal do cliente no menu Ajuda/Termos e Condições.



  6. Corrigida a autorização 2FA quando é usada a autenticação de autorização estendida opcional.
  7. Corrigida a exibição de mensagens de correio interno ao trabalhar no MacOS.
  8. Corrigida a exibição da janela Sinais ao executar no Wine.
  9. Lançados novos instaladores para terminais MT4/MT5 para Linux.
  10. Adicionados comandos ao menu Ajuda para ir para as páginas de download das versões Linux e Mac do terminal. Para a conveniência dos traders, criamos uma seção especial do site, onde é possível encontrar variantes do terminal de negociação para todas as plataformas e para negociação no navegador.



  11. Corrigida inserção de fotos em e-mails internos.
  12. Lançados novos instaladores do MetaTrader 5 para Mac com suporte para processadores M1/M2. Devido à transição para o Wine 8.0.1, é altamente recomendável desinstalar as versões antigas e instalar as novas. Ao usar versões antigas do Wine < 8.0.0, uma mensagem sobre a necessidade de atualização é exibida no registro do terminal.
  13. Adicionada a exibição "VPS Hosting Speed Up" no menu de verificação de rede com ping para seu servidor de negociação. Isso permitirá que você veja claramente como a latência da sua rede será reduzida ao alugar um VPS incorporado.




  14. Reforçados as exigências de complexidade mínima da senha, nomeadamenter

    • comprimento da senha — pelo menos 8 caracteres
    • a senha deve conter pelo menos 1 caractere em maiúsculas e minúsculas, pelo menos 1 dígito e pelo menos 1 caractere especial.

  15. Links clicáveis nos registros do terminal. Agora, ao clicar duas vezes em linhas com links https, ocorre uma transição para o navegador com abertura de links.
  16. Corrigida a pesquisa de instrumentos de negociação na Observação do mercado. Agora o símbolo é pesquisado primeiro pelo nome e depois por outros campos: descrição, ISIN, etc.
  17. Corrigida a contabilização do lucro nas negociações ao calcular o saldo nos relatórios sobre o histórico de negociações da conta. Em alguns casos, o cálculo não levava em conta o tipo de instrumento.

VPS Hosting

  1. Você pode enviar e executar programas EX5 compilados para o conjunto de comandos x64/AVX/AVX2. Os programas em AVX512 não são compatíveis com o VPS incorporado.
  2. O número de locais para aluguel de VPS incorporado foi aumentado para 27. Agora, a escolha do servidor mais próximo é ainda mais ampla.

MQL5

  1. Adicionado o gerenciamento de configurações de compilação, incluindo a seleção de conjuntos de instruções de processadores estendidos — AVX, AVX2, AVX512, FMA3.

    Os processadores modernos têm um conjunto de instruções estendidas que aceleram significativamente os cálculos matemáticos, mas a grande maioria dos programas modernos não usa esses recursos. Adicionamos suporte a essas instruções ao compilador MQL5, o que permite gerar códigos mais eficientes e mais rápidos.

    Também adicionamos a possibilidade de escolher com que tipo de instruções você deseja compilar seu programa MQL5. Você pode especificar configurações gerais para programas individuais nas Configurações do MetaEditor e configurações pessoais para projetos:



  2. Adicionadas as enumerações ENUM_AVERAGE_MODE e ENUM_CLASSIFICATION_METRIC aos métodos matriciais e vetoriais.
  3. Adicionado método Set para vetores.
  4. Reformulada a inicialização do OpenCL - agora ele é inicializado no primeiro uso real, em vez de no carregamento de um programa MQL5 contendo funções OpenCL.
  5. Corrigido erro ao chamar a função SocketIsConnected.
  6. Corrigido atraso na chamada do método OnDeinit ao descarregar indicadores personalizados.
  7. Corrigido um erro do compilador que causava o cálculo incorreto do comprimento da linha na propriedade indicator_label, o que resultava na exibição incorreta de dicas de ferramentas para objetos gráficos.
  8. Corrigido o uso de comentários multilinhas no corpo da macro. Esse é um exemplo de macro onde ocorria o erro:
    #define MACRO1 /*
    #define MACRO2 */
    void OnStart()
    {
    #ifdef MACRO2
        Print( 2 );
    #else
        Print( 1 );
    #endif
    }
  9. Corrigida a ordem dos parâmetros da função MathAtan2. A ordem agora corresponde à mesma função em C++.
  10. Adicionado o novo valor TERMINAL_CPU_ARCHITECTURE à enumeração ENUM_TERMINAL_INFO_STRING. adicionada também a macro __CPU_ARCHITECTURE__ que obtém a arquitetura da CPU do computador no qual o terminal está sendo executado. Exemplo de uso:
    void OnStart()
      {
       Print("CPU name:         ",TerminalInfoString(TERMINAL_CPU_NAME));
       Print("CPU cores:        ",TerminalInfoInteger(TERMINAL_CPU_CORES));
       Print("CPU architecture: ",TerminalInfoString(TERMINAL_CPU_ARCHITECTURE));  
       Print("");
       Print("EX5 architecture: ",__CPU_ARCHITECTURE__);                            
      }
    
    CPU name:         12th Gen Intel Core i9-12900K
    CPU cores:        24
    CPU architecture: AVX2 + FMA3
    
    EX5 architecture: AVX

  11. Alterado o comportamento do modificador extern. Agora, uma declaração de variável com o modificador extern é uma declaração de variável.

    Novas restrições:
    1. Não deve haver inicialização em uma variável predefinida. Por exemplo, ao compilar o código a seguir, obtemos o erro "X - extern variable initialization is not allowed":
      extern int X=0;
      
      void OnStart()
        {
        }

    2. A variável extern deve ser declarada no programa sem a palavra-chave extern. Por exemplo, ao compilar o código a seguir, obtemos o erro "unresolved extern variable X":
      extern int X;
      
      void OnStart()
        {
        }

    3. Ao usar extern, é importante prestar atenção na ordem de inicialização, pois uma variável pode ser acessada antes de ser inicializada. Por exemplo, o código a seguir imprimirá "Y=0 X=5" porque a inicialização da variável Y ocorre antes da inicialização da variável X:
      extern int X;
      int        Y=X;
      
      void OnStart(void)
        {
         Print("Y=",Y," X=",X);
        }
        
      int X=_Digits;

MetaEditor

  1. Adicionado o uso de instruções AVX2 nos casos em que elas são suportadas pelo processador.
  2. Exibição aprimorada de variáveis ​​locais durante a depuração.
  3. Corrigido um bug podia causar congelamento durante a compilação

Tester

  1. adicionado o uso de instruções AVX2 quando suportadas pelo processador.

Traduções atualizadas da interface do usuário.

Correções de registros de falhas.


MetaTrader 5 Web Terminal build 3950

  1. Adicionada exibição do preço Ask às configurações do gráfico.



  2. Acelerado o carregamento inicial do terminal.
  3. Adicionada a capacidade de alterar a senha.
  4. Adicionada a capacidade de excluir e salvar a senha.
  5. Adicionado período personalizado para exibir o histórico de negociação.
  6. Corrigido um bug ao forçar uma alteração de senha.
  7. Corrigido o cálculo do diff - a distância entre o preço de abertura e os níveis TP/SL.



  8. Corrigido um erro de travamento dos ticks ao fechar todas as ordens/operações.
  9. Corrigida a exibição dos eventos do Calendário Econômico – eles podiam não ser exibidos no gráfico, apesar da opção estar habilitada.
  10. Corrigido bug onde os indicadores eram redefinidos ao alterar um símbolo no gráfico.
  11. Corrigido bug no formulário de abertura de conta real ao confirmar seu telefone/e-mail.
  12. Adicionadas e corrigidas traduções.
8 junho 2023
MetaTrader 5 build 3800: ordens Book or Cancel, assistência de IA ao escrever código e suporte aprimorado para ONNX

Terminal

  1. Adicionado suporte para nova política de execução de ordens — Passiva / Book or Cancel (BOC).



    A política BOC significa que a ordem só pode ser colocada no livro de ofertas. Se a ordem puder ser executada imediatamente ao ser colocada, ela será retirada. Na verdade, com essa política, é garantido que o preço da ordem colocada será pior que o mercado atual. O BOC é usado para implementar negociações passivas, de modo que a ordem não será garantidamente executada imediatamente após ser colocada e não afetará a liquidez atual. É suportado apenas para ordens limitadas e stop-limitadas e apenas no modo de execução a mercado.

    A disponibilidade da nova política de execução para instrumentos depende do sua corretora.

  2. A plataforma passa a utilizar o componente Microsoft Edge WebView2 para exibir páginas HTML.

    Em comparação com o MSHTML desatualizado, o novo componente expande significativamente as possibilidades para exibir conteúdo web, oferecendo acesso a tecnologias modernas. A mudança para o WebView2 permitirá melhorar a aparência de algumas seções da plataforma, aumentar seu desempenho, criar interfaces mais responsivas. Em particular, isso afetará as seções "Mercado", "Sinais" e "VPS".
    O suporte completo ao WebView2 está disponível apenas no Windows 10. Recomendamos fortemente que todos os usuários migrem para as versões mais recentes do sistema operacional, se possível. Ao trabalhar com o Windows 7 e o Wine, a plataforma continuará a usar o componente MSHTML desatualizado, e as novas funções não estarão disponíveis. Também recomendamos fortemente que instale todas as atualizações disponíveis para o sistema operacional. Agora, a versão mínima recomendada é o Windows 10 21H2 (build 19044 de novembro de 2021).

  3. Melhorado o sistema de segurança no Mercado. Agora, para iniciar um produto, o usuário precisa estar autenticado na plataforma com sua conta MQL5, através da qual o produto foi adquirido. A conta deve estar indicada na seção "Serviço \ Configurações \ Comunidade":



    Se a conta não for indicada ou se a conta errada for indicada, o produto não será iniciado e uma mensagem aparecerá no log da plataforma:
    'O nome do produto' requer uma conta MQL5 ativa em Ferramentas->Opções->Comunidade
  4. Adicionado o comando "Visão Geral" ao menu de contexto da seção de histórico. Permite abrir um relatório de negociação da conta:



  5. Corrigidos erros de exibição do diálogo de autenticação de dois fatores. Se havia várias contas com o mesmo número em diferentes corretores no terminal, o campo para inserir a senha única não aparecia no formulário de conexão à conta.
  6. Acelerada a renderização de indicadores com o estilo de exibição DRAW_COLOR_CANDLES.
  7. Corrigidos erros na construção do relatório de negociação. Em alguns casos, os valores de lucro e capital líquido nos gráficos poderiam ser exibidos incorretamente.
  8. Adicionada a exibição do indicador "Custos" no relatório de negociação. Ele mostra a soma dos custos por transação em relação ao preço médio atual do instrumento (custo de spread mid-point). Na verdade, é a quantidade que o trader perde no spread ao negociar. A disponibilidade deste indicador depende da corretora.
  9. Traduções da interface do usuário atualizadas.
  10. Melhorada a estabilidade ao trabalhar sob o Wine, especialmente em sistemas macOS. Recomendamos que você remova completamente os terminais antigos e reinstale-os:


  11. Acelerada a instalação e o download de atualizações, bem como melhorada a detecção da disponibilidade do AVX no computador do usuário ao escolher a distribuição.
  12. Suporte habilitado para TLS 1.3 nos protocolos web. TLS 1.0 desativado como obsoleto e inseguro.
  13. Corrigido o cálculo da comissão do agente nos relatórios de histórico de negociações. As operações correspondentes podem não ter sido consideradas ao calcular o lucro total.
  14. Corrigido um bug que impossibilitava a alteração do servidor na caixa de diálogo de conexão da conta. O problema surgia quando havia várias contas no terminal com o mesmo número para diferentes corretoras.
Os instaladores estão sendo migrados para trabalhar apenas com versões de plataforma de 64 bits. O suporte para versões de 32 bits está terminando. As versões de plataforma de 32 bits previamente instaladas continuarão funcionando até 1º de janeiro de 2024.

MQL5

  1. Adicionado um novo valor STAT_COMPLEX_CRITERION na enumeração ENUM_STATISTICS. Isso permite obter o valor do critério complexo, calculado como resultado da otimização.
  2. Perfeiçoado o método RegressionMetric, usado para calcular a métrica de regressão para a matriz ou vetor fornecido. adicionados os parâmetros vector_true e matrix_true para passar os valores verdadeiros pelos quais a qualidade dos dados previstos é avaliada.
    double vector::RegressionMetric(
       const vector& vector_true,            // valores reais
       const ENUM_REGRESSION_METRIC  metric  // métrica
       );
     
    double matrix::RegressionMetric(
       const matrix& matrix_true,            // valores reais
       const ENUM_REGRESSION_METRIC metric   // métrica
       );
     
    vector matrix::RegressionMetric(
       const matrix& matrix_true,            // valores reais
       const ENUM_REGRESSION_METRIC metric,  // métrica
       const int                      axis   // eixo
       );
  3. Adicionado o método LinearRegression. Ele retorna um vetor/matriz com valores de regressão linear calculados para o vetor/matriz passado.
    vector vector::LinearRegression();
     
    matriz::RegressãoLinear(
       ENUM_MATRIX_AXIS axis=AXIS_NONE       // eixo ao longo do qual é calculada a regressão 
       );
    Exemplo:
    vector vector_a;
    //--- preenchemos o vetor com preços
    vector_a.CopyRates(_Symbol,_Period,COPY_RATES_CLOSE,1,100);
    //--- obtemos uma regressão linear
    vector vector_r=vector_a.LinearRegression();
    Visualização do resultado em forma de gráfico:




  4. Adicionado o método HasNan que retorna o número de valores NaN em uma matriz/vetor.
    ulong vector::HasNan();
    ulong matrix::HasNan();
    Os métodos Compare e CompareByDigits, ao comparar os respectivos pares de elementos que têm valores NaN, considera esses elementos iguais, enquanto em uma comparação normal de ponto flutuante NaN != NaN.

  5. A estrutura OnnxTypeInfo, usada para trabalhar com modelos ONNX, foi modificada:

    struct OnnxTypeInfo
      {
       ENUM_ONNX_TYPE       type;            // tipo de parâmetro
       OnnxTensorTypeInfo   tensor;          // descrição do tensor
       OnnxMapTypeInfo      map;             // descrição do mapa
       OnnxSequenceTypeInfo sequence;        // descrição da sequência
      };

    Agora, o tipo de dados é especificado usando novas subestruturas:

    • OnnxTensorTypeInfo - tensor
    • OnnxMapTypeInfo - mapa
    • OnnxSequenceTypeInfo - sequência

    struct OnnxTensorTypeInfo
          {
           ENUM_ONNX_DATATYPE   data_type;       // tipo de dados no tensor
           long                 dimensions[];    // número de elementos
          };
        
        struct OnnxMapTypeInfo
          {
           ENUM_ONNX_DATA_TYPE  key_type;        // tipo de chave
           OnnxTypeInfo         type_info;       // tipo de valor
          };
        
        struct OnnxSequenceTypeInfo
          {
           OnnxTypeInfo         type_info;       // tipo de dados na sequência
          };
    Dependendo de OnnxTypeInfo::type (ONNX_TYPE_TENSOR, ONNX_TYPE_MAP ou ONNX_TYPE_SEQUENCE), a subestrutura correspondente é preenchida.

  6. Suporte aprimorado para modelos ONNX (Open Neural Network Exchange).
  7. foram adicionados os métodos CopyIndicatorBuffer, que permitem obter dados do buffer do indicador em um vetor.
    bool vector<T>::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,ulong start_pos,ulong count);
    bool vector<T>::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,datetime start_time,ulong count);
    bool vector<T>::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,datetime start_time,datetime stop_time);
  8. Corrigido o trabalho com arrays de duas ou mais dimensões nos métodos FrameAdd e FrameNext.
  9. Corrigido o funcionamento do método CRedBlackTree::Remove na biblioteca padrão.
  10. Foram feitas correções na biblioteca de lógica difusa Fuzzy.

MetaEditor

  1. Foi adicionada a integração com o Copilot — uma ferramenta avançada para a conclusão automática de código. Seu funcionamento é baseado em modelos da OpenAI. Você insere um comentário ou parte de uma função, envia uma instrução (prompt), a rede neural analisa e propõe opções de código para implementar sua ideia.




    Dependendo do tipo de arquivo em que você está trabalhando, a frase "Linguagem MQL5", "Linguagem Python" ou "Linguagem C++" é automaticamente adicionada ao início de cada prompt. Assim, a rede neural fornecerá o resultado no idioma apropriado.

    No momento, o Copilot está funcionando gratuitamente, e não é necessário ativá-lo separadamente. No menu Serviços \ Configurações \ Copilot, há vários parâmetros:




    Configurações de pagamento:

    • Usar conta MQL5 — atualmente, este modo está funcionando gratuitamente. No futuro, você poderá pagar a assinatura diretamente com o saldo de sua conta MQL5.
    • Usar a chave OpenAI — se você já pagou a assinatura e possui uma chave, pode usá-la.

    Configurações de solicitações:

    • Modelo — a rede neural que processará suas solicitações. Atualmente, estão disponíveis text-davinci-003 e gpt-3.5-turbo. No futuro, será adicionado suporte para gpt-4.
    • Máximo de tokens — a quantidade de unidades de texto que o modelo pode retornar em resposta ao prompt.
    • Variabilidade — influencia o quão rigorosamente a rede neural seguirá o prompt. Quanto maior o valor, mais aleatório pode ser o resultado. Nos modelos da OpenAI, corresponde ao parâmetro de temperature.

  2. Adicionada a possibilidade de visualizar as propriedades dos modelos ONNX.

    Agora, diretamente no editor, você pode visualizar o conteúdo do arquivo *.onnx de uma maneira conveniente. Para ver como é, encontre o projeto ONNX.Price.Prediction na seção "Ferramentas \ Projetos Públicos", e então clique em "Participar" no menu de contexto. O projeto será baixado para o seu computador e aparecerá no Navegador.



  3. Adicionada a capacidade de visualizar modelos de aprendizado de máquina e redes neurais através do Netron. Este visualizador suporta muitos modelos populares: ONNX, TensorFlow Lite, Caffe, Keras, ncnn, etc.

    Para visualizar o modelo, selecione seu arquivo no Navegador e clique em "Abrir no Netron". Se esta ferramenta ainda não estiver instalada, sua página no GitHub será aberta, de onde você pode baixar o arquivo de instalação para o seu sistema operacional. Por exemplo, Netron-Setup-X.X.X.exe — para o Windows. Após a instalação do programa, o modelo será imediatamente aberto para visualização a partir do Navegador.


    Formatos suportados:

    • armnn, caffemodel, circle, ckpt, cmf, dlc, dnn, h5, har, hd5, hdf5, hn, keras, kmodel,
    • lite, mar, meta, mge, mlmodel, mlnet, mlpackage, mnn, model, nb, ngf, nn, nnp,
    • om, onnx, ort, paddle, param, pb, pbtxt, pdiparams, pdmodel, pdopt, pdparams, prototxt, pt, pth, ptl,
    • rknn, t7, tfl, tflite, tmfile, tm, tnnproto, torchscript, uff, xmodel

  4. Atualizações das traduções da interface do usuário

Tester

  1. Correção no cálculo do indicador "Transação Média Perdedora" no relatório de teste. Anteriormente, as transações de entrada poderiam ser erroneamente contabilizadas se uma comissão fosse cobrada sobre elas.
  2. Aperfeiçoamento da configuração de comissões personalizadas no testador de estratégias. Para definir um símbolo, agora basta inserir apenas seu nome, e não o caminho completo.
  3. Ícones atualizados no testador de estratégias. Novas metáforas e aparência moderna facilitam a percepção das informações.

Correções de registro de falhas.

Web Terminal

  1. Aperfeiçoada a seção de histórico de negociação:

    • Adicionada a exibição de operações de saldo no histórico de negociação: depósitos e retiradas, comissões, correções, etc.
    • Adicionada a exibição de indicadores finais no histórico de negociação: saldo, lucro, comissão, depósitos, retiradas, número de ordens, etc.
    • Na versão móvel, foi adicionada a capacidade de classificar operações, bem como filtrar o histórico por profundidade.




  2. Especificação de contrato complementada para instrumentos. Agora, também mostra o limite de volume, tamanho e custo do tick, margem inicial e margem de cobertura.
  3. Melhorados os esquemas de cores:

    • No gráfico, as ordens pendentes agora são exibidas em cinza, enquanto as posições são coloridas de acordo com a direção: vermelho para venda, azul para compra. Com um grande número de operações, o gráfico não parecerá sobrecarregado.
    • Ao visualizar/editar uma posição, apenas ela e seus níveis são destacados, todas as outras posições e ordens se tornam cinzas, e seus níveis são ocultados na escala de preços. Será mais conveniente trabalhar com operações no gráfico.
    • As Stop Loss agora são exibidas não em vermelho, mas em laranja, para não confundi-las com as posições de venda.
    • As ícones que indicam o fechamento de posições no gráfico foram aprimoradas. Se uma posição for fechada no Take Profit, a ícone será verde, se for fechada no Stop Loss, será vermelha.

  4. Adicionada a tradução da interface para árabe, búlgaro, vietnamita, grego, indonésio, malaio, holandês, persa, polonês, tailandês, ucraniano e hindi. Agora, o terminal web está disponível em 24 idiomas.
  5. Corrigida a tradução para o turco.
  6. Corrigida a modificação e exclusão de ordens pendentes na versão móvel do terminal web.
  7. Corrigida a dica de mercado fechado exibida no gráfico.
  8. Corrigida a exibição de lucro no botão de fechamento de posição no diálogo de negociação. O erro ocorreu ao fechar parcialmente.
  9. Corrigida a exibição de notificações de negociação no gráfico.
  10. Corrigida a alteração do volume usando as setas no livro de ofertas.
  11. Corrigido um erro que, em alguns casos, levava à redefinição das configurações dos indicadores no gráfico.
  12. Corrigida a verificação do nome de usuário ao abrir novas contas. Anteriormente, a presença de um apóstrofo no nome era considerada um erro.
  13. Corrigido o tratamento de recotações. Em alguns casos, o diálogo com a oferta de novos preços pode não ter sido exibido.
  14. Corrigida a exibição do indicador Ichimoku Kinko Hyo. Agora, as linhas Chikou-span, Up kumo e Down kumo são exibidas com o deslocamento correto.
  15. Corrigida a verificação da margem inicial ao abrir uma nova ordem. O erro surgia ao usar o sistema de cobertura para o registro de posições.
  16. Corrigida a rolagem na janela de especificação do contrato.

MQL5.community

  1. O site da rede de computação distribuída MQL5 Cloud Network foi completamente atualizado — https://cloud.mql5.com.

    Descubra como utilizar a capacidade de milhares de computadores em todo o mundo para otimizar suas estratégias de negociação. Graças à MQL5 Cloud Network, até os cálculos mais longos e pesados podem ser realizados em poucos minutos. Aqui, você também aprenderá como se tornar um membro da rede e ganhar dinheiro ao disponibilizar seus recursos de computação.




  2. A seção de capturas de tela para produtos no Mercado foi melhorada. Agora, os autores podem carregar ilustrações com até 1920*1800 pixels, permitindo uma melhor demonstração do funcionamento dos aplicativos. Além disso, a galeria de capturas de tela foi atualizada. As miniaturas das imagens são exibidas em um carrossel conveniente, e ao clicar nelas, você pode abrir imagens em tamanho real.



  3. A seção Freelance foi melhorada. Agora, ao fazer os primeiros pedidos, os usuários receberão mais dicas:

    • Exemplos de especificações técnicas e lembretes sobre a necessidade de anexá-las
    • Instruções para completar etapas
    • Dicas para o uso de modelos

    Tudo isso ajudará a não se perder no processo e a obter o resultado desejado.




24 março 2023
MetaTrader 5 build 3660: Aprimoramentos e correções

Terminal

  1. Correção de erros que, em alguns casos, resultavam em registros incorretos no log da plataforma.
  2. Atualizações nas traduções da interface do usuário.

MQL5

  • Correção na verificação de variáveis globais. Quando declaradas variáveis idênticas em diferentes namespaces, o compilador emitia um alerta equivocado de que a variável já havia sido declarada.

Web Terminal

  1. Adicionada a tradução da interface do usuário para o português. O terminal web agora está disponível em 12 idiomas.
  2. Correção na caixa de diálogo para adicionar o indicador Standard Deviation.
  3. Pequenos ajustes e aprimoramentos.
17 março 2023
MetaTrader 5 build 3640: terminal web disponível em 11 idiomas

WebTerminal

  1. Foram adicionadas traduções de interface em 10 idiomas amplamente utilizados: russo, francês, alemão, italiano, japonês, coreano, espanhol, turco, chinês simplificado e chinês tradicional. Esta lista será expandida ainda mais nas próximas versões. Utilize o menu para alterar a interface para o seu idioma preferido:


    Interface do terminal web disponível em 11 idiomas


  2. Foi otimizado o mecanismo de conexão com o servidor de negociação.

MQL5

  1. MQL5: adicionados os sinalizadores COPY_TICKS_VERTICAL e COPY_RATES_VERTICAL aos métodos CopyTicks, CopyTicksRange e CopyRates, respectivamente.

    Por padrão, os ticks e as séries são copiados para a matriz ao longo do eixo horizontal, ou seja, os dados são adicionados à esquerda no final da linha. Nas tarefas de execução de um modelo ONNX treinado, tal matriz deve ser transposta para fornecer dados de entrada:

    const long                             ExtOutputShape[] = {1,1};    // model output shape
    const long                             ExtInputShape [] = {1,10,4}; // model input form
    #resource "Python/model.onnx" as uchar ExtModel[]                   // model as resource
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    int OnStart(void)
      {
       matrix rates;
    //--- get 10 bars
       if(!rates.CopyRates("EURUSD",PERIOD_H1,COPY_RATES_OHLC,2,10))
          return(-1);
    //--- input a set of OHLC vectors
       matrix x_norm=rates.Transpose();
       vector m=x_norm.Mean(0);               
       vector s=x_norm.Std(0);
       matrix mm(10,4);
       matrix ms(10,4);

    Agora, ao chamar o método, basta especificar um sinalizador adicional COPY_RATES_VERTICAL (COPY_TICKS_VERTICAL para ticks) para evitar uma operação de transformação de dados desnecessária:

    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    int OnStart(void)
      {
       matrix rates;
    //--- get 10 bars
       if(!rates.CopyRates("EURUSD",PERIOD_H1,COPY_RATES_OHLC|COPY_RATES_VERTICAL,2,10))
          return(-1);
    //--- input a set of OHLC vectors
  2. Adicionado o valor CHART_SHOW_TRADE_HISTORY à enumeração ENUM_CHART_PROPERTY_INTEGER. A propriedade controla a exibição das negociações a partir do histórico de negociação no gráfico. Use as funções ChartGetInteger e ChartSetInteger para obter e definir propriedades. Consulte a documentação da plataforma para saber mais sobre como as negociações são exibidas no gráfico.

MetaEditor

  • Corrigido travamento da interface, que ocorria em casos raros durante a compilação de arquivos.

Terminal

  • Correções relacionadas a relatórios de erros.
10 março 2023
MetaTrader 5 build 3620: melhorias no terminal web, suporte ONNX e multiplicação mais rápida de matrizes em MQL5

Terminal

  1. Corrigido o erro ao calcular o lucro total norelatório de negociação.
  2. Atualizados dados fundamentais sobre instrumentos de negociação disponíveis através da Observação do Mercado.
  3. Corrigida inicialização da plataforma de negociação no Wine 7.0.1 ao trabalhar em sistemas Linux.
  4. Corrigida a adição de símbolos à Observação do Mercado por meio da barra de pesquisa. O símbolo encontrado por descrição não podia ser adicionado à lista clicando em sua linha.

MQL5

  1. Adicionado suporte para trabalhar com modelos ONNX (Open Neural Network Exchange).

    ONNX é uma biblioteca de código aberto para a construção de redes neurais de aprendizado profundo. Este formato é suportado por muitas plataformas, incluindo Chainer, Caffee2 e PyTorch. Depois de criar um modelo ONNX usando ferramentas especializadas, você pode integrá-lo ao seu programa MQL5 e usá-lo para tomar decisões de negociação.

    Uma descrição de todas as funções suportadas está disponível na documentação. Um exemplo de como trabalhar com um modelo de teste está disponível em projetos públicos dentro do MetaEditor. Encontre o projeto ONNX.Price.Prediction em "Ferramentas > Projetos públicos" e clique em "Participar" no menu de contexto. O projeto será baixado para o seu computador e aparecerá no Navegador:


    Exemplo de trabalho com modelo ONNX em projetos públicos


    Compile o projeto e execute-o com EURUSD H1 para ver o resultado.

    Além do modelo finalizado e do código MQL5 para executá-lo, o projeto também inclui o script de Python PricePredictionTraining.py. Ele mostra como criar um modelo ONNX sozinho. Para que o script funcione, instale o Python em seu computador, bem como os módulos necessários a partir da linha de comando:

    python.exe -m pip install --upgrade pip
    python -m pip install --upgrade tensorflow
    python -m pip install --upgrade pandas
    python -m pip install --upgrade scikit-learn
    python -m pip install --upgrade matplotlib
    python -m pip install --upgrade tqdm
    python -m pip install --upgrade metatrader5
    python -m pip install --upgrade onnx==1.12
    python -m pip install --upgrade tf2onnx
    Instruções detalhadas para trabalhar com ONNX estão disponíveis na documentação.

  2. Adicionado suporte para o novo algoritmo para multiplicação de matrizes General Matrix Multiplication (GeMM). Ele permite que você acelere significativamente os cálculos na maioria dos processadores por conta da paralelização de tarefas e do uso mais correto dos caches L1/L2/L3. A velocidade de cálculo é comparável a pacotes conhecidos como Math Kernel Library (MKL) e OpenBLAS. Num futuro próximo iremos publicar testes comparativos detalhados.

    O novo algoritmo é atualmente suportado no método matrix::GeMM. Se o seu processador suportar as instruções AVX e FMA (a maioria dos processadores lançados após 2013), o algoritmo será ativado automaticamente.

  3. Adicionado suporte para passar matrizes e vetores para DLLs. Agora você pode importar funções que usam esse tipo de dados de bibliotecas externas.

    Matrizes e vetores são passados para a DLL como um ponteiro para um buffer. Por exemplo, para passar uma matriz do tipo float, o parâmetro correspondente da função DLL exportada deve levar um ponteiro para um buffer do tipo float. Por exemplo:

    MQL5
    #import "mmlib.dll"
    bool sgemm(uint flags,matrix<float> &C,const matrix<float> &A,const matrix<float> &B,ulong M,ulong N,ulong K,float alpha,float beta);
    #import
    C++
    extern "C" __declspec(dllexport) bool sgemm(UINT flags,float *C,const float *A,const float *B,UINT64 M,UINT64 N,UINT64 K,float alpha,float beta)
    Para um processamento adequado de matrizes e vetores, além de seus buffers, devem ser passados seus tamanhos.

  4. Adicionada a nova função CopySeries para copiar séries temporais sincronizadas de MqlRates para arrays separados.

    A função CopySeries permite obter apenas as séries temporais necessárias, de cada vez, em diferentes matrizes especificadas, garantindo que todas elas estejam sincronizadas entre si. Isso significa que todos os valores nas matrizes resultantes, em um índice específico N, pertencem à mesma barra no par símbolo/período de tempo especificado. Dessa forma, não é necessário garantir que todas as séries temporais recebidas estejam sincronizadas com o tempo de abertura da barra.

    Ao contrário da função CopyRates, que retorna um conjunto completo de séries temporais como uma matriz MQLRates, a função CopySeries permite que o programador obtenha somente as séries temporais necessárias, com base em uma combinação de sinalizadores que indicam o tipo de série temporal solicitado. Neste caso, a ordem dos arrays passados para a função deve corresponder à ordem dos campos na estrutura MqlRates:

    struct MqlRates
      {
       datetime time;         // período de início
       double   open;         // preço de abertura
       double   high;         // preço mais alto no período
       double   low;          // preço mais baixo no período
       double   close;        // preço de fechamento
       long     tick_volume;  // volume de ticks
       int      spread;       // spread
       long     real_volume;  // volume de negociação
      }

    Assim, caso seja necessário obter os valores das séries temporais time, close e real_volume para as últimas 100 barras do símbolo/timeframe atual, a chamada deve ser a seguinte:

    datetime  time[];
    double    close[];
    long      volume[];
    CopySeries(NULL,0,0,100,COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_VOLUME_REAL,time,close,volume);
    

    Ao mesmo tempo, a ordem dos arrays "time, close, volume" é importante — deve corresponder à ordem dos campos Estrutura MqlRates. Mas a ordem dos valores na máscara rates_mask não importa, a máscara poderia ser assim:

    COPY_RATES_VOLUME_REAL|COPY_RATES_TIME|COPY_RATES_CLOSE

    Exemplo

    //--- input parameters
    input datetime InpDateFrom=D'2022.01.01 00:00:00';
    input datetime InpDateTo  =D'2023.01.01 00:00:00';
    input uint     InpCount   =20;
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart(void)
      {
    //--- obtemos séries temporais a partir da estrutura de preços Rates
       double   open[];
       double   close[];
       float    closef[];
       datetime time1[], time2[];
    //--- solicitamos os preços de fechamento em uma matriz do tipo double
       ResetLastError();
       int res1=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount,
                           COPY_RATES_TIME|COPY_RATES_CLOSE, time1, close);
       PrintFormat("1. CopySeries  returns %d values. Error code=%d", res1, GetLastError());
       ArrayPrint(close);
       
    
    //--- agora pedimos mais preços de abertura e fechamento em uma série de preços do tipo float
       ResetLastError();
       int res2=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount,
                           COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_OPEN, time2, open, closef);
       PrintFormat("2. CopySeries  returns %d values. Error code=%d", res2, GetLastError());
       ArrayPrint(closef);
    //--- comparamos os dados
       if((res1==res2) && (time1[0]==time2[0]))
         {
          Print("  | Time             |    Open      | Close double | Close float |");
          for(int i=0; i<10; i++)
            {
             PrintFormat("%d | %s |   %.5f    |   %.5f    |   %.5f   |",
                         i, TimeToString(time1[i]), open[i], close[i], closef[i]);
            }
         }
    /*  Resultado
            1. CopySeries  returns 0 values. Error code=0
            [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604
            [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247
            2. CopySeries  returns 0 values. Error code=0
            [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604
            [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247
              | Time             |    Open      | Close double | Close float |
            0 | 2023.03.01 17:00 |   1.06660    |   1.06722    |   1.06722   |
            1 | 2023.03.01 18:00 |   1.06722    |   1.06733    |   1.06733   |
            2 | 2023.03.01 19:00 |   1.06734    |   1.06653    |   1.06653   |
            3 | 2023.03.01 20:00 |   1.06654    |   1.06520    |   1.06520   |
            4 | 2023.03.01 21:00 |   1.06520    |   1.06573    |   1.06573   |
            5 | 2023.03.01 22:00 |   1.06572    |   1.06649    |   1.06649   |
            6 | 2023.03.01 23:00 |   1.06649    |   1.06694    |   1.06694   |
            7 | 2023.03.02 00:00 |   1.06683    |   1.06675    |   1.06675   |
            8 | 2023.03.02 01:00 |   1.06675    |   1.06684    |   1.06684   |
            9 | 2023.03.02 02:00 |   1.06687    |   1.06604    |   1.06604   |
    */
      }
  5. Corrigido um bug que, em casos raros, resultava no recebimento de um bilhete de ordem incorreto após o envio de uma solicitação pela função OrderSend. O erro pode ocorrer durante a negociação paralela na mesma conta por meio de diferentes plataformas.
  6. Corrigido bug com importação de bibliotecas EX5. Antes acontecia se o nome da biblioteca importada correspondia ao nome do arquivo para o qual ela era importada.

MetaEditor

  1. Adicionado envio de notificações push para participantes de projetos de grupo. Agora cada participante estará sempre ciente de qualquer alteração nos arquivos ou nas configurações do projeto. Para receber notificações, especifique seu ID MetaQuotes na seção "Configurações > Segurança" do seu perfil na MQL5.community.


    Notificações push sobre mudanças no projeto


  2. Icones de arquivo atualizados no Navegador. Metáforas novas e mais simples tornam as informações mais fáceis de entender.

Tester

  1. Corrigido um erro que fazia com que o parâmetro de string de entrada fosse truncado quando contia o caratere "|".

MetaTrader 5 WebTerminal, build 3620

  1. Adicionados vários esquemas de cores prontos para a interface, que afetam a exibição de barras e linhas no gráfico, os preços na Observação do Mercado e os indicadores financeiros da conta. Nossos designers selecionaram combinações de cores confortáveis, levando em consideração os desejos dos traders, para que possam escolher o esquema que melhor atenda às suas necessidades e preferências.


    Novos esquemas de cores para o terminal web


  2. Redesenhamos a janela de especificação do instrumento de negociação. Todos os dados são reempacotados em blocos lógicos compactos para facilitar a visualização.


    Janela de especificação do instrumento de negociação atualizada


  3. Corrigida a abertura de contas reais via terminal web. Em alguns casos, após preencher o formulário de registro, o servidor podia retornar um erro.
  4. Corrigido um erro na caixa de diálogo de negociação. Se o usuário abria a caixa de diálogo de modificação de posição e depois fechava a posição com o botão "X" na janela de instrumentos, o conteúdo da caixa de diálogo não era redefinido. Agora, a caixa de diálogo retorna automaticamente ao modo de colocação de novo pedido.
  5. Corrigida a exibição do campo Server na caixa de diálogo de gerenciamento de contas.
  6. Corrigida a exibição do período atual na barra de ferramentas.
  7. Corrigida a exibição de volume no número de unidades do ativo subjacente na caixa de diálogo de negociação.
  8. Corrigida a modificação dos níveis "Stop Loss" e "Take Profit". Em alguns casos, modificar um valor podia redefinir o segundo.
  9. Corrigida a exibição do aviso de risco do investidor.
6 março 2023
Nova versão do MetaTrader 5 para iPhone/iPad: melhoria das funções de negociação e de análise dos gráficos
  1. Adicionada a capacidade de colocar ordens stop e stop-limit no gráfico.

    Agora você não está limitado apenas a colocar ordens restritas. Selecione o tipo de ordem pendente desejada pressionando logo o botão correspondente no painel inferior do gráfico.


    Colocar stop e stop limit no gráfico


  2. Adicionada a capacidade de fechar posições e excluir ordens pendentes do gráfico. Selecione o ícone de posição ou nível de ordem no gráfico e o comando correspondente aparecerá no painel de negociação inferior:


    Gerenciar posições e ordens via gráfico


  3. Melhorada a função de deslocamento da borda direita do gráfico de preços. Agora, para alterar o deslocamento, basta rolar o gráfico até o último preço até que apareça um separador vertical. Em seguida, é necessário arrastar o triângulo na escala inferior do gráfico:


    Altere o recuo do gráfico arrastando o triângulo da escala inferior


  4. Adicionada a capacidade de copiar objetos analíticos no gráfico, para facilitar a marcação. Chame o menu do objeto pressionando-o longamente e selecione "Copiar":

    Criar cópias de objetos analíticos


  5. Adicionada a capacidade de controlar a exibição de indicadores em diferentes períodos gráficos. Se o indicador não for adequado para determinados períodos gráfico, ele pode ser ocultado para liberar espaço na tela para outras ferramentas analíticas.


    Controle a exibição de indicadores em diferentes períodos


  6. Adicionada exibição de comissões do instrumento na janela de especificação.


    Saiba a taxa de comissão na especificação do instrumento


  7. Adicionado um link para redefinir a senha da sua conta. O acesso só pode ser restaurado através da corretora com o qual a conta foi aberta. O link mostra detalhes de contato onde você pode obter ajuda.


    Ajuda com recuperação de senha


  8. Adicionada a capacidade de compartilhar links para o canal na MQL5.community.


    Compartilhe um link para seu canal via aplicativo


  9. Aprimorada a experiência do usuário ao se conectar a uma conta de negociação restrita.

    A negociação na conta pode ser limitada por diversos motivos, como a conexão com a conta no modo investidor, falta de aceitação de acordos, verificação pendente com a corretora, entre outros. Isso pode levar o usuário a não compreender por que as funções de negociação não estão disponíveis no aplicativo.

    Agora, nesses casos, um botão cinza para fazer um novo pedido será exibido na seção "Negociação". Ao clicar nele, o usuário verá informações e recomendações relevantes.


    Ajude o usuário com negociação restrita


  10. Aprimorado o manuseio de certificados SSL usados na autenticação estendida.

    Agora, ao se conectar a uma conta que utiliza autenticação avançada, o usuário recebe uma breve descrição das ações necessárias.


    Trabalho aprimorado com certificados SSL


    Também é possível importar um certificado de um arquivo PFX. Para isso, salve-o no aplicativo e, em seguida, utilize a função de importação disponível na caixa de diálogo inicial.

    Além disso, agora é possível exportar certificados para arquivos e usá-los em outros dispositivos. Para isso, acesse "Configurações > Certificados" e clique em "Exportar" no menu de certificados.

  11. A construção de tabelas de preços foi adaptada para Metal, a última geração da API gráfica usada em dispositivos Apple. Isso trará um significativo aumento de desempenho ao exibir gráficos, indicadores e objetos.
  12. Corrigida a substituição dos níveis de Stop Loss e Take Profit no livro de ofertas. A partir de agora, em contas que operam no modo FIFO, os níveis de stop serão automaticamente definidos de acordo com os níveis de stop das posições já abertas para o mesmo instrumento. Isso é necessário para cumprir a regra FIFO.
  13. Corrigida a recotação. Agora, ao receber uma nova cotação, o usuário terá um breve período de tempo para decidir se aceita ou não os novos preços. Se não houver solução, a solicitação é automaticamente rejeitada e a janela de nova cotação é fechada.
  14. Corrigida exibição de tempo na seção "Gráfico" ao usar o tema de interface escura.
16 dezembro 2022
MetaTrader 5 build 3550: melhorias e correções

Terminal

  1. Terminal: atualizadas traduções da interface do usuário.
  2. Correções de crash-logs.

WebTerminal

9 dezembro 2022
MetaTrader 5 build 3540: Autenticação 2FA/TOTP e Observação do Mercado aprimorada no terminal web

WebTerminal

  1. Adicionado suporte para autenticação 2FA/TOTP usando o Google Authenticator e aplicativos similares.

    A utilização de autenticação de dois fatores lhe permite proteger ainda mais sua conta de negociação contra o acesso não autorizado, mesmo que seu nome de utilizador e palavra-passe permanente sejam divulgados. Existem muitos aplicativos móveis que permitem a autenticação em duas etapas usando o algoritmo Time-based One-time Password Algorithm (TOTP) Entre os mais conhecidos estão Google Authenticator, Microsoft Authenticator, LastPass Authenticator e Authy. Agora, o terminal cliente MetaTrader 5 permite logar usando senhas únicas obtidas desse tipo de aplicativos Authenticator.

    Para ativar a autenticação em duas etapas, primeiro faça login no terminal cliente MetaTrader 5 da forma habitual. Em seguida, clique na sua conta no menu e selecione "Ativar 2FA/TOTP" na caixa de diálogo que se abre. Inicie o Authenticator em seu telefone celular, pressione o botão "+" nele para adicionar sua conta de negociação e ler o código QR a partir do terminal. Digite o código recebido no campo "Senha única" e clique em "Ativar 2FA", assim o sigilo de sua conta será adicionado ao servidor de negociação da corretora.


    Adicionado suporte para autenticação 2FA/TOTP usando o Google Authenticator e outros aplicativos semelhantes


    O código salvo agora será usado no aplicativo Authenticator para gerar uma senha OTP para cada conexão posterior. Cada senha é válida durante 30 segundos, depois é gerada uma nova.


    Uma senha OTP adicional proveniente do aplicativo Authenticator é agora necessária para entrar na sua conta de negociação


    Um código de backup também é exibido na caixa de diálogo com o código QR para vincular ao gerador, mantenha-o em um local seguro. Se você perder o acesso ao seu dispositivo vinculado, isso permitirá que você adicione novamente sua conta ao aplicativo Authenticator.

    Se você decidir remover o código guardado do aplicativo Authenticator, primeiro desabilite o uso da autenticação 2FA/TOTP usando o devido comando no menu de contexto de conta. Se a autenticação 2FA/TOTP não estiver disponível na sua conta, peça à sua corretora para ativar esta opção.

  2. Expandida a quantidade de informações exibidas na Observação do Mercado. Agora, além dos preços Bid/Ask atuais e a porcentagem de variação de preço, você pode ver:

    • Preço Bid/Ask máximo e mínimo para o pregão atual
    • Preços de abertura dos preços atuais e de fechamento do pregão anterior

    Para personalizar as informações exibidas, use o menu de contexto:


    Mais informações na Observação do Mercado


  3. Adicionada exibição de uma notificação de risco quando a configuração correspondente é habilitada no lado da corretora. Alguns reguladores exigem que o comerciante leia e aceite a notificação antes de negociar.
  4. Corrigida a exibição da barra de ferramentas superior nos modelos de iPhone com um entalhe na parte superior da tela. Em alguns casos, ela podia cobrir os botões do painel.
  5. Corrigida a exibição dos indicadores financeiros finais da conta (lucro, patrimônio, etc.) no navegador Google Chrome. Em alguns casos, os valores podiam não ser atualizados.

Terminal

  1. Ootimizada e acelerada a abertura da caixa de diálogo para criar contas demo.
  2. Atualizadas traduções da interface do usuário.
  3. Correções de crash-logs.

MQL5

  1. Adicionados novos métodos à classe COpenCL da biblioteca padrão:

    • BufferFromMatrix - preenchimento do buffer do dispositivo com dados da matriz
    • BufferToMatrix - leitura de dados desde o buffer do dispositivo em uma matriz
    • ContextCreate - criação do contexto do dispositivo (primeira parte do método Initialize)
    • ProgramCreate - criação de um programa baseado em código-fonte OpenCL (segunda parte do método Initialize)
    • ContextClean - liberação de todos os dados pertencentes ao contexto do dispositivo (semelhante ao método Shutdown, mas sem remover o contexto)
    • GetDeviceInfoInteger - recepção de uma propriedade inteira do dispositivo
    • GetKernelInfoInteger — recepção de uma propriedade inteira do kernel
    • GetDeviceInfo - recepção de qualquer propriedade inteira única do dispositivo não presente na enumeração ENUM_OPENCL_PROPERTY_INTEGER

    Exemplo de uso de GetDeviceInfo:
    longo preferido_workgroup_size_multiple=OpenCL.GetDeviceInfo(0x1067);
  2. Adicionados os valores TERMINAL_CPU_NAME e TERMINAL_OS_VERSION à enumeração ENUM_TERMINAL_INFO_STRING. Eles permitem que você obtenha o nome do processador e sistema operacional do usuário.
    void OnStart()
      {
       string cpu,os;
    //---
       cpu=TerminalInfoString(TERMINAL_CPU_NAME);
       os=TerminalInfoString(TERMINAL_OS_VERSION);
       PrintFormat("CPU: %s, OS: %s",cpu,os);
      }
    
    Resultado:
    CPU: Intel Xeon E5-2630 v4 @ 2,20 GHz, SO: Windows 10 build 19045
  3. Corrigido o parâmetro "table_or_sql" nas funções DatabasePrint e DatabaseExport. Agora você pode passar nele o nome da tabela e não apenas a consulta SQL.

MetaEditor

  1. Corrigida a verificação do número máximo de colunas no banco de dados que podem ser exibidas. Agora você pode exibir até 64 colunas.
  2. Corrigido o trabalho de pontos de interrupção em construções curtas como IF[ if(cond) break; ].
25 novembro 2022
MetaTrader 5 build 3520: adicionada autenticação 2FA/TOTP com o Google Authenticator

Terminal

  1. Adicionado suporte para autenticação 2FA/TOTP usando o Google Authenticator e aplicações similares.

    A utilização de autenticação de dois fatores lhe permite proteger ainda mais a sua conta de negociação contra o acesso não autorizado, mesmo que o seu nome de utilizador e palavra-passe permanente sejam divulgados. Existem muitos aplicativos móveis que permitem a autenticação em duas etapas usando o algoritmo time-based one-time password. Entre os mais conhecidos estão Google Authenticator, Microsoft Authenticator, LastPass Authenticator e Authy. Agora, o terminal cliente MetaTrader 5 permite logar usando senhas únicas obtidas desse tipo de aplicativos Authenticator.

    Para ativar a autenticação em duas etapas, primeiro faça login no terminal cliente MetaTrader 5 da forma habitual. Em seguida, clique com o botão direito do mouse na conta de negociação para abrir o menu e selecione "Permitir 2FA/TOTP". Inicie o Authenticator em seu telefone celular, pressione o botão "+" nele para adicionar sua conta de negociação e escanear o código QR a partir do terminal. Digite o código recebido no campo "One-time password" e clique em "Enable 2FA" - o sigilo de sua conta será adicionado ao servidor de negociação da corretora.


    Adicionado suporte para autenticação 2FA/TOTP usando o Google Authenticator e aplicativos similares.

    O código salvo agora será usado no aplicativo Authenticator para gerar uma senha OTP para cada conexão posterior. Cada senha é válida durante 30 segundos, depois é gerada uma nova.



    Uma senha OTP adicional proveniente do aplicativo Authenticator é agora necessária para entrar na sua conta de negociação

    Se você decidir remover o código guardado do aplicativo Authenticator, primeiro desabilite o uso da autenticação 2FA/TOTP usando o devido comando do menu de contexto de conta. Se a autenticação 2FA/TOTP não estiver disponível na sua conta, peça à sua corretora para ativar esta opção.

MQL5

  1. Corrigido o funcionamento da função CopyTicks para instrumentos de negociação personalizados. Em alguns casos, ao trabalhar com símbolos personalizados, os ticks iniciais do pregão anterior eram devolvidos em vez dos dados solicitados.

  2. Adicionados novos valores à enumeração para obter informações sobre o último erro OpenCL, tais valores permitem obter o código de erro e a respectiva descrição.
    1. adicionado CL_LAST_ERROR (código 4094) à enumeração ENUM_OPENCL_PROPERTY_INTEGER 

      Para obter o último erro OpenCL através de CLGetInfoInteger, o parâmetro handle é ignorado, ou seja, não tem valor. Descrição de erros: https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS.
      No caso de um código de erro desconhecido, a string "unknown OpenCL error N" será retornada, sendo N o código de erro.

      Por exemplo:
      //--- primeiro parâmetro handle é ignorado quando o último código de erro é recebido
      int code = (int)CLGetInfoInteger(0,CL_LAST_ERROR);

    2. adicionado o valor CL_ERROR_DESCRIPTION (4093) à enumeração ENUM_OPENCL_PROPERTY_STRING.
      Uma descrição do erro OpenCL pode ser obtida usando CLGetInfoString. Descrição de erros: https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS.

      Ao utilizar CL_ERROR_DESCRIPTION como parâmetro handle, o código de erro deve ser passado para CLGetInfoString. Se CL_LAST_ERROR for passado em vez do código de erro, a função devolverá uma descrição do último erro.

      Por exemplo:
      //--- obter o código para o último erro OpenCL
      int    code = (int)CLGetInfoInteger(0,CL_LAST_ERROR);
      string desc; // для получения текстового описания ошибки
      
      //--- usamos o código de erro para obter uma descrição textual do erro
      if(!CLGetInfoString(code,CL_ERROR_DESCRIPTION,desc))
         desc = "cannot get OpenCL error description, " + (string)GetLastError();
      Print(desc);
      
      
      //--- para obter uma descrição do último erro OpenCL sem primeiro obter o código, passamos CL_LAST_ERROR  
      if(!CLGetInfoString(CL_LAST_ERROR,CL_ERROR_DESCRIPTION, desc))
         desc = "cannot get OpenCL error description, " + (string)GetLastError();
      Print(desc);
      Por enquanto, o nome da enumeração interna é dado como a descrição do erro, cuja decifração pode ser encontrada na página https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS. Por exemplo, se CL_INVALID_KERNEL_ARGS for recebido, a descrição para ele será "Returned when enqueuing a kernel when some kernel arguments have not been set or are invalid."

  3. Corrigido o funcionamento do método matrix::MatMul. Quando se trabalha com matrizes grandes, o terminal colidiria dependendo de determinados tamanhos.

Correções de crash-logs.
18 novembro 2022
MetaTrader 5 build 3510: melhorias no terminal web

MetaTrader 5 WebTerminal

  1. Na versão móvel, as operações de classificação e filtragem por profundidade foram adicionadas à seção de histórico de negociação. Para personalizar a exibição do histórico, use os comandos no painel superior:


    Versão móvel agora com configuração de exibição de histórico de negociação


    As operações podem ser ordenadas por parâmetros básicos: data, bilhete, símbolo, volume, etc.

  2. Acesso aprimorado às informações sobre suas contas de negociação.

    • Na versão desktop, os dados da conta atual no menu flutuante agora são clicáveis. Ao clicar na conta, você acessa seus detalhes.
    • Na versão móvel, a exibição da conta atual foi adicionada na seção "Configurações". Ao clicar na conta, você acessa seus detalhes.


    Acesso aprimorado aos dados da conta de negociação

  3. Corrigida a exibição do tipo de conta na janela de gerenciamento de contas.
  4. Corrigida a exibição de patrimônio e margem livre após atualizar a página do terminal web em navegadores móveis.
  5. Corrigida a exibição da barra inferior no navegador móvel Firefox.

Terminal

  1. Corrigido um bug no cálculo dos gráficos de saldo e capital líquido no relatório de negociação.

MQL5

  1. Modificado o comportamento de typename(expr). Agora a função retorna o tipo completo com modificadores e dimensões (para arrays):
    classe A
      {
      };
    
    void OnStart(void)
      {
       const A *const arr[][2][3]={};
       Print(typename(arr));
      }
    
    Resultado:
    "class A const * const [][2][3]"

Correções de crash-logs.
11 novembro 2022
MetaTrader 5 build 3500: melhorias e correções

Terminal

  1. Adicionado um novo comando para acessar o novo relatório de negociação ao menu de contexto das seções "Negociação" e "Histórico":


    O relatório de negociação inclui:
    • Indicadores de crescimento mensais na forma de gráfico e tabela
    • Gráfico de capital líquido
    • Gráfico de radar que permite avaliar rapidamente o estado da conta
    • Estatísticas de negociação por instrumento
    • Muitos indicadores complementares para análise de negociação

  2. Corrigido o cálculo do depósito inicial no relatório de negociação.
  3. Corrigida a configuração dos níveis "Stop Loss" e "Take Profit" ao usar painéis de negociação rápida no gráfico e no "Market Watch". Os níveis podem ser herdados erroneamente de posições abertas anteriormente, mesmo que não seja necessário (a funcionalidade é destinada a contas FIFO).
  4. Atualizadas traduções da interface do usuário.

MQL5

  1. Corrigido um erro do compilador que permitia acessar um campo de estrutura por uma string constante cujo valor era o nome do campo.
  2. MQL5: corrigida a verificação do estado de tecla com TerminalInfoInteger(TERMINAL_KEYSTATE_*).

Correções de crash-logs.

MetaTrader 5 WebTerminal build 3500

  1. Corrigido fechamento de posições ao receber uma recotação.
  2. Corrigida a reconexão com o servidor após maximizar uma janela do navegador que estava inativa há muito tempo.
  3. Corrigida exibição de fundos de crédito na conta.
  4. Muitas outras melhorias e correções.
4 novembro 2022
MetaTrader 5 build 3490: versão móvel do terminal web e novos métodos de matriz em MQL5

Versão móvel do terminal web

A nova versão do terminal web possui suporte total para dispositivos móveis. Agora sua interface se adapta automaticamente ao tamanho da tela, permitindo que os usuários trabalhem convenientemente na plataforma por meio de telefones e tablets com iOS e Android:

Novo terminal web com suporte para dispositivos móveis

Além disso, muitas correções e melhorias foram feitas no terminal web.

Novo terminal web MetaTrader 5 suporta todos os recursos que um trader moderno precisa. O aplicativo permite:

  • Trabalhar com contas demo e reais
  • Receber cotações de quaisquer instrumentos financeiros
  • Negociar em qualquer mercado
  • Realizar análises técnicas de cotações usando mais de 30 indicadores e 20 objetos gráficos
  • Analisar dados do Calendário Econômico

Terminal

  1. As funções do gerenciador de tarefas foram expandidas. Agora ele facilita o rastreio de recursos consumidos com ainda mais precisão.
    • Adicionada exibição do tamanho da pilha para fluxos
    • Adicionada a exibição de quantidade de chaveamentos
    • Adicionado reconhecimento de threads do sistema e threads em DLLs de terceiros
    • Adicionada exibição do tempo de operação no modo kernel. Um aumento neste indicador em relação ao tempo gasto no modo de usuário pode indicar problemas no sistema: problemas nos drivers, erros de hardware, hardware lento. Leia mais na documentação da Microsoft.
    • Adicionada exibição do tempo de operação no modo de usuário.

    Gerenciador OpenCL para gerenciar dispositivos disponíveis


  2. A guia OpenCL foi adicionada às configurações do terminal para gerenciar os dispositivos disponíveis. O novo gerenciador OpenCL permite especificar explicitamente os dispositivos que serão usados para cálculos.

    Gerenciador OpenCL para gerenciar dispositivos disponíveis

  3. Adicionada a substituição dos níveis de Stop Loss e Take Profit no livro de ofertas para contas que operam no modo FIFO (pode ser ativado no lado da corretora).

    O modo FIFO implica que as posições de cada instrumento devem ser fechadas na ordem em que foram abertas. Para garantir que as posições de fechamento por meio de níveis de stop estejam sempre em conformidade com a regra FIFO, no lado do terminal do cliente é implementada a seguinte lógica:

    Se houver várias posições para o mesmo instrumento, o posicionamento de níveis de stop para qualquer um deles resultará no posicionamento de níveis de stop similares para todos os outros. Assim, quando o nível for acionado, todas as posições serão fechadas em ordem de acordo com a regra FIFO.

    Agora, ao abrir o livro de ofertas para um instrumento que já possui posições, os níveis das posições existentes (se houver) serão inseridos automaticamente nos campos Stop Loss e Take Profit.

  4. Corrigida a exclusão dos níveis Stop Loss e Take Profit usando os botões "X" na seção "Caixa de Ferramentas\Negociação". O erro ocorria quando a função de negociação rápida era desativada. Agora, quando o botão for pressionado, uma caixa de diálogo de negociação será aberta com o valor vazio do nível correspondente.

  5. Feitas alterações no relatório de negociaçãorelatório de negociação - as legendas nos gráficos e o cálculo da comissão final foram corrigidos. Além disso, em alguns casos, o Profit incorreto era mostrado nas estatísticas do relatório, bem como valores incorretos nas dicas de ferramentas ao passar o mouse sobre os gráficos de patrimônio liquido e saldo.

MQL5

  1. Adicionados métodos vetoriais e matriciais CopyTicks e CopyTicksRange. Eles facilitam a cópia de matrizes de dados de ticks para vetores e matrizes.
    bool matrix::CopyTicks(string symbol,uint flags,ulong from_msc,uint count);
    bool vector::CopyTicks(string symbol,uint flags,ulong from_msc,uint count);
    
    bool matrix::CopyTicksRange(string symbol,uint flags,ulong from_msc,ulong to_msc);
    bool matrix::CopyTicksRange(string symbol,uint flags,ulong from_msc,ulong to_msc);
    O tipo de dados a ser copiado é especificado no parâmetro flags usando a enumeração ENUM_COPY_TICKS. Estão disponíveis os seguintes valores:
    COPY_TICKS_INFO    = 1,       // ticks causados por mudanças em Bid e/ou Ask
    COPY_TICKS_TRADE   = 2,       // ticks causados por mudanças em Last e Volume
    COPY_TICKS_ALL     = 3,       // ticks com alterações
    COPY_TICKS_TIME_MS = 1<<8,    // tempo em milissegundos
    COPY_TICKS_BID     = 1<<9,    // preço Bid
    COPY_TICKS_ASK     = 1<<10,   // preço Ask
    COPY_TICKS_LAST    = 1<<11,   // preço Last
    COPY_TICKS_VOLUME  = 1<<12,   // volume
    COPY_TICKS_FLAGS   = 1<<13,   // sinalizadores de tick
    Quando vários tipos de dados são selecionados (disponível apenas para matrizes), a ordem das linhas na matriz corresponderá à ordem dos valores na enumeração.

  2. Expandidos os recursos dos métodos matrix::Assign e vector::Assign.

    Agora, um array ou vetor unidimensional pode ser atribuído à matriz:
    bool matrix::Assign(const vector &vec);
    O resultado será uma matriz de uma linha.

    Além disso, uma matriz agora pode ser atribuída a um vetor (com suavização da matriz):
    bool vector::Assign(const matrix &mat);
  3. Adicionados métodos de Swap para vetores e matrizes.
    bool vector::Swap(vector &vec);
    bool vector::Swap(matrix &vec);
    bool vector::Swap(double &arr[]);
    bool matrix::Swap(vector &vec);
    bool matrix::Swap(matrix &vec);
    bool matrix::Swap(double &arr[]);
    Cada array, vetor ou matriz aponta para um buffer de memória que contém os elementos de dado objeto. O método Swap realmente troca de lugar os ponteiros para esses buffers sem gravar os elementos na memória. Desse modo, a matriz continua sendo uma matriz e o vetor continua sendo um vetor. Quando você troca uma matriz e um vetor, obtém uma matriz de uma linha com elementos vetoriais e um vetor com elementos de matriz em uma representação plana (consulte o método Flat).
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //---
      matrix a= {{1, 2, 3}, {4, 5, 6}};
      Print("a before Swap: \n", a);
      matrix b= {{5, 10, 15, 20}, {25, 30, 35, 40}, {45, 50, 55, 60}};
      Print("b before Swap: \n", b);  
    //--- swap matrix pointers
      a.Swap(b);
      Print("a after Swap: \n", a);
      Print("b after Swap: \n", b);
      /*
      a before Swap:
      [[1,2,3]
      [4,5,6]]
      b before Swap:
      [[5,10,15,20]
      [25,30,35,40]
      [45,50,55,60]]
      
      a after Swap:
      [[5,10,15,20]
      [25,30,35,40]
      [45,50,55,60]]
      b after Swap:
      [[1,2,3]
      [4,5,6]]
      */
      vector v=vector::Full(10, 7);
      Print("v before Swap: \n", v);
      Print("b before Swap: \n", b);
      v.Swap(b);
      Print("v after Swap: \n", v);
      Print("b after Swap: \n", b);
      /*
      v before Swap:
      [7,7,7,7,7,7,7,7,7,7]
      b before Swap:
      [[1,2,3]
      [4,5,6]]
      
      v after Swap:
      [1,2,3,4,5,6]
      b after Swap:
      [[7,7,7,7,7,7,7,7,7,7]]
      */
     }
    O método Swap também permite trabalhar com arrays dinâmicos (um array de tamanho fixo que não pode ser passado como parâmetro). Neste caso, a matriz pode ser de qualquer dimensão, mas de um tamanho acordado. Isso significa que o tamanho total de uma matriz ou vetor deve ser um múltiplo da dimensão zero da matriz. A dimensão zero de uma matriz é o número de elementos contidos no primeiro índice da matriz. Por exemplo, para um array tridimensional dinâmico double array[][2][3], a dimensão zero será o produto dos tamanhos da segunda e da terceira dimensão, ou seja, 2x3=6. Isso significa que tal array só pode ser usado no método Swap com matrizes e vetores cujo tamanho total seja múltiplo de 6: 6, 12, 18, 24, etc.

    Vamos mostrar isso com um exemplo:
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //--- preenchemos a matriz 1x10 com o valor 7,0
      matrix m= matrix::Full(1, 10, 7.0);
      Print("matrix before Swap:\n", m);
    //--- tentamos realizar um intercâmbio entre uma matriz e um array
      double array_small[2][5]= {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}};
      Print("array_small before Swap:");
      ArrayPrint(array_small);
      if(m.Swap(array_small))
       {
        Print("array_small after Swap:");
        ArrayPrint(array_small);
        Print("matrix after Swap: \n", m);
       }
      else // o tamanho da matriz não é um múltiplo do tamanho da primeira dimensão do array
       {
        Print("m.Swap(array_small) failed. Error ", GetLastError());
       }
      /*
      matrix before Swap:
      [[7,7,7,7,7,7,7,7,7,7]]
      array_small before Swap:
               [,0]     [,1]     [,2]     [,3]     [,4]
      [0,]  1.00000  2.00000  3.00000  4.00000  5.00000
      [1,]  6.00000  7.00000  8.00000  9.00000 10.00000
      m.Swap(array_small) failed. Error 4006
      */
    //--- pegamos uma matriz maior e tentamos a realizar o intercâmbio novamente
      double array_static[3][10]= {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
         {2, 4, 6, 8, 10, 12, 14, 16, 18, 20},
         {3, 6, 9, 12, 15, 18, 21, 24, 27, 30}
       };
      Print("array_static before Swap:");
      ArrayPrint(array_static);
      if(m.Swap(array_static))
       {
        Print("array_static after Swap:");
        ArrayPrint(array_static);
        Print("matrix after Swap: \n", m);
       }
      else // um array estático não pode ser usado para troca com uma matriz
       {
        Print("m.Swap(array_static) failed. Error ", GetLastError());
       }
      /*
      array_static before Swap:
             [,0]     [,1]     [,2]     [,3]     [,4]     [,5]     [,6]     [,7]     [,8]     [,9]
      [0,]  1.00000  2.00000  3.00000  4.00000  5.00000  6.00000  7.00000  8.00000  9.00000 10.00000
      [1,]  2.00000  4.00000  6.00000  8.00000 10.00000 12.00000 14.00000 16.00000 18.00000 20.00000
      [2,]  3.00000  6.00000  9.00000 12.00000 15.00000 18.00000 21.00000 24.00000 27.00000 30.00000
      m.Swap(array_static) failed. Error 4006
      */
    //--- outra tentativa de trocar um array e uma matriz
      double array_dynamic[][10];    // array dinâmico
      ArrayResize(array_dynamic, 3); // colocamos o tamanho da primeira dimensão
      ArrayCopy(array_dynamic, array_static);
    //--- agora usamos um array dinâmico para realizar o intercâmbio
      if(m.Swap(array_dynamic))
       {
        Print("array_dynamic after Swap:");
        ArrayPrint(array_dynamic);
        Print("matrix after Swap: \n", m);
       }
      else //  não há erros
       {
        Print("m.Swap(array_dynamic) failed. Error ", GetLastError());
       }
      /*
      array_dynamic after Swap:
            [,0]    [,1]    [,2]    [,3]    [,4]    [,5]    [,6]    [,7]    [,8]    [,9]
      [0,] 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000
      matrix after Swap:
      [[1,2,3,4,5,6,7,8,9,10,2,4,6,8,10,12,14,16,18,20,3,6,9,12,15,18,21,24,27,30]]
      */
     }
  4. Adicionados métodos LossGradient para vetores e matrizes. Este método calcula um vetor ou matriz de derivadas parciais da função de perda em relação aos valores previstos. Na álgebra linear, esse vetor é chamado de gradiente e é usado no aprendizado de máquina.
    vector vector::LossGradient(const vector &expected,ENUM_LOSS_FUNCTION loss) const;
    matrix matrix::LossGradient(const matrix &expected,ENUM_LOSS_FUNCTION loss) const;
  5. Habilitado o uso de FOREIGN KEYS no SQLite, o que permite construir relacionamentos entre tabelas em consultas SQL.   Por exemplo:
    CREATE TABLE artist(
      artistid    INTEGER PRIMARY KEY, 
      artistname  TEXT
    );
    
    CREATE TABLE track(
      trackid     INTEGER, 
      trackname   TEXT, 
      trackartist INTEGER,
      FOREIGN KEY(trackartist) REFERENCES artist(artistid)
    );

  6. Corrigida a seleção do método de classe necessário dependendo da constância do método e do objeto.

MetaEditor

  1. O tamanho do comentário com suporte foi aumentado para commits para MQL5 Storage.  Comentários detalhados ao enviar alterações ao repositório são considerados uma boa prática ao trabalhar em grandes projetos, mas essas mensagens eram anteriormente limitadas a 128 caracteres. O limite agora está definido para 260 caracteres.

MetaTester

  1. Maior sensibilidade do interruptor de velocidade de teste no modo visual.

Correções de crash-logs.


17 setembro 2022
MetaTrader 5 build 3440: Novo relatório sobre a conta de negociação

Terminal

  1. Adicionado um novo relatório de histórico de negociação de conta. Em termos de parâmetros e apresentação de informações, é semelhante aos já conhecidos relatórios de Sinais. Agora na própria plataforma você terá acesso a:
    • Indicadores de crescimento mensais na forma de gráfico e tabela
    • Gráfico de capital líquido
    • Gráfico de radar que permite avaliar rapidamente o estado da conta
    • Estatísticas de negociação por instrumento
    • Muitos indicadores adicionais para análise de negociação

    O relatório agora pode ser visualizado diretamente na plataforma sem antes exportá-lo para um arquivo. Para abri-lo, clique em "Relatórios" no menu "Exibir".




  2. Corrigido o preenchimento do quadro de opções quando o número ou tipo de instrumento não coincide entre os contratos Call e Put.
  3. Corrigida a seleção de posição na caixa de diálogo de negociação ao fechar uma posição com uma oposta. Ocorria um erro ao classificar ordens opostas disponíveis por qualquer coluna que não seja o ticket.
  4. Acelerada a exibição de entradas para o log da plataforma.
  5. Corrigida a exibição de comentários em gráficos de símbolos personalizados.

MQL5

  1. Corrigido o trabalho da função CArrayList::LastIndexOf. Anteriormente, sempre retornava -1 em vez do índice do último elemento encontrado.
  2. Adicionado método de atribuição de vetores e matrizes. Ele permite que você substitua o conteúdo de uma matriz/vetor pelos dados da matriz/vetor ou array passado.
    bool vector<TDst>::Assign(const vector<TSrc> &assign);
    bool matrix<TDst>::Assign(const matrix<TSrc> &assign);
    
    Por exemplo:
      //--- copying matrices
      matrix b={};
      matrix a=b;
      a.Assign(b);
      
      //--- copying an array to a matrix
      double arr[5][5]={{1,2},{3,4},{5,6}};
      Print("array arr");
      ArrayPrint(arr);
      b.Assign(arr);
      Print("matrix b \n",b);
    /*
    array arr
            [,0]    [,1]    [,2]    [,3]    [,4]
    [0,] 1.00000 2.00000 0.00000 0.00000 0.00000
    [1,] 3.00000 4.00000 0.00000 0.00000 0.00000
    [2,] 5.00000 6.00000 0.00000 0.00000 0.00000
    [3,] 0.00000 0.00000 0.00000 0.00000 0.00000
    [4,] 0.00000 0.00000 0.00000 0.00000 0.00000
    matrix b 
    [[1,2,0,0,0]
     [3,4,0,0,0]
     [5,6,0,0,0]
     [0,0,0,0,0]
     [0,0,0,0,0]]
    
    */
  3. Adicionado método de vetores e matrizes CopyRates. Ele permite que você copie facilmente matrizes de dados de preços em vetores e matrizes.
    bool matrix::CopyRates(string symbol,ENUM_TIMEFRAMES period,ulong rates_mask,ulong from,ulong count);
    bool vector::CopyRates(string symbol,ENUM_TIMEFRAMES period,ulong rates_mask,ulong from,ulong count);
    O tipo de dados a ser copiado é especificado no parâmetro rates_mask usando a enumeração ENUM_COPY_RATES. Estão disponíveis os seguintes valores:
    COPY_RATES_OPEN
    COPY_RATES_HIGH
    COPY_RATES_LOW
    COPY_RATES_CLOSE
    COPY_RATES_TIME
    COPY_RATES_VOLUME_TICK
    COPY_RATES_VOLUME_REAL
    COPY_RATES_SPREAD
    COPY_RATES_OHLC
    COPY_RATES_OHLCT
    Os dois últimos valores se destinam à seleção conveniente de vários parâmetros da barra principal de uma só vez - preços Open, High, Low, Close e horário.

    Quando vários tipos de dados são selecionados (disponível apenas para matrizes), a ordem das linhas na matriz corresponderá à ordem dos valores na enumeração.

  4. Corrigida a exibição de objetos "Rótulo de texto". Ao usar as propriedades OBJPROP_XOFFSET e OBJPROP_YOFFSET, um fragmento de imagem incorreto pode ser exibido no gráfico.

  5. Corrigido o erro de alteração em um parâmetro constante passado para uma função como referência a um ponteiro de objeto.

    Lembre-se de que o especificador const declara variável constante e não permite alterar o valor desta variável durante a execução do programa. Apenas uma vez permitida a inicialização da variável quando ela é declarada. Exemplo de variáveis constantes na função OnCalculate:

    int OnCalculate (const int rates_total,      // price[] array size
                     const int prev_calculated,  // bars processed on previous call
                     const int begin,            // meaningful data starts at
                     const double& price[]       // array for calculation
       );
    

    Mas no exemplo abaixo, houve um erro do compilador que permitia a conversão implícita de ponteiro para parâmetros de referência:

    class A {};
    const A *a = new A;
    
    void foo( const A*& b )
      {
       b = a;
      }
    
    void OnStart()
      {
            A *b; 
            foo(b);  // não permitido
            Print( a,":",b );
      }
    Agora esta operação ilegal será detectada pelo compilador e gerará um erro.

MetaEditor

  1. Corrigida a exibição de referências a números complexos no depurador.
  2. Aprimorado desempenho do MQL5 Cloud Protector. Anteriormente, a proteção de arquivos podia falhar em casos raros.
  3. Correções de crash-logs.

Novo terminal web MetaTrader 5

Apresentamos um novo terminal web para o MetaTrader 5. Nós o fizemos moderno e rápido, atualizando não apenas o visual, mas também reescrevendo completamente o núcleo. Em termos de interface, o terminal web evoluiu de forma similar à já familiar versão iPad da plataforma:



Comparado com a versão antiga, tem muitos recursos novos:

  • Pedido de contas reais, preenchendo um formulário de registro detalhado e fornecendo documentos comprobatórios
  • Suporte para assinaturas de dados de preços e recepção de cotações com atraso
  • Mais objetos analíticos, gerenciamento mais conveniente
  • Exibição de entradas e saídas de mercado no gráfico
  • Visualização de eventos de calendário econômico
  • Configuração conveniente de instrumentos no Market Watch, visualização de alterações diárias de preços
  • A interface foi significativamente simplificada: o menu de contexto do gráfico e o menu superior foram removidos; todos os comandos para gerenciar o gráfico, objetos e indicadores sobrepostos foram colocados nos painéis à esquerda e superior; o resto dos comandos estão em um menu de hambúrguer
  • Tema da interface noturna
Experimente o novo terminal web no www.mql5.com agora mesmo. Suas corretoras o terão em breve.
4 agosto 2022
MetaTrader 5 build 3390: Float em OpenCL e funções matemáticas, métodos de ativação e perda para aprendizado de máquina

Terminal

  1. Adicionada a abertura automática de tutorial ao se conectar a uma conta de negociação pela primeira vez. Isso permite que os iniciantes dominem rapidamente os fundamentos da negociação e se familiarizem com os recursos da plataforma diretamente no terminal. O tutorial é dividido em várias seções, cada uma das quais fornece informações breves. O progresso de cada tópico a aprender é mostrado com uma linha azul.

    Atualizada a base de dados fundamental de instrumentos de negociação.

  2. Corrigido o erro das operações em massa "Fechar posições lucrativas/não lucrativas". Anteriormente, a plataforma usava posições opostas, se houvesse, para fechar as posições correspondentes. Por exemplo, se você tivesse duas posições de compra não lucrativas em EURUSD e uma posição de venda lucrativa em EURUSD, todas as três posições existentes seriam encerradas durante o fechamento em massa de posições não lucrativas. A compra e a venda seriam fechadas com uma operação de fechamento com a posição oposta, e a compra restante seria fechada com uma operação de fechamento normal. Agora as equipes trabalham conforme o planejado, fechando apenas posições selecionadas - lucrativas ou não lucrativas.
  3. Corrigida a exibição do histórico de preços para preços negativos em gráficos com período D1. Agora os gráficos com preços negativos são exibidos corretamente em todos os períodos gráficos.
  4. Otimizado e reduzido significativamente o consumo de recursos do sistema pelo terminal.
  5. O número de agregadores disponíveis para visualização de um instrumento de mercado foi ampliado para 15, o que permite encontrar informações sobre o número máximo de tickers nos agregadores econômicos mais populares.

    Atualizada a base de dados fundamental de instrumentos de negociação.

    Existem pelo menos 7.000 ações líquidas e mais de 2.000 ETFs listados no mercado global. Além disso, existem muitos futuros e outros derivativos. A plataforma MetaTrader 5 contém um enorme banco de dados de instrumentos bolsistas e também permite que você acesse o site do agregador em um clique e, assim, obtenha dados fundamentais diretamente do Market Watch. Para conforto dos investidores, oferecemos uma variedade de fontes de informação para cada título.

  6. Corrigida a substituição dos níveis de Stop Loss e Take Profit na janela para posicionar uma nova ordem. Agora, para contas operando no modo FIFO, os níveis de stop serão definidos automaticamente de acordo com os níveis de stop das posições já abertas para o mesmo instrumento. Isso é necessário para cumprir a regra FIFO.

MQL5

  1. : As funções matemáticas agora podem trabalhar com matrizes e vetores.

    Continuamos a expandir os recursos da plataforma MetaTrader 5 para negociação algorítmica e aprendizado de máquina. Anteriormente, adicionamos um novo tipo de dados, isto é, matrizes e vetores, que permitem abandonar o uso de matrizes para processamento de dados. Para trabalhar com ele, adicionamos mais de 70 métodos à linguagem MQL5 que permitem realizar cálculos de álgebra linear e estatística na forma de uma única operação. Agora multiplicação, transformação e solução de sistema de equações são feitas de forma simples e sem programação desnecessária. A adição de novos tipos não deixou de lado as funções matemáticas.

    As funções matemáticas foram originalmente projetadas para operações matemáticas em valores escalares. Agora, a maioria dessas funções pode ser usada com novos tipos de dados - matrizes e vetores - MathAbs, MathArccos, MathArcsin, MathArctan, MathCeil, MathCos, MathExp, MathFloor, MathLog, MathLog10, MathMod, MathPow, MathRound, MathSin, MathSqrt, MathTan, MathExpm1 , MathLog1p, MathArccosh, MathArcsinh, MathArctanh, MathCosh, MathSinh, MathTanh. Neste caso, a matriz ou vetor é processado termo a termo, por exemplo:
    //---
      matrix a= {{1, 4}, {9, 16}};
      Print("matrix a=\n",a);
    
      a=MathSqrt(a);
      Print("MatrSqrt(a)=\n",a);
      /*
       matrix a=
       [[1,4]
        [9,16]]
       MatrSqrt(a)=
       [[1,2]
        [3,4]]
      */
    No caso de MathMod e MathPow, um escalar, uma matriz ou um vetor de tamanho apropriado pode ser usado como segundo parâmetro.

    Vamos usar um exemplo para mostrar como calcular o desvio padrão usando funções matemáticas sobre um vetor.
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //--- используем инициализирующую функцию для заполнения вектора
      vector r(10, ArrayRandom); // массив случайных чисел от 0 до 1
    //--- вычислим среднее значение
      double avr=r.Mean();       // среднее значение массива
      vector d=r-avr;            // вычислим массив отклонений от среднего значения
      Print("avr(r)=", avr);
      Print("r=", r);
      Print("d=", d);
      vector s2=MathPow(d, 2);   // массив квадратов отклонений
      double sum=s2.Sum();       // сумма квадратов отклонений
    //--- вычислим стандартное отклонение 2-мя способами
      double std=MathSqrt(sum/r.Size());
      Print(" std(r)=", std);
      Print("r.Std()=", r.Std());    
     }
    /*
      avr(r)=0.5300302133243813
      r=[0.8346201971495713,0.8031556138798182,0.6696676534318063,0.05386516922513505,0.5491195410016175,0.8224433118686484,...
      d=[0.30458998382519,0.2731254005554369,0.1396374401074251,-0.4761650440992462,0.01908932767723626,0.2924130985442671, ...
       std(r)=0.2838269732183663
      r.Std()=0.2838269732183663
    */ 
    //+------------------------------------------------------------------+
    //| Заполняет вектор случайными значениями                           |
    //+------------------------------------------------------------------+
    void ArrayRandom(vector& v)
     {
      for(ulong i=0; i<v.Size(); i++)
        v[i]=double(MathRand())/32767.;
     }
    

  2. As funções de modelo agora podem usar as entradas matrix<double>, matrix<float>, vector<double>, vector<float> em vez dos tipos matrix, matrixf, vector, vectorf correspondentes.
  3. Aprimoradas as funções matemáticas para trabalhar com o tipo float. Devido ao surgimento da aplicação de funções matemáticas a matrizes e vetores flutuantes, as funções correspondentes aplicadas a escalares flutuantes também foram melhoradas. Anteriormente, os parâmetros dessas funções eram convertidos incondicionalmente no tipo double, a implementação correspondente da função matemática era chamada e, em seguida, o resultado era convertido no tipo float. Agora, no caso do tipo float, os parâmetros e resultados não são convertidos, pois são chamadas as implementações das funções matemáticas correspondentes ao tipo float.

    A diferença nos cálculos usando o exemplo de um seno matemático:

    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //---  массив случайных чисел от 0 до 1
      vector d(10, ArrayRandom);
      for(ulong i=0; i<d.Size(); i++)
       {
        double delta=MathSin(d[i])-MathSin((float)d[i]);
        Print(i,". delta=",delta);
       }
     }
    /*
       0. delta=5.198186103783087e-09
       1. delta=8.927621308885136e-09
       2. delta=2.131878673594656e-09
       3. delta=1.0228555918923021e-09
       4. delta=2.0585739779477308e-09
       5. delta=-4.199390279957527e-09
       6. delta=-1.3221741035351897e-08
       7. delta=-1.742922250969059e-09
       8. delta=-8.770715820283215e-10
       9. delta=-1.2543186267421902e-08
    */
    //+------------------------------------------------------------------+
    //| Заполняет вектор случайными значениями                           |
    //+------------------------------------------------------------------+
    void ArrayRandom(vector& v)
     {
      for(ulong i=0; i<v.Size(); i++)
        v[i]=double(MathRand())/32767.;
     }

  4. Adicionados métodos de matrizes e vetores Ativation (função de ativação) e Derivative (derivada da função de ativação) com parâmetros:
    AF_ELU               Exponential Linear Unit
    AF_EXP               Exponencial
    AF_GELU              Gaussian Error Linear Unit
    AF_HARD_SIGMOID      Hard Sigmoid
    AF_LINEAR            Linear
    AF_LRELU             Leaky REctified Linear Unit
    AF_RELU              REctified Linear Unit
    AF_SELU              Scaled Exponential Linear Unit
    AF_SIGMOID           Sigmoid
    AF_SOFTMAX           Softmax
    AF_SOFTPLUS          Softplus
    AF_SOFTSIGN          Softsign
    AF_SWISH             Swish
    AF_TANH              Hyperbolic Tangent
    AF_TRELU             Thresholded REctified Linear Unit
    Uma função de ativação em uma rede neural determina como a soma ponderada de um sinal de entrada é convertida no sinal de saída de um nó ou nós a nível da rede. A escolha da função de ativação tem um grande impacto nas capacidades e no desempenho da rede neural. Diferentes partes do modelo podem usar diferentes funções de ativação. A linguagem MQL5 implementa não apenas todas as funções de ativação conhecidas, mas também derivações da função de ativação. Funções derivadas são necessárias para calcular rapidamente a correção com base no erro recebido durante o treinamento da rede neural.
  5. Adicionado método de matrizes e vetores Loss (função de perda) com os seguintes parâmetros:
    LOSS_MSE            Mean Squared Error
    LOSS_MAE            Mean Absolute Error
    LOSS_CCE            Categorical Crossentropy
    LOSS_BCE            Binary Crossentropy
    LOSS_MAPE           Mean Absolute Percentage Error
    LOSS_MSLE           Mean Squared Logarithmic Error
    LOSS_KLD            Kullback-Leibler Divergence
    LOSS_COSINE         Cosine similarity/proximity
    LOSS_POISSON        Poisson
    LOSS_HINGE          Hinge
    LOSS_SQ_HINGE       Squared Hinge
    LOSS_CAT_HINGE      Categorical Hinge
    LOSS_LOG_COSH       Logarithm of the Hyperbolic Cosine
    LOSS_HUBER          Huber

    A função de perda é responsável por avaliar quão bem o modelo prevê o valor real. Construir um modelo é basicamente resolver o problema de minimizar o valor dessa função em cada estágio. Dependendo do tipo de dados, você precisa usar abordagens diferentes, ou seja, funções diferentes. A função de perda também pode depender de pesos e tendências variáveis. A função de perda é unidimensional e não é um vetor porque avalia o desempenho da rede neural como um todo.
  6. Adicionados métodos de matrizes e vetores matrix::CompareByDigits e vector::CompareByDigits. Eles comparam se dígitos significativos dos elementos de duas matrizes/vetores coincidem.

  7. Adicionado suporte a funções MathMin e MathMax para strings. Nesse caso, as funções usarão comparação lexicográfica, isto é, as letras são comparadas alfabeticamente e diferenciam maiúsculas de minúsculas.

  8. Aumentado o número máximo de objetos OpenCL de 256 para 65536. As CLContextCreate, CLBufferCreate e CLProgramCreate ajudam a criar identificadores para objetos OpenCL em programas MQL5. O limite anterior de 256 identificadores não permitia que você trabalhasse efetivamente em métodos de aprendizado de máquina.

  9. Permitido usar OpenCL em placas sem suporte para double. Anteriormente, os programas MQL5 usavam apenas GPUs com suporte para double, embora muitas tarefas permitissem e fossem projetadas para cálculos usando floats. O tipo float é inicialmente considerado nativo para computação paralela, pois ocupa menos espaço. Este requisito já foi removido.

    Se uma tarefa precisar usar apenas uma GPU com suporte para double, isso poderá ser especificado explicitamente ao chamar CLContextCreate usando o novo valor CL_USE_GPU_DOUBLE_ONLY (somente dispositivos que suportam cálculos com o tipo double podem ser usados).
       int cl_ctx;
    //--- инициализация OpenCL контекста
       if((cl_ctx=CLContextCreate(CL_USE_GPU_DOUBLE_ONLY))==INVALID_HANDLE)
         {
          Print("OpenCL not found");
          return;
         }

  10. Corrigido o trabalho da função CustomBookAdd. Anteriormente, se um valor zero fosse especificado no campo MqlBookInfo::volume_real, o devido instantâneo do livro de ofertas não era criado. Agora a verificação é feita assim:
    A exatidão dos dados transmitidos é verificada, sendo que o tipo, o preço e o volume devem ser indicados para cada elemento. Ao mesmo tempo, MqlBookInfo.volume e MqlBookInfo.volume_real não devem ser zero ou negativos: se ambos os volumes forem negativos, isso será considerado um erro. Você pode especificar qualquer um dos volumes ou ambos, pois é tomado o que é indicado ou positivo:

       volume=-1 && volume_real=2 — será usado volume_real=2,

       volume=3 && volume_real=0 — será usado volume=3.

    Volume com maior precisão MqlBookInfo.volume_real tem uma prioridade mais alta do que MqlBookInfo.volume normal. Se ambos os valores forem especificados para o elemento do livro de ofertas, será utilizado volume_real.

    Se pelo menos um elemento do livro de ofertas for descrito incorretamente, o sistema descartará completamente o estado transferido.

  11. Corrigida a operação da função CalendarValueLast. O bug era que, em alguns casos, chamadas sucessivas para a função após alterações no calendário econômico (o parâmetro de alteração recebia um novo valor após a chamada) podiam ignorar eventos ao usar o filtro de moeda.
    CalendarValueLast(change, result, "", "EUR")
  12. Corrigido o comportamento da função ArrayBSearch. Se houver vários elementos idênticos, será retornada uma referência ao primeiro e não, a um aleatório, como era antes.
  13. Corrigida a visibilidade de função de modelo em uma classe. O erro era que as funções do modelo de classe declaradas como private/protected acabavam sendo de fato public (public).

MetaEditor

  1. Corrigidos bugs e comportamento ambíguo MetaAssist.
  2. Adicionado suporte para a macro %terminal%, que significa o caminho para o diretório de dados da plataforma onde este terminal está instalado. Por exemplo, %terminal%\MQL5\Experts. 


    Adicionado suporte para a macro %terminal%, que significa o caminho para o diretório de dados da plataforma onde este terminal está instalado.

  3. Aprimorada a exibição de matrizes no depurador.
  4. Aumento do buffer para copiar valores a partir do depurador.
  5. Aprimoradas dicas de erro.
  6. Caminhos relativos agora são escritos no arquivo de projeto *.mproj. Anteriormente, os caminhos eram absolutos, o que resultava em erros de compilação ao mover um projeto.
  7. Adicionada incorporação automática de recursos BMP como matrizes de bitmap de 32 bits disponíveis globalmente quando incluídas em projetos. Isso elimina a necessidade de chamar ResourceReadImage no código para ler o recurso gráfico.
    'levels.bmp' as 'uint levels[18990]'
    
  8. Aprimorada a leitura de formatos de arquivos BMP estendidos.
  9. Traduções de IU atualizadas.
  10. Correções de crash-logs.


anterior123456789101112131415