O que há de novo no MetaTrader 5?

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

26 fevereiro 2021
MetaTrader 5 build 2815: Acesso ao livro de ofertas desde Python, melhorias no depurador e no criador de perfil

Terminal

  1. Adicionado um recurso para obter dados do livro de ofertas através do Python API.
    Três novos recursos permitem que obter dados de forma rápida e fácil para computação estatística e aprendizado de máquina usando um grande número de bibliotecas Python prontas.
    • market_book_add — assina do terminal MetaTrader 5 para receber eventos sobre mudanças no livro de ofertas para o símbolo especificado.
    • market_book_get — retorna uma tupla desde BookInfo contendo os registros do livro de ofertas para o símbolo especificado.
    • market_book_release — cancela a assinatura do terminal MetaTrader 5 para receber eventos sobre alterações no livro de ofertas para o símbolo especificado.

  2. O comprimento máximo das mensagens push foi aumentado de 256 para 1024 caracteres. Agora você pode enviar muitas mais informações sobre dispositivos móveis desde seus programas MQL5.
  3. Adicionada uma versão preliminar do "Gerenciador de Tarefas" chamado pressionando a tecla F2.
    O Gerenciador de Tarefas é um sistema de monitoramento dos recursos consumidos pela plataforma. Ele permite ver quanta memória consomem os gráficos, quantos recursos do processador são usados pelos EAs, etc. Se algo está diminuindo a velocidade de sua plataforma, você pode detectar e corrigir o problema facilmente.



  4. Aprimorado o serviço "Assinaturas". Para instrumentos de negociação cujos dados são transmitidos com atraso, foi adicionada uma indicação especial:
    • Os símbolos na "Observação do Mercado" são marcados com um ícone de relógio, uma dica de ferramenta exibe o valor do atraso
    • Nos gráficos é exibida uma notificação sobre o atraso dos dados



  5. Corrigida a exibição da lista de assinaturas se não houver conexão com a conta de negociação.
  6. Corrigido o trabalho de links em e-mails e notícias. Eles agora abrem no navegador padrão. Anteriormente, apenas o Internet Explorer era usado para fazer isso.
  7. Corrigidas as conexões desde a função WebRequest para hosts com endereços IPv6 e proteção Cloudflare.
  8. Aprimoradas funcionalidade e capacidade de resposta do Serviço VPS.
  9. Aprimorado o trabalho da plataforma com o Wine e MacOS/Crossover, incluindo versões para macOS Big Sur com processador M1.

MQL5

  1. Corrigido um erro na função ArrayPrint. Anteriormente, em alguns casos, a função não podia exibir a matriz.
  2. Otimizadas operações de arquivo realizadas usando funções File*. Agora, ler e gravar arquivos é muito mais rápido.
  3. Removida a restrição que exigia a especificação do tamanho da segunda, terceira e quarta dimensões de um array dinâmico quando ele era usado como um parâmetro de função. Isso aumentará a capacidade de reutilização e a flexibilidade do código.
    void func(int &arr[ ][ ][ ][ ])
      {
      }
  4.  Corrigido erro na função ArrayBsearch. Ao realizar uma pesquisa binária por um valor em um array classificado, a função pode retornar incorretamente o índice do elemento encontrado.

MetaEditor

  1. Continua o trabalho com a atualização global do depurador.
    • Ao exibir arrays na janela de observação, é levada em consideração sua classificação, especificada pela função ArraySetAsSeries.
    • Adicionado suporte para variáveis estáticas locais.
    • Corrigida a exibição do valor do elemento do array especificado.
    • Corrigido o processamento de campos estáticos de classes.
    • Muitas outras correções para uma depuração mais precisa e confiável.

  2. Adicionada a opção "Habilitar otimização ao criar perfis".
    Para aumentar a granularidade do relatório de criação de perfil, você pode desativar o modo de otimização de código. Sem otimização, a velocidade do código pode cair várias vezes, mas em troca você pode ver uma cobertura de código mais ampla. Ao usar, esteja ciente de que gargalos de código serão imprecisos.
    Se você precisar de um modo de criação de perfil mais suave, desative a opção "Usar inlining ao criar perfil".




    A capacidade de gerenciar a otimização de código também está nas configurações do projeto.
    • Se a otimização estiver desabilitada no projeto, a nova opção será ignorada - a otimização está sempre desabilitada para criação de perfil (incluindo inlining).
    • Se a otimização estiver habilitada no projeto, a nova opção será levada em consideração na compilação para a criação de perfil.

  3. Adicionado registro para depuração e criação de perfil. Na inicialização, os parâmetros do ambiente são exibidos no log, já no desligamento, as estatísticas sobre os dados coletados.
    MQL5 profiler    starting 'ExpertMACD.ex5' on history with parameters:
    MQL5 profiler       symbol: 'EURUSD'
    MQL5 profiler       period: 'H1'
    MQL5 profiler       date from: '2021.01.01'
    MQL5 profiler       date to: '2021.02.22'
    MQL5 profiler       ticks mode: 'every tick'
    MQL5 profiler       execution delay: 0 ms
    MQL5 profiler       deposit: 10000
    MQL5 profiler       currency: 'USD'
    MQL5 profiler       leverage: 1:100
    MQL5 profiler       profit in pips: NO
    MQL5 profiler    profile data received (4640 bytes)
    MQL5 profiler    758 total measurements, 0/0 errors, 470 kb of stack memory analyzed
    MQL5 profiler    7782 total function frames found (1929 mql5 code, 342 built-in, 1403 other, 4108 system)

Tester

  1. Corrigida a configuração de horário não comercial nas configurações de teste avançadas.
Documentação atualizada.
15 janeiro 2021
MetaTrader 5 build 2755: Janela de cotações e depurador melhorados

Terminal

  1. Modificada a janela de cotações que permite visualizar os preços dos instrumentos em telas de qualquer tamanho.

    Agora as informações podem ser exibidas em várias colunas, o que permite um uso mais otimizado do espaço da tela. Para mudar o modo de exibição, use a caixa de diálogo de propriedades da janela.


    Além disso, foram feitas uma série de pequenas melhorias:

    • Adicionado menu de seleção de coluna. Agora tem as mesmas propriedades do instrumento que na "Observação do mercado".
    • Otimizado o trabalho com um grande número de ferramentas. Agora a janela funciona igualmente bem com 10 e 1000 ferramentas.
    • Adicionada exibição de breves informações sobre a ferramenta na dica de ferramenta.
    • Corrigida a aplicação de configurações de cores para exibir preços altistas e baixistas.

  2. Adicionada a exibição de transações no gráfico de ticks do livro de ofertas sintético.

    O livro de ofertas sintético é usado para símbolos dos quais não são transmitidos os preços de Level 2. Nele os níveis são criados automaticamente, pois eles são formados a partir dos melhores Bid e Ask com uma etapa de alteração de preço. Agora, se com base no símbolo forem transmitidos os dados sobre o preço e o volume da última transação, você pode vê-los claramente no gráfico de tick. As informações são exibidas como círculos:
    • Círculos vermelhos — transações de venda.
    • Círculos azuis — transações de compra.
    • Círculos verdes — sentido da transação não definido.

    Quanto maior o tamanho do círculo, maior será o volume da transação.



  3. Corrigido o cálculo das "gregas" no quadro de opções. O erro ocorria quando o ativo base da opção tinha um preço zero para a última transação.
  4. Continua o trabalho com o novo serviço "Assinaturas", permitindo que você compre serviços adicionais para trading. Em particular, foi corrigida a exibição de assinaturas que dependem de outras assinaturas. Essas assinaturas são usadas para serviços agrupados.
  5. Aprimorado o funcionamento da plataforma para Wine.

MQL5

  1. Adicionada a geração de eventos do gráfico ChartEvent ao soltar os botões direito e do meio do mouse. Isso pode ser usado, por exemplo, ao criar painéis gráficos. Para que os eventos funcionem, você deve desativar o menu de contexto do gráfico usando a propriedade CHART_CONTEXT_MENU.
  2. Corrigido um bug que causava um erro significativo no tempo de espera na função Sleep.

MetaEditor

  1. Começamos a trabalhar com a atualização global do depurador. Em particular, foi significativamente melhorada a janela expressões observadas. Adicionada a capacidade de visualizar o conteúdo de arrays e objetos, bem como os valores de ponteiros na forma de listas suspensas.



    Para visualizar uma matriz ou objeto, clique duas vezes sobre ele na janela de observação.

  2. Corrigido travamento ao abrir alguns projetos.
Documentação atualizada.
26 novembro 2020
MetaTrader 5 build 2715: Melhorias gerais

Terminal

  1. Corrigida a falha da plataforma ao usar o quadro de opções. Isso podia acontecer quando o tamanho do tick era definido como zero nas configurações do instrumento de negociação.
  2. Corrigidos erros na exibição da interface em monitores HiDPI.

MQL5

  1. Corrigida a conversão de string atempadamente com ajuda da função StringToTime. O erro ocorria ao especificar a hora no formato "yyyymmdd [hhmiss]".
  2. Corrigido um erro no operador de cópia implícita para objetos contendo matrizes dinâmicas. Agora, ao copiar, o tamanho do objeto de destino é reduzido ao tamanho do objeto copiado.
    struct MyStruct
    {
      string Array[];
    };
    
    void OnStart()
    {
      MyStruct a1,a2;
      ArrayResize(a1.Array,3);
      ArrayResize(a2.Array,1);
      a1=a2;
    }
    Anteriormente, como resultado da chamada de tal função, a matriz "a1" tinha tamanho 3. Agora terá tamanho 1.

MetaTester

  1. Atualizado o algoritmo para calcular a classificação dos agentes de teste na rede de computação em nuvem MQL5 Cloud Network. A classificação será determinada com mais precisão e mudará menos com o tempo.

Documentação atualizada.
12 novembro 2020
MetaTrader 5 build 2560: MetaEditor aprimorado

Terminal

  1. Corrigida a exibição do livro de ofertas sintético. Anteriormente, podia não estar disponível para alguns instrumentos.

    O livro de ofertas sintético é usada para símbolos para os quais os preços de Level 2 não são transmitidos. Os níveis nele são criados automaticamente, pois eles são formados a partir dos melhores Bid e Ask com uma etapa de alteração de preço. Ele é uma ferramenta conveniente para colocar, modificar e excluir ordens com um mínimo atrasos e de maneira clara.



MQL5

  1. Otimizado e significativamente acelerado o acesso aos preços mais recentes desde programas MQL5 usando a função SymbolInfoTick.
  2. Corrigida a redefinição dos parâmetros do indicador "Ichimoku Kinko Hyo" através da caixa de diálogo.



  3. Corrigido a operação das funções Copy* quando não há histórico para um instrumento de negociação.
  4. Continuamos trabalhando na atualização total do criador de perfil de código. Além das inovações da versão 2650 fizemos uma série de melhorias:
    • Apresentação de dados aprimorada
    • Nomes de coluna abreviados no relatório
    • Adicionada a capacidade de salvar o relatório de criação de perfil num arquivo
    • Adicionada exibição do número da linha na dica de ferramenta para funções no relatório



MetaEditor

  1. Adicionada a capacidade de desabilitar o rastreamento da área de transferência e limpar seu histórico.

    A função de rastreamento de buffer melhora a usabilidade do código-fonte acessando rapidamente os últimos dados usados. Pressione Alt+V em qualquer lugar no código-fonte, selecione qualquer uma das linhas copiadas anteriormente no menu e ela será colada no lugar.

    Para ativar/desativar o rastreamento, use o comando correspondente na barra de ferramentas ou nas configurações do editor.



  2. Corrigido erro de cálculo para algumas expressões observadas ao depurar programas.

Tester

  1. Restringida a negociação para EAs inciados no testador de estratégia no modo de recebimento de quadros.
  2. Corrigido o erro que ocorria durante a importação de resultados de otimização no testador de estratégia. Por causa disso, os valores dos timeframes podiam ser importados incorretamente.

Documentação atualizada.
9 outubro 2020
Nova versão da plataforma MetaTrader 5 build 2650: carregamento de gráficos em segundo plano e melhorias na criador de perfil de código MQL5

Terminal

  1. Adicionada a opção "Carregar com antecedência os dados dos gráficos para posições e ordens abertas".

    Para economizar tráfego, a plataforma de negociação carrega o histórico de preços dos instrumentos apenas ao serem realmente solicitados, por exemplo, ao abrir um gráfico ou ao iniciar um teste. No entanto, para instrumentos usados ativamente, isso pode nem sempre ser conveniente. Se você habilitar a nova opção, os gráficos dos instrumentos com posições abertas ou ordens pendentes serão sempre atualizados em segundo plano. Assim, ao abrir gráficos, você não precisará esperar pelo carregamento adicional de dados, uma vez que eles estarão imediatamente disponíveis para análise.




  2. Corrigida a formação de barras diárias após os finais de semana.
  3. Corrigida a atualização de gráficos. Em alguns casos, após a adição de dados de preços atualizados, os gráficos não eram reconstruídos.
  4. Otimizada a atualização do cache do histórico de negociação da conta. Isso torna possível reduzir os atrasos ao receber dados usando as funções History*.
  5. Corrigida a exibição de colunas de comentários ao visualizar o histórico de negociação na forma de posições.
  6. Corrigida a exibição do botão de renovação de assinatura de "Sinais".

MQL5

  1. Continuamos trabalhando na atualização total do criador de perfil de código. Além das inovações da versão 2615:

    Adicionados novos parâmetros
    Como anunciado na atualização anterior, para criação de perfil agora é usado o método "Sampling". O criador de perfil faz uma pausa durante a operação de um programa MQL (~1000 vezes por segundo) e coleta estatísticas sobre quantas vezes ocorre uma pausa em uma seção específica do código. Isso inclui a análise de pilhas de chamadas para determinar a "contribuição" de cada função no tempo total de operação do código. No final da criação de perfil, você obtém informações sobre quantas vezes há uma pausa e quantas vezes cada uma das funções acaba na pilha de chamadas:

    • Atividade total da CPU [unidade de medida, %] — número total de "aparições" de uma função na pilha de chamadas.
    • Atividade intrínseca da CPU [unidade de medida, %] — número de "pausas" que ocorrerem diretamente na função especificada. Este contador é mais importante para identificar gargalos, uma vez que, de acordo com as estatísticas, a parada ocorre com mais frequência nas partes do programa que requerem mais tempo de CPU.


    Adicionada a capacidade de desativar o inlining de função durante a criação de perfil
    Ao compilar programas MQL, é realizado o inlining (incorporação) — o código das funções é colocado diretamente no seu local de chamada, o que permite obter uma aceleração significativa durante o trabalho No entanto, isso torna difícil a criação de perfil de funções. Para obter um relatório sobre funções "puras", você pode desativar o inlining durante a criação de perfil nas configurações do MetaEditor:




    Atualizado o design de relatórios
    Redesenhamos o relatório de criação de perfil, bem como a apresentação das informações de criação de perfil na janela de código fonte. O design se tornou mais moderno e familiar para os usuários do Visual Studio.




  2. Corrigido um erro no funcionamento da função CopyTicksRange. Ele causava que, em alguns casos, a função não retornasse todos os dados.
  3. Adicionado o novo código de erro TRADE_RETCODE_HEDGE_PROHIBITED — é impossível abertura de posição ou colocação de ordem pendente, uma vez que posições sobrepostas são restritas. O erro é retornado em resposta a uma tentativa de realizar uma operação de negociação se a conta estiver proibida de fazer cobertura e já tiver uma posição ou ordem na direção oposta para o mesmo símbolo.
  4. Eliminada a capacidade de chamar a função MessageBox ao depurar indicadores. MessageBox não é chamada desde indicadores, pois ela pausa o thread de execução enquanto espera por uma resposta do usuário.
  5. Otimizada e acelerada significativamente a adição de instrumentos de negociação na "Observação do mercado" com ajuda da função SymbolSelect.
  6. Corrigido o comportamento da função ArrayInsert para arrays de tamanho fixo. Agora corresponde ao especificado na documentação: ao inserir elementos, o tamanho do receptor de matriz não muda, enquanto os elementos do receptor de matriz são deslocados desde a posição de inserção para a direita (os últimos elementos de contagem "caem") e os elementos são copiados desde o receptor de matriz para o espaço vazio.

Tester

  1. Corrigido o trabalho com configurações personalizadas de condições de negociação ao testar, redesenhada a caixa de diálogo das configurações.

    • Corrigida a adição de comissões personalizadas. Agora, para o trabalho da comissão, basta indicar o nome do símbolo, e não todo o caminho para ele.
    • Alterada a disposição das guias para um trabalho mais conveniente.
    • Renomeados a caixa de diálogo e a opção para incluir configurações personalizadas.
    • Otimizada a largura das colunas nas tabelas de configurações.
    • Quando você desativa a opção "Usar configurações personalizadas", todas as outras configurações na caixa de diálogo são desativadas. Anteriormente, as configurações permaneciam editáveis e os usuários pensavam erroneamente que seriam aplicadas durante o teste.




  2. Corrigido um erro que ocorria em alguns casos ao receber pedidos do histórico de negociação com base em um ticket.

MetaEditor

  1. Adicionados esquemas de cores predefinidos para a janela de edição de código: claro (por padrão), escuro e azul. Agora, para um trabalho mais confortável à noite, você não precisa reconfigurar manualmente a aparência do editor.

    Além disso, foi adicionada a capacidade de personalizar a cor da borda da janela de dicas de função.



     
  2. Completamente atualizados ícones nas barras de ferramentas para oferecer suporte a monitores HiDPI.

Documentação atualizada.

17 setembro 2020
MetaTrader 5 build 2615: Análise Fundamental e Critérios Complexos no Testador de Estratégia

Terminal

  1. Estendidas novos recursos para análise fundamental de instrumentos.
    Adicionadas novas propriedades de instrumentos de negociação, permitindo classificá-los com ainda mais precisão:

    • Setor — setor da economia ao qual pertence o ativo. Por exemplo: energia, finanças, saúde, etc.
    • Indústria — ramo da indústria ao qual pertence o ativo. Por exemplo: roupa e acessórios esportivos, fabricação de automóveis, restaurantes, etc.
    • País — país da empresa cujas ações são negociadas na bolsa de valores.

    Essas propriedades possibilitam implementar na Observação do Mercado um sistema separado para trabalho conveniente com instrumentos por setor. Selecione uma categoria no menu e todos os instrumentos disponíveis serão adicionados à lista para análise complexa:



    Além disso, novas propriedades agora estão disponíveis na especificação dos contratos:



    Ademais, agora você pode abrir facilmente dados fundamentais de instrumentos. Ao menu de contexto da Observação do Mercado para cada símbolo foram adicionados links para os maiores agregadores:



    A disponibilidade de novos dados depende das corretoras, uma vez que eles controlam as configurações. No entanto, tentamos disponibilizar as informações por padrão para o máximo número de instrumentos. Assim que as corretoras atualizarem seus servidores para a nova versão, os dados por país, setor e indústria aparecerão em vossa plataforma.
  2. Aprimorado o mostruário do serviço Sinais e Mercado. Em particular, ao lado esquerdo da janela foram adicionados botões para assinatura e para todas as variantes de aluguel :



    Além disso, foram feitas melhorias para um trabalho mais conveniente: botões com novas cores brilhantes, botões mais visíveis para fazer login em contas MQL5, etc.

  3. Corrigido o cálculo de lucro/perda potencial para níveis de Stop-Loss e Take-Profit nos gráficos.



  4. Corrigidos erros no cálculo de instrumentos sintéticos. Em alguns casos, os erros podem fazer com que a plataforma congele durante a inicialização.
  5. Corrigida a exibição de valores do indicador embutido Fractals na Janela de Dados.
  6. Ícones completamente atualizados nas barras de ferramentas para oferecer suporte a monitores HiDPI.
  7. Consertado o erro ao corrigir o volume da posição durante a cópia de sinais de negociação. Em alguns casos, a correção não podia ser feita devido a uma má aplicação dos níveis de parada, causando o erro "invalid stops".
  8. Otimizada reconstrução do histórico de preços após serem alterados no servidor.
  9. Corrigida a exibição de dicas para níveis de negociação em gráficos. Em alguns casos, elas podiam aparecer mesmo quando desabilitada a exibição de níveis de negociação.
  10. Corrigido o funcionamento da opção "Exibir em gráficos \ Atualização automática" no menu de contexto de ordens e posições na seção "Caixa de Ferramentas \ Negociação". Agora, ao desativar esta opção, a exibição do histórico de negociação será desativada para todos os gráficos abertos.

MQL5

  1. Adicionada a função MathClassify. Ela determina o tipo do número real e retorna o resultado como um valor a partir de uma nova enumeração ENUM_FP_CLASS.
    ENUM_FP_CLASS  MathClassify(
       double  value      // número real
       );
    A enumeração contém os seguintes valores:
    • FP_SUBNORMAL — número subnormal que está mais próximo de zero do que do menor número normalizado representável DBL_MIN — 2,2250738585072014e-308.
    • FP_NORMAL — número normalizado que varia de 2,2250738585072014e-308 a 1,7976931348623158e+308.
    • FP_ZERO — zero positivo ou negativo
    • FP_INFINITE — número que não pode ser representado pelo tipo correspondente — infinito positivo ou negativo.
    • FP_NAN — não é um número.

    Para verificar se um número real é válido, você pode usar o seguinte código:
    if(MathClassify(value)>FP_ZERO)
      {
       Print("value is not a valid number");
      }
  2. Adicionadas novas propriedades de símbolos que podem ser obtidos por funções SymbolInfoString:
    • SYMBOL_COUNTRY — País — país da empresa cujas ações são negociadas na bolsa de valores.
    • SYMBOL_SECTOR_NAME — setor da economia ao qual pertence o ativo. Por exemplo: energia, finanças, saúde, etc.
    • SYMBOL_INDUSTRY_NAME — indústria à qual pertence o ativo. Por exemplo: roupa e acessórios esportivos, fabricação de automóveis, restaurantes, etc.
    As propriedades são retornadas como uma string.

    Setor e indústria aos quais pertence o instrumento também podem ser obtidos como um valor de enumeração. Para fazer isso, solicite as seguintes propriedades com ajuda da função SymbolInfoInteger:

    • SYMBOL_SECTOR
    • SYMBOL_INDUSTRY
    Para trabalhar com essas propriedades, foram adicionadas as enumerações ENUM_SYMBOL_SECTOR e ENUM_SYMBOL_INDUSTRY.

  3. Implementado um novo mecanismo de gerenciamento de memória em programas MQL5. Ele aloca memória até 3 vezes mais rápido. Também evita vários erros potenciais de acesso à memória.
  4. Otimizado e significativamente acelerado o trabalho com o histórico de negociação da conta com ajuda da função History*.
  5. Corrigida a chamada WebRequest desde o ponto de entrada OnDeinit. Anteriormente, quando o EA era interrompido, não era chamada essa função.
  6. Corrigida a chamada da função WebRequest desde o serviços. Anteriormente, a função não podia ser chamada após reiniciar o serviço.
  7. Adicionada verificação de suporte de tipo double de dispositivos ao usar OpenCL. Em cálculos financeiros, o tipo float não é adequado devido aos muitos arredondamentos. A este respeito, a plataforma requer explicitamente suporte de double para cálculos. Agora, se estiver ausente, no log da plataforma serão exibidas mensagens, como "device '<name>' does not support type 'double'". Anteriormente, era exibida uma mensagem de erro genérica.
  8. Significativamente acelerada a execução da função AccountInfoDouble com parâmetros ACCOUNT_EQUITY e ACCOUNT_BALANCE.
  9. Corrigido erro durante a aplicação de um modelo ao gráfico com a ajuda da função ChartApplyTemplate.
  10. Corrigido ero de chamada da função ChartSetInteger com parâmetro CHART_BRING_TO_TOP.
  11. À biblioteca Alglib foi adicionado o método Conjugate para calcular o número conjugado de um número complexo. A biblioteca está localizada no diretório MQL5\Include\Math\Alglib.
  12. Atualizado completamente o criador de perfil de código. O novo profiler é significativamente mais rápido e preciso do que o anterior.
    • Para análise, o novo criador de perfil usa código otimizado da mesma maneira que ao compilar a versão de lançamento do programa. Isso permite determinar com mais precisão a velocidade de operação do código, uma vez que será usado no trabalho real do programa.
    • O novo profiler usa o método de criação de perfil "Sampling". Este é um método leve e preciso que coleta estatísticas sobre a performance do aplicativo, capturando dados da pilha de chamadas em intervalos regulares e calculando o desempenho com base neles.
    • Ao contrário da versão anterior, o novo criador de perfil não faz nenhuma alteração no código analisado. O método "Instrumentation" usado anteriormente adicionava ao código certas construções que eram usadas para medir a velocidade de operação da função. Isso podia afetar a velocidade de desempenho do código final.
    O trabalho sobre o criador de perfil ainda está em andamento. Espere mais melhorias nas próximas versões da plataforma.

Tester

  1. Otimizado o trabalho com a rede em nuvem MQL5 Cloud Network. Corrigidos erros de carregamento de EAs por agentes.
  2. Adicionado o novo critério de otimização "Complex Criterion max". Trata-se de um indicador integral e complexo que avalia a qualidade do teste. Ele leva em consideração vários parâmetros simultaneamente:
    • Número de transações
    • Rebaixamento
    • Fator de recuperação
    • Retorno esperado
    • Índice de Sharpe

    O novo critério permite entender que o valor máximo de um parâmetro (por exemplo, lucro) nem sempre é a melhor opção do ponto de vista de uma análise abrangente. Ele permite que você selecione as melhores passagens de teste passo a passo: primeiro pelo número de negócios, em seguida, a partir dessa amostra por retorno esperado, depois, por fator de recuperação e assim por diante. Assim, como resultado da otimização, você obtém as melhores passagens para cada parâmetro, para escolher algum específico, por exemplo, o de maior lucro.

    Selecione um novo critério nas configurações do testador de estratégia e inicie a otimização.



    Nos resultados da otimização, o valor "Complex Criterion max" será exibido em uma coluna "Result" separada. Você pode classificar as passagens de acordo com ela. O novo critério também suporta realce de cor para identificar visualmente as melhores passagens. Valores abaixo de 20 são destacados em vermelho, acima de 80, em verde escuro.



  3. Corrigida a adição de comissões personalizadas no testador de estratégia.

MetaEditor

  1. Iniciado retrabalho global de funções de gerenciamento de código inteligente (intelect).
    • As dicas de ferramentas agora mostram a assinatura de função completa, não apenas seu nome.
    • A fonte usada para exibir dicas agora é obtida a partir das configurações do MetaEditor.

    Espere mais melhorias nas próximas versões da plataforma.
Documentação atualizada.

24 julho 2020
MetaTrader 5 build 2560: Melhorias no sistema interno de aprendizado

Terminal

  1. Na atualização anterior da plataforma modificamos completamente o sistema interno de treinamento. Agora, fizemos os retoques finais:
    • Tornamos o ícone do progresso mais visível
    • Melhoramos os textos de várias dicas para que nenhum usuário fique confuso
    • Corrigimos uma série de erros de cálculo do progresso
    Faça todas as lições para usar 100% os recursos da plataforma.



  2. Otimizado e significativamente acelerado o processamento de grandes fluxos de ticks (dezenas de milhares por minuto ou mais).
  3. Corrigidos erros no cálculo das alterações de preços em relação ao fechamento da sessão anterior. Para ver este indicador, ative a coluna "Mudança diária" no menu de contexto da "Observação do Mercado".

MQL5

  1. Otimizado e acelerado significativamente o acesso à função de acesso às propriedades da conta de negociação ChartGetInteger.
  2. Corrigidos erros de busca de indicadores personalizados solicitados em programas MQL5 por meio da função iCustom.

MetaEditor

  1. Adicionada a compilação de programas C/C++ em projetos.

Tester

  1. Operação significativamente otimizada da rede em nuvem MQL5 Cloud Network. A rede se tornou melhor em encontrar agentes adequados, distribuindo tarefas mais rapidamente e retornando resultados de cálculos.

Documentação atualizada.
10 julho 2020
MetaTrader 5 build 2530: Classificação na Observação do Mercado e trabalho amigável com resultados de otimização

Terminal

  1. À observação do Mercado foi adicionada a possibilidade de classificar dados:
    • Clique no nome de qualquer coluna para classificar a lista de acordo dos seus dados. Por exemplo, segundo o nome do símbolo, o preço de fechamento, a alteração diária etc.
    • Use o novo menu com as opções de classificação mais populares. A classificação por líderes de crescimento e de queda, calculada de acordo com a variação diária do preço do instrumento, será conveniente ao negociar nas bolsas de valores.


  2. O sistema de aprendizado incorporado foi substancialmente reprojetado e aprimorado.
    Agora, todas as dicas interativas estão divididas em tópicos, para facilitar a navegação durante o aprendizado. Para cada categoria, é mostrado o número de dicas concluídas e restantes.



    Além disso, a cada dica foi adicionada uma lista de verificação indicando a ação principal que deve ser concluída para concluir o aprendizado.

    Também foi completamente atualizado design do sistema de aprendizado e foram eliminados os erros no cálculo do progresso geral do treinamento.

  3. Adicionado o cálculo automático do preço de fechamento do pregão anterior e a abertura do pregão atual para o instrumento. Se esses dados não forem fornecidos diretamente pela sua corretora, o terminal irá calculá-los de acordo com as cotações da última e da primeira sessão, respectivamente. E você poderá ver esses dados na Observação do Mercado. Para fazer isso, anexe as respectivas colunas na seção "Símbolos" ou vá para a seção "Detalhes".


  4. Aplicação otimizada e significativamente acelerada de preços para posições abertas. Quando novos ticks chegam ao terminal, os preços, lucros e requisitos de margem para as posições agora são atualizados mais rapidamente.
  5. Corrigido o cálculo do indicador Stochastic Oscillator embutido. Ocorria um erro ao limitar a quantidade de barras exibida nos gráficos.

MQL5

  1. Otimizada e acelerada significativamente a função de acesso às propriedades da conta de negociação AccountInfo*.
  2. Otimizado e acelerado significativamente o acesso à função de acesso às propriedades da conta de negociação ChartGetInteger.

MetaEditor

  1. Para um trabalho mais conveniente com o repositório de arquivos MQL5 Storage, foram adicionados três comandos ao menu de contexto das guias de edição de código:
    • Comparação da cópia de trabalho do arquivo com a revisão atual
    • Reversão de alterações atuais
    • Exibição do histórico de alterações do arquivo no repositório



  2. Alterado o realce de parênteses. Agora, os colchetes são bem destacados, não o plano de fundo abaixo deles. Por padrão, o destaque dos parênteses está desativado. Pode ser ativado nas configurações do editor.


  3. Aprimorado o trabalho da função de pesquisa e substituição:

    • Se você selecionar o texto no arquivo e acessar a caixa de pesquisa, o texto será automaticamente colocado no campo "Localizar". Se o texto no arquivo não foi selecionado, o texto será inserido no campo "Localizar" desde a área de transferência. Se a área de transferência estiver vazia, na janela de pesquisa o foco será simplesmente definido no campo "Localizar".
    • Um comportamento semelhante é implementado ao chamar a janela de substituição, apenas o texto nesse caso é substituído no campo "Substituir por".
    • Os resultados de pesquisa e substituição agora são exibidos não numa caixa de diálogo separada, mas, sim, no log. Se a janela "Ferramentas" estiver ativada neste momento, nela será automaticamente selecionada a guia de log. Assim, você não precisa perder tempo fechando janelas desnecessárias.

  4. Corrigida a pesquisa na janela de comparação de arquivos ao trabalhar com o repositório de versão MQL5 Storage.
  5. Adicionada a possibilidade de pesquisar e substituir nos arquivos incluídos no arquivo atual por meio da diretiva #include.
    Isso permiti trabalhar rapidamente com projetos que consistem em muitos arquivos. Por exemplo, para substituir o texto em todos os arquivos de programa, você não precisa especificar seus diretórios manualmente, o editor os encontrará automaticamente pelas diretivas #include.


Tester

  1. Alterados os critérios de otimização, em que foram levados em consideração dois indicadores — saldo e um segundo fator. Agora eles levam em conta apenas o segundo fator, sem saldo. Tais critérios são mais simples e mais compreensíveis na análise.

    • Saldo + rentabilidade máxima -> Rentabilidade máxima
    • Saldo + retorno esperado máximo -> Retorno esperado máximo
    • Saldo + rebaixamento mínimo -> Rebaixamento mínimo
    • Saldo + fator máximo de recuperação -> Fator máximo de recuperação
    • Saldo + índice de Sharpe máximo -> Índice de Sharpe máximo


  2. No submenu "Parâmetros otimizados", foram adicionados comandos para ativar ou desativar rapidamente a exibição de todas as colunas de parâmetros de entrada na tabela de resultados de otimização:


  3. Adicionada coloração da tabela e gráfico de resultados de otimização para uma análise visual conveniente das passagens.
    O gráfico é colorido com um gradiente de verde para vermelho, dependendo do valor do critério de otimização. São usadas as seguintes cores:
    • Saldo — em azul são coloridos valores acima do depósito inicial, em vermelho, abaixo.
    • Lucro — em azul são coloridos valores acima de zero, vermelho, abaixo.
    • Retorno esperado — em azul são coloridos valores acima de zero, vermelho, abaixo.
    • Rebaixamento — de verde (0-5%) a vermelho (acima de 30%).
    • Índice de Sharpe — de verde (mais de 2) a vermelho (abaixo de 0).
    • Fator de recuperação — de verde (mais de 2) a vermelho (abaixo de 1).


  4. Adicionados filtros na tabela de resultados de otimização. Agora você pode ocultar rapidamente passagens mal-sucedidas na lista:
    • Onde não houve transações
    • Onde o robô mostra perdas
    • Onde o rebaixamento é superior a 50%
    • Onde o fator de recuperação está abaixo de 1
    • Onde a índice de Sharpe é menor que 0,5


  5. Operação significativamente otimizada da rede em nuvem MQL5 Cloud Network. Por exemplo, agora, quando você reinicia a otimização do mesmo EA, a rede tenta usar os mesmos agentes de teste usados anteriormente. Como, com um alto grau de probabilidade, todo o ambiente de mercado, incluindo dados históricos, está pronto para eles, os cálculos podem ser iniciados imediatamente.

Documentação atualizada.
5 junho 2020
MetaTrader 5 build 2485: Melhoras em iCustom e otimização geral em MQL5

Terminal

  1. Otimizada e significativamente acelerada a edição do histórico de barras para instruemntos financeiros personalizados, inclusive com ajuda da função CustomRatesUpdate.
  2. Corrigidos erros ao exportar configurações de instrumentos personalizados para arquivos JSON.
  3. Correções de crash-logs.

MQL5

  1. Alterado o algoritmo para carregar indicadores personalizados com ajuda de iCustom.

    Nome do indicador personalizado. Se antes do nome for indicada uma barra invertida '\', o arquivo EX5 do indicador será procurado em relação à pasta raíz MQL5. Assim, ao chamar iCustom(Symbol(), Period(), "\FirstIndicator"...) o indicador será carregado como MQL5\FirstIndicator.ex5. Se não houver arquivo nesse caminho, ocorrerá o erro 4802 (ERR_INDICATOR_CANNOT_CREATE).

    Se o caminho não começar com '\', o indicador será pesquisado e carregado na seguinte sequência:

    • Primeiro, o arquivo EX5 do indicador é pesquisado na mesma pasta em que localizado o arquivo EX5 do programa de chamada. Por exemplo, o EA CrossMA.EX5 está localizado na pasta MQL5\Experts\MyExperts e contém a chamada iCustom(Symbol(), Period(), "SecondIndicator"...), neste caso, a pesquisa do indicador é realizada com base no caminho MQL5\Experts\MyExperts\SecondIndicator.ex5.
    • Se o indicador não for encontrado no mesmo diretório, a pesquisa será realizada em relação ao diretório raiz dos indicadores MQL5\Indicators. Em outras palavras, é procurado o arquivo MQL5\Indicators\SecondIndicator.ex5. Se o indicador não for encontrado nos dois caminhos, a função retornará INVALID_HANDLE e será gerado o erro 4802 (ERR_INDICATOR_CANNOT_CREATE).

    Se o caminho do indicador estiver definido num subdiretório, por exemplo, como MyIndicators\ThirdIndicator, a pesquisa será realizada pela primeira vez na pasta do programa de chamada (o EA está localizado na pasta MQL5\Experts\MyExperts) com base no caminho MQL5\Experts\MyExperts\MyIndicators\ThirdIndicator.ex5 e, em seguida, em caso de falha, é procurado o arquivo MQL5\Indicators\MyIndicators\ThirdIndicator.ex5. Além disso, com ajuda de um separador no caminho é necessário especificar uma barra invertida dupla '\\', por exemplo, iCustom(Symbol(), Period(), "MyIndicators\\ThirdIndicator"...).

    Além disso, se um indicador personalizado for chamado no código do programa via iCustom, o compilador incluirá implicitamente a diretiva "#property tester_indicator XXX", se ela estiver ausente.

  2. Otimizado e significativamente acelerado o trabalho da função HistorySelect, que permite solicitar o histórico de transações e de ordens.
  3. Corrigido erro que acontecia ao solicitar ticks através da função CopyTicksRange. Por esse motivo, como início do intervalo era considerado o início do dia especificado, sem levar em consideração o tempo especificado.
  4. Otimizada e significativamente acelerada exibição de avisos com ajuda da função Alert.
  5. Adicionada a nova propriedade SYMBOL_TIME_MSC — hora do último tick do símbolo em milissegundo. Para obter a propriedade, é usada a função SymbolInfoInteger.
29 maio 2020
MetaTrader 5 build 2470

Terminal

  • Foi corrigido um erro que não permitia na "Observação do Mercado" adicionar instrumentos financeiros cujos nomes continham os caracteres '-', '=', '_' e '+'.

MQL5

MetaEditor
  • Corrigida pesquisa avançada para caracteres de fim de linha '\n' e '\r'.

Documentação atualizada.
22 maio 2020
MetaTrader 5 build 2450: serviço "Assinaturas", melhorias na interface e recursos amigáveis no MetaEditor

Terminal

  1. Apresentamos o novo serviço — "Assinaturas". Graças a ele, você poderá facilmente obter serviços adicionais que ajudarão você a negociar. Por exemplo, permite comprar uma assinatura de dados de mercado de alta qualidade vinda de fornecedores conhecidos, para que mais tarde você possa analisar esses dados e desenvolver suas próprias estratégias com base nas deles. Também, é possível encomendar os serviços de um gerente pessoal que o ajudará a aprender o básico da negociação e a entender os meandros da plataforma MetaTrader 5.

    No momento, o serviço está em desenvolvimento ativo e, nas próximas versões da plataforma, você já poderá usá-lo.

    Funcionamento
    No "Navegador" da plataforma agora há uma nova seção — "Assinaturas". Ela exibe os serviços disponíveis. Sua lista depende do servidor ao qual você está conectado — todos eles estão configurados no lado da corretora. Por conveniência, as assinaturas são divididas em categorias.



    Selecione um serviço para visualizar sua descrição detalhada. Em seguida, clique em "Assinar". Por conveniência, todas as suas assinaturas ativas são exibidas numa subseção separada.



    Ao assinar dados de mercado, os instrumentos de negociação correspondentes ficam disponíveis para seleção na "Observação do Mercado". Você também pode trabalhar com eles da mesma maneira que com as ferramentas usuais fornecidas pela sua corretora: observar cotações na “Observação do Mercado”, abrir gráficos e analisá-los usando objetos e indicadores, usar dados para verificar EA no testador de estratégia, etc. A única limitação é que você não pode realizar operações de negociação com esses símbolos.

    Pagamento de assinaturas
    Para pagar pelos serviços, você pode usar o dinheiro da sua conta de negociação. Não há necessidade de mudar para outros sites, tudo é feito automaticamente na plataforma.

    Em breve, você poderá comprar assinaturas de dados de mercado conectando-se ao MetaQuotes-Demo
    Planejamos configurar no nosso servidor demo as assinaturas de os dados de mercado vindos de muitas plataformas de negociação em todo o mundo. Em apenas alguns cliques, você pode obter cotações em tempo real da Nasdaq, CME, NYSE, BOVESPA e muitas outras bolsas para ver seus gráficos, analisar a dinâmica de preços usando objetos e indicadores incorporados e desenvolver suas estratégias. Você pode pagar por assinaturas por meio da sua conta da comunidade MQL5.community — da mesma maneira como é feito para os serviços Mercado, Sinais e Hospedagem.

  2. Às configurações dos gráficos foi adicionada a opção "Exibir ticker". Ela permite mostrar/ocultar a linha com o nome do instrumento de negociação, período gráfico e comentário do usuário.



  3. Às configurações do terminal e às configurações do gráfico foi adicionada a opção "Mostrar histórico de negociação". Antigamente, estava disponível a função que permitia exibir suas entradas e saídas do mercado nos gráficos, porém, para usá-la era usada a seção "Ferramentas / Histórico". Agora, a exibição do histórico de transações está configurada de forma mais flexível e amigável. Você pode definir uma configuração para todos os gráficos de uma vez ou defini-la separadamente para cada um.



    Além disso, agora você pode ativar rapidamente a exibição do histórico e dos níveis de negociação no menu de contexto do gráfico:




  4. Às configurações do gráfico foi adicionada o novo esquema de cores "Cor em branco".




  5. Ao menu contextual de posições e ordens foram adicionados comandos para abrir rapidamente o livro de ofertas e o gráfico do instrumento em questão:




  6. Adicionado o destaque da borda do gráfico. Ao trabalhar com muitos gráficos simultaneamente, isso ajudará você a encontrar rapidamente o caminho certo. Selecione o símbolo na Observação do Mercado, a linha da ordem ou a posição na seção de negociação, do histórico ou do alerta, e a borda do gráfico do símbolo correspondente piscará três vezes.




  7. Aprimorada a exibição de níveis no gráfico.
    • Para não sobrecarregar o gráfico, posições, ordens e níveis não mostram mais tickets.
    • As assinaturas aparecem em maiúsculas para melhor legibilidade.
    • Os volumes não mostram a parte fracionária se ela for zero.
    • Quando a altura da plotagem é menor que 80 pixels, os níveis ficam ocultos.



  8. Agora, no canto superior esquerdo do gráfico, além do nome, é indicada uma descrição do símbolo, se disponível.






  9. Novas colunas foram adicionadas à lista de ordens e posições abertas:
    • Alteração — rentabilidade como uma porcentagem
    • Custo — valor de mercado da posição
    • Identificador do EA — valor indicado pelo EA ao abrir ordens e posições (número mágico)

    Para ativar/desativar novas colunas, use o menu de contexto da seção.




    Colunas do custo de posições e de identificadores de EA também foram adicionadas na seção do histórico de negociação.

    Além disso, na seção de posições abertas e histórico, agora o campo de lucro é destacado, dependendo do resultado da operação.

  10. Adicionado o suporte para preços negativos. Agora, quando surgirem situações, como a recente queda nos preços do petróleo abaixo de zero, a plataforma funcionará corretamente:
    • Mostrar cotações na Observação do Mercado
    • Mostrar gráficos e livro de ofertas
    • Realizar operações de negociação
    • Calcular lucros e abastecimento, etc.

  11. O número máximo de instrumentos que podem estar simultaneamente ativados na Observação do Mercado foi aumentado para 5 000.
  12. Corrigida a classificação da lista de bate-papos de acordo com a data da última atualização.
  13. Otimizada e significativamente acelerado o trabalho com um grande número de instrumentos de negociação (50 000 e mais).
  14. Corrigido um erro que não permitia fechar uma posição cujo volume atual não correspondia à etapa de alteração do volume segundo o símbolo.

MQL5

  1. Otimizada e significativamente acelerado o trabalho com o histórico de ticks.
  2. Adicionadas novas funções para trabalhar com bancos de dados:
    • DatabaseReset — redefine a solicitação ao seu estado inicial, como após uma chamada de DatabasePrepare. A função é destinada à execução repetida de uma solicitação com diferentes valores de parâmetros. Por exemplo, ao adicionar em massa dados a uma tabela usando o comando INSERT, para cada registro, é necessário criar um conjunto próprio de valores para cada campo.
    • DatabaseBind — define o valor do parâmetro na consulta. Esta função deve ser usada caso a consulta SQL contenha os valores parametrizáveis "?" ou"?N", onde N é o número do parâmetro (começando de um).
    • DatabaseBindArray — define a matriz como um valor de parâmetro.

  3. Adicionado o sinalizador FSD_FILE_MUST_EXIST para a função FileSelectDialog. Ele indica que os arquivos selecionados devem existir.
  4. À enumeração ENUM_SYMBOL_INFO_DOUBLE foram adicionados os valores para descrever opções:
    • SYMBOL_PRICE_CHANGE — alteração no preço atual em relação ao final do dia anterior, expresso em porcentagem.
    • SYMBOL_PRICE_VOLATILITY — volatilidade dos preços como porcentagem.
    • SYMBOL_PRICE_THEORETICAL — preço teórico da opção.
    • SYMBOL_PRICE_DELTA — delta da opção/garantia. Mostra quanto o preço da opção muda em unidades quando o preço do ativo subjacente mudar 1 unidade.
    • SYMBOL_PRICE_THETA — teta da opção/garantia. O número de pontos que o preço da opção perderá cada dia devido a deterioração temporária, ou seja, quando a data de vencimento se aproxima.
    • SYMBOL_PRICE_GAMMA — gama da opção/garantia. Mostra a taxa de alteração de delta, isto é, exibe com que rapidez ou lentidão muda o prêmio da opção.
    • SYMBOL_PRICE_VEGA — vega da opção/garantia. Mostra o número de pontos que mudará o preço da opção quando a volatilidade mudar 1%.
    • SYMBOL_PRICE_RHO — rô da opção/garantia. Reflete a sensibilidade do preço teórico da opção a variações de 1% da taxa de juros.
    • SYMBOL_PRICE_OMEGA — omega da opção/garantia. A elasticidade da opção é a variação percentual no preço da opção em relação à variação percentual no preço do ativo subjacente.
    • SYMBOL_PRICE_SENSITIVITY — sensibilidade da opção/garantia. Mostra quantos pontos deve mudar o preço do ativo subjacente da opção para que o preço da opção mude um ponto.

  5. À função DatabaseExport foi adicionada a exportação de campos BLOB em formato HEX.
  6. À enumeração ENUM_CHART_PROPERTY_INTEGER foi adicionada a propriedade CHART_SHOW_TICKER — exibição no canto superior esquerdo do ticker de símbolo. Se definido CHART_SHOW_TICKER com o valor false, simultaneamente também é definido CHART_SHOW_OHLC como false e desativa a exibição de OHLC.   
  7. Aprimorada a qualidade do código gerado pelo compilador. Isso aumento sua velocidade de execução.
  8. Corrigidos vários erros ao compilar e executar funções e classes de modelo. Em particular:
    • Erro de incompatibilidade de prioridade para chamadas de função de modelo sobrecarregadas
    • Erro ao gerar método/classe de modelo
    • Erro ao tentar acessar a internal class para o parâmetro de modelo da função de modelo
    • Erro ao gerar o código da classe de modelo ao usar internal class
    • Erro ao usar o objeto de modelo B<int> antes de B<void*>
    • Erro ao criar objetos complexos agrupados várias vezes com o tipo interno "C"
    • Erro ao transferir como const ref template o argumento do ponteiro para a função
    • Erro ao passar estrutura internal struct para a função de modelo
    • Erro de incompatibilidade de prioridades de execução de funções de modelo
    • Contagem incorreta de parênteses nos ciclos for e do-while
    • Contagem incorreta de colchetes na descrição da estrutura da classe
    • Trabalho lento ao adicionar um elemento de cada vez usando ArrayResize
    • Erro ao escolher a função sobrecarregada adequada

  9. Сorrigido um erro que aparecia em alguns casos na função CustomTicksReplace.
  10. Corrigida a escolha do período para exibição do histórico de ordens de negociação. Agora, ao especificar um intervalo, é usada a data de execução da ordem, e não, a data de criação, como era antes.

Python

  1. Ao método initialize adicionado o parâmetro path — caminho para o arquivo metatrader.exe ou metatrader64.exe. Se o caminho não for especificado, o módulo tentará encontrar arquivo executável por conta própria.
  2. Adicionados novos métodos:
    • symbols_get — obtém todos os instrumentos financeiros do terminal MetaTrader 5.
    • symbols_total — obtém o número total de instrumentos financeiros no terminal MetaTrader 5.

  3. Adicionada a filtragem por grupos de símbolos para a função orders_get, positions_get, history_orders_get e history_deals_get. Use formulários de chamada com o parâmetro "group".
  4. No valor retornado order_send e order_check agora é passada a descrição completa da solicitação inicial — no campo "request". Por exemplo:
    ...
    comment=Request executed
    request_id=55
    retcode_external=0
    request=TradeRequest(action=1, magic=234000, order=0, symbol='USDJPY', volume=0.1, price=108.018, stoplimit=0.0, ...
        traderequest: action=1
        traderequest: magic=234000
        traderequest: order=0
        traderequest: symbol=USDJPY
        traderequest: volume=0.1
        traderequest: price=108.018
        traderequest: stoplimit=0.0
    ...
  5. Agora os scripts Python, quando iniciados num gráfico, recebem como argumento o nome do símbolo e o período desse gráfico em minutos.
    import sys
    
    chart_symbol='unknown'
    chart_tf=1
    
    if len(sys.argv) == 3:
        chart_symbol, chart_tf = sys.argv[1:3];
    
    print("Hello world from", chart_symbol, chart_tf)
    
    >> Hello world from T.NYSE 15

MetaEditor

  1. Adicionado o comando "Adicionar pasta existente". Ele permite adicionar massivamente ao projeto todos os arquivos suportados desde o diretório selecionado.




  2. Pesquisa e substituição avançadas.

    Adicionada pesquisa avançada com suporte parcial a expressões regulares. Use \r, \n, \t para especificar na consultas de pesquisa símbolos, quebras de linha e tabulações. As caixas de diálogo Pesquisar e Substituir estão combinadas numa só com várias guias.



    Adicionada uma guia separada para pesquisar comunidades de programadores. Entre eles, agora pode ser encontrada não apenas a MQL5.community, mas também o GitHub, MSDN e Stack Overflow.



    Os resultados da pesquisa de recursos externos também são convenientemente exibidos na janela da ferramenta do MetaEditor:



    No caso do GitHub, imediatamente podem ser baixados arquivos fonte. O carregamento é realizado num subdiretório separado da pasta "Projetos", nomeado de acordo com o nome do projeto no GitHub.

    Além disso, na janela de resultados da pesquisa é possível classificá-los por data.

  3. Adicionada a capacidade de alterar rapidamente o tamanho da fonte na janela de edição de código. Para fazer isso, mantenha pressionada a tecla "Ctrl" e role a roda do mouse.
  4. Adicionada a capacidade de importar tabelas de arquivos CSV para tabelas de banco de dados. Ao importar, você pode definir os parâmetros:
    • Nome da tabela no banco de dados
    • Detecção automática ou manual de codificação de arquivo
    • Tipo de separador de dados
    • Pular um certo número de linhas no início
    • Prefixo de comentários
    • Presença de nomes de colunas no arquivo
    • Como serão determinadas as quebras de linha
    • Adicionar dados a uma nova tabela ou a uma existente
    • Quais aspas usar para strings



  5. Adicionados comandos para inserir rapidamente tempo e cor no código fonte dos programas. Agora, basta selecioná-los no calendário e na paleta interativos, respectivamente, e o editor os inserirá no código usando o formato desejado.



  6. Interrompido o suporte a MQL4, pois agora é gerado apenas código de 64 bits.
  7. Corrigido o trabalho do trecho de código "Class".
  8. Corrigido o suporte de caminhos absolutos nos projetos.
Documentação atualizada.
6 março 2020
MetaTrader 5 build 2360: expansão da integração com SQLite
  1. MQL5: agora os erros de trabalho com bancos de dados SQLite podem ser analisados usando ferramentas padrão MQL5. Para fazer isso, ao idioma foram adicionados os seguintes códigos de erro:

    • ERR_DATABASE_ERROR — erro geral.
    • ERR_DATABASE_INTERNAL — erro de lógica interna SQLite.
    • ERR_DATABASE_PERM — acesso negado.
    • ERR_DATABASE_BUSY — arquivo de banco de dados bloqueado.
    • ERR_DATABASE_LOCKED — tabela no banco de dados bloqueada.
    • ERR_DATABASE_NOMEM — não há memória suficiente para concluir a operação.
    • ERR_DATABASE_READONLY — tentativa de registro no banco de dados somente para leitura.
    • ERR_DATABASE_IOERR — erro de E/S do disco.
    • ERR_DATABASE_CORRUPT — imagem do disco do banco de dados corrompida.
    • ERR_DATABASE_FULL — erro de inserção, banco de dados cheio.
    • ERR_DATABASE_CANTOPEN — não é possível abrir o arquivo do banco de dados.
    • ERR_DATABASE_PROTOCOL — erro de protocolo de bloqueio de banco de dados.
    • ERR_DATABASE_SCHEMA — esquema do banco de dados alterado.
    • ERR_DATABASE_TOOBIG — linha ou BLOB excede o limite de tamanho.
    • ERR_DATABASE_CONSTRAINT — interrompido devido a violação da restrição.
    • ERR_DATABASE_MISMATCH — tipos de dados incompatíveis.
    • ERR_DATABASE_MISUSE — erro de uso de biblioteca incorreto.
    • ERR_DATABASE_AUTH — autorização negada.
    • ERR_DATABASE_RANGE — erro de aplicação de parâmetro, índice inválido.
    • ERR_DATABASE_NOTADB — o arquivo aberto não é um arquivo de banco de dados.

  2. MQL5: corrigido o trabalho da função DatabaseImport, que permite importar informações de um arquivo para uma tabela do banco de dados.
  3. MetaEditor: corrigida a exibição no log de linhas com mais de 32 KB.
  4. MetaEditor: corrigido erro relacionado ao uso de codificação inválida ao exibir mensagens a partir do console do Python (stdout, stderr) na seção "Erros" do editor.
  5. Documentação atualizada.
21 fevereiro 2020
MetaTrader 5 build 2340: gerenciamento de configurações da conta no testador e expansão da integração com o Python

MetaEditor

  1. Adicionada a possibilidade de trabalhar convenientemente com bancos de dados SQLite.

    Na atualização anterior da plataforma adicionamos suporte para trabalhar com bancos de dados SQLite diretamente da MQL5. Agora na interface do usuário do MetaEditor estão disponíveis as principais funções:

    • Criação e conexão a bancos de dados
    • Visualização de tabelas e consulta de dados rápida
    • Compilação e execução de consultas SQL, reversão de alterações

    Como funciona isso?
    Para criar bancos de dados rapidamente, use o "Assistente MQL5". Aqui você pode criar imediatamente a primeira tabela e definir sua lista de campos.



    Após criar o banco de dados, você irá para a nova seção do "Navegador". Daí vem todo o trabalho com dados.

    O lado esquerdo exibe as tabelas do banco de dados. Para consultar rapidamente os primeiros 1 000 registros, clique duas vezes no nome da tabela. Aqui você pode criar e abrir outros bancos de dados, além de trabalhar com tabelas.

    Na parte principal do editor, ocorre o trabalho com o banco de dados: preencha a tabela com dados, faça pesquisas e seleções, insira consultas SQL, etc.


    Leia mais sobre como trabalhar com bancos de dados no MetaTrader 5 no artigo "SQLite: trabalho nativo com bancos de dados SQL em MQL5"

  2.  Continua o trabalho no que diz respeito à adição de suporte para projetos multilíngues. Nesta versão, expandimos as funções para trabalhar com scripts em Python:

    • Agora eles podem ser criados convenientemente através do "Assistente MQL5", incluindo imediatamente dependências nas bibliotecas necessárias no código.
    • Ao navegador para eles foram adicionados ícones especiais, já no editor foi acrescentado o destaque de sintaxe.
    • Quando um script é executado no MetaEditor, as mensagens do console do Python (stdout, stderr) são exibidas na seção Erros.


    Para executar o script no editor, clique em "Compilar":



    Para trabalhar com Python, não esqueça de especificar o caminho para ele na seção "Configurações \ Compiladores" no MetaEditor. E para trabalhar com a biblioteca MetaTrader 5, instale-a com o comando:
    pip install MetaTrader5
    Leia mais sobre a integração com o Python na documentação.
  3. Adicionada exibição de arquivos de bancos de dados SQLite (*.db;*.sdb;*.sqlite;*.db3;*.s3db;*.sqlite3) no "Navegador".
  4. Corrigidos erros ao salvar as propriedades do projeto.

MQL5

  1. Completamente redesenhada integração como Python. Adicionados muitos novos recursos e alterados nomes de comandos .

    Novos nomes de comandos
    Comandos existentes foram renomeados:
    MT5Initialize       -> initialize
    MT5Shutdown         -> shutdown
    MT5TerminalInfo     -> terminal_info
    MT5Version          -> version
    MT5CopyRatesFrom    -> copy_rates_from
    MT5CopyRatesFromPos -> copy_rates_from_pos
    MT5CopyRatesRange   -> copy_rates_range
    MT5CopyTicksFrom    -> copy_ticks_from
    MT5CopyTicksRange   -> copy_tick_range

    Novos comandos
    A lista de comandos suportados foi bastante expandida. Adicionadas funções de negociação e trabalho com o histórico de negociação, obtendo informações sobre instrumentos financeiros e conta atual.

    • account_info() — recebe informações sobre a conta atual. Análogo de AccountInfoInteger , AcountIndoDouble e AccountInfoString.
    • positions_total() — recebe o número de posições abertas. Análogo de PositionsTotal.
    • positions_get(symbol, ticket) — recebe posições abertas por símbolo ou ticket.
    • orders_total() — recebe o número de ordens. Análogo de OrdersTotal.
    • orders_get(symbol, ticket) — recebe ordens abertas por símbolo ou ticket.
    • history_orders_total(from, to) — recebe o número de ordens no histórico em um determinado período.
    • history_orders_get(from, to, position, ticket) — recebe ordens do histórico em um determinado intervalo por ticket ou com filtragem por posição.
    • history_deals_total() — recebe o número de transações no histórico. Análogo de HistoryDealsTotal.
    • history_deals_get(from, to, position, ticket) — — recebe o número de transações no histórico em um determinado intervalo por ticket ou com filtragem por posição.
    • symbol_info(symbol) — recebe informações sobre um instrumento financeiro. Análogo de SymbolInfoInteger, SymbolInfoDouble, SymbolInfoString.
    • symbol_info_tick(symbol) — получение последнего тика по символу. Análogo de SymbolInfoTick.
    • symbol_select(symbol, enable) — ativa/desativa símbolos na "Observação do Mercado". Análogo de SymbolSelect.
    • order_check(request) — verifica a margem de uma ordem. Análogo de OrderCheck.
    • order_send(request) — envia uma ordem ao servidor. Análogo de OrderSend.
    • order_calc_margin(action, symbol, volume, price) — cálculo da margem para a ordem. Análogo de OrderCalcMargin.
    • order_calc_profit(action, symbol, volume, price_open, price_close) — cálculo do lucro. Análogo de OrderCalcProfit.

    Inicialização de scripts Python em gráficos
    Agora, os scripts Python podem ser executados diretamente nos gráficos da plataforma, semelhante aos programas regulares do MQL5. No "Navegador", eles serão exibidos com ícones especiais.



    As mensagens de script serão exibidas na seção "Ferramentas \ Experts". Se no script for usada a Biblioteca MetaTrader 5, ele poderá receber informações sobre o instrumento, a conta, e negociar.

    Os scripts Python podem ser executados no mesmo gráfico em paralelo com outros scripts e EAs MQL5. Para parar o script, se sua execução estiver em loop, basta removê-lo do gráfico.

    Proteção adicional
    Para proteger ainda mais suas contas ao usar bibliotecas Python de terceiros, a opção "Desativar negociação automática por meio de uma API Python externa" foi adicionada às configurações do terminal.



    Os scripts Python permitem operações de negociação se esta opção estiver desabilitada explicitamente.

  2. Significativamente acelerada reinicialização de programas MQL5 e recriação de indicadores personalizados a partir de programas MQL5. Em alguns casos, a velocidade aumenta centenas de vezes.
  3. Adicionadas funções para trabalhar com bancos de dados:

    DatabaseImport
    Importa dados de um arquivo para uma tabela.
    long  DatabaseImport(
       int           database,          // identificador de banco de dados recebido em DatabaseOpen
       const string  table,             // nome da tabela para inserir dados
       const string  filename,          // nome do arquivo para importar dados
       uint          flags,             // combinação de sinalizadores
       const string  separator,         // separador de dados 
       ulong         skip_rows,         // quantas primeiras linhas a pular 
       const string  skip_comments      // linhas de caracteres que definem comentários
       );

    DatabaseExport
    Exporta uma tabela ou um resultado da consulta SQL para um arquivo CSV. O arquivo é criado como UTF-8.
    long  DatabaseExport( 
       int           database,           // identificador de banco de dados recebido em DatabaseOpen 
       const string  table_or_sql,       // nome da tabela ou consulta SQL
       const string  filename,           // nome do arquivo CSV para exportação de dados 
       uint          flags,              // combinação de sinalizadores 
       const string  separator           // separador de dados no arquivo CSV 
       );

    DatabasePrint
    Imprime uma tabela ou um resultado da consulta SQL no log do EA.
    long  DatabasePrint(
       int           database,          // identificador de banco de dados recebido em DatabaseOpen
       const string  table_or_sql,      // tabela ou consulta SQL
       uint          flags              // combinação de sinalizadores
       );

  4. MQL5: adicionada a função FileSelectDialog, que chama a caixa de diálogo do sistema para criar/abrir um arquivo ou pasta.
    int  FileSelectDialog(
       string   caption,              // título da janela
       string   initial_dir,          // pasta inicial
       string   filter,               // filtro de extensão
       uint     flags,                // combinação de sinalizadores
       string&  filenames[],          // matriz com nomes de arquivos
       string   default_filename      // nome do arquivo por padrão
       );
    A nova função permite o usuário interagir convenientemente com o programa MQL5.

  5. À enumeração ENUM_DEAL_PROPERTY_DOUBLE adicionado o valor DEAL_FEE — pagamento pela transação. De fato, esse é um tipo separado de comissão que pode ser cobrada pela corretora.

Tester

  1. Adicionada a possibilidade de definir suas próprias configurações de conta de negociação ao testar estratégias — restrições de negociação, configurações de margem e comissões. Assim, você obtém ainda mais oportunidades para modelar diferentes condições de negociação com as corretoras.



    Configurações gerais
    Nesta seção, você pode definir o número máximo de ordens e posições abertas que podem ser mantidas simultaneamente na conta. Também aqui você pode configurar sessões em que o programa testado não poderá negociar.


    Margem
    Aqui você pode controlar totalmente como a margem será reservada e qual sistema de registro de posição será usado durante o teste:

    • Gerenciamento de riscos — modelo de gerenciamento de riscos: balcão e baseado em bolsa, com compensação e cobertura. Informações detalhadas sobre eles estão disponíveis na documentação.
    • Nível "Margin call" — nível de fundos na conta, que ao serem atingidos muda para o estado Margin call.
    • Nível "Stop out" — nível de fundos que quando atingido faz com que o pedido seja retirado à força da conta e as posições de negociação sejam fechadas. Ambos os níveis podem ser indicados em porcentagem e em dinheiro. No primeiro caso, os níveis são definidos como o valor do indicador "Fundos" na conta. Quando você seleciona a opção "Em porcentagem", os níveis são determinados como o valor do indicador "Nível de margem" na conta (Fundos/Margem*100).
    • Não realizado — este campo indica como será levado em consideração o lucro/perda atual não registrado na margem livre:
      • Não usar lucros/perdas não realizados — não levar em consideração as posições abertas ao calcular.
      • Usar lucros/perdas não realizados — usar ao calcular perdas e lucro de posições abertas.
      • Usar lucro não realizado — use apenas lucro.
      • Usar perda não realizada — usar apenas perda.
    • Fixo diário — este campo indica como será levado em consideração o lucro/perda registrado pelo trader durante a negociação, na margem livre:
      • Usar lucros/perdas fixos diários — levar em consideração os lucros e perdas registrados durante o dia de negociação, na margem livre.
      • Usar perda fixa diária — levar em consideração apenas a perda registrada durante o dia de negociação, na margem livre. Durante o dia, o lucro acumulado é registrado em um campo separado da conta ("Bloqueado"). No final do pregão, o lucro acumulado é liberado (zerado) e refletido no saldo da conta (registrado na margem livre).
    • Liberar lucro acumulado no final do dia — esta opção estará disponível apenas quando a opção "Usar perda fixa diária" estiver ativada. Se ativada, no final do pregão, o lucro acumulado durante o dia será liberado e registrado no saldo (e, portanto, levado em consideração na margem livre). Caso contrário, não será considerado.


    Comissão
    Nesta seção, você está no controle total de como a comissão é cobrada em todas as operações de negociação.

    • As comissões podem ser de nível único e multinível, ou seja, podem ser cobradas com o mesmo valor, independentemente do volume da transação/rotatividade ou variar de acordo com o tamanho. As informações correspondentes são exibidas na especificação.
    • As comissões podem ser cobradas imediatamente após a transação ou no final do dia/mês de negociação.
    • As comissões podem ser cobradas dependendo da direção da transação: pela entrada, pela saída ou pelos dois tipos de operações.
    • As comissões podem ser cobradas por lote ou por transação.
    • As comissões podem ser cobradas em diferentes quantidades: em dinheiro, porcentagem ou pontos.


  2. Significativamente otimizado e acelerado o trabalho no modo "Market Scan", quando várias passagens de teste são realizadas para todos os símbolos da Observação do Mercado.
  3. Ao calcular o lucro em pips, é levado em consideração o tamanho da transação ou posição agora. Anteriormente, o cálculo era realizado sem considerar o volume, como para um lote.
  4. Aprimorado gerenciamento gráfico dos resultados de otimização. Ao aumentar o zoom em um gráfico normal de otimização, você pode rolar por ele. Clique duplo em um ponto do gráfico agora seleciona o resultado correspondente na tabela de passagens.
Documentação atualizada.
13 dezembro 2019
MetaTrader 5 Platform Build 2280

Terminal

  1. Corrigido um bug que impedia a remoção de um Expert Advisor de um gráfico para o qual não há dados.
  2. Corrigida exibição de cabeçalhos do gráfico ao trabalhar com o Wine.

MQL5

  1. Acelerados carregamento e compilação de programas MQL5.
  2. Agora, com um clique duplo no gráfico, ao programa MQL5 é transferido um evento de clique único. Anteriormente, esses eventos não eram processados.
  3. Corrigido um erro na função StringTrimRight.
  4. Adicionada documentação para Funções DirectX para visualização em 3D.

Tester

  1. Corrigido um erro devido ao qual o símbolo para teste nas configurações podia estar vazio. Isso podia acontecer ao alternar entre contas de negociação contendo conjuntos diferentes de instrumentos de negociação. Agora, se o símbolo selecionado anteriormente nas configurações não estiver entre os disponíveis na conta de negociação, será automaticamente selecionado o primeiro símbolo disponível na Observação do Mercado.

MetaEditor

  1. Corrigido o carregamento do ícone do aplicativo ao reabrir as propriedades do projeto.

Atualizadas traduções da interface do usuário.
Correções de crash-logs.
6 dezembro 2019
MetaTrader 5 build 2265: funções DirectX para visualização 3D em MQL5 e configuração de ferramentas no testador de estratégias

Terminal

  1. Estendida a lista de colunas disponíveis na Observação do Mercado. Agora, na seção principal, você pode incluir até 40 parâmetros adicionais para instrumentos que estavam disponíveis anteriormente apenas na guia 'Detalhes'.




  2. Adicionado o realce da conta atual conectada e do servidor atual no Navegador. A função será útil se você usar muitas contas com diferentes corretoras.




  3. Atualizado design de bordas para gráficos. Eles se tornaram mais compactos, liberando mais espaço para informações úteis.




  4. Alterado o algoritmo para calcular os totais ao exibir o histórico de negociação na forma de posições. Agora eles são calculados a partir de registros reais.

    Para apresentar o histórico na forma de posições, o terminal utiliza informações sobre trades concluídos durante o período solicitado. Além disso, são exibidas apenas as posições fechadas durante esse período. Se a posição ainda estiver aberta ou o tempo de fechamento não cair dentro do intervalo selecionado, ela não será exibida. Nesse sentido, as leituras totais (lucro, comissão) podem ser diferentes ao visualizar posições ou ao visualizar ordens/trades.

    Por exemplo, você está visualizando o histórico da semana passada. Nesse período, foram concluídos 100 trades, 98 dos quais abriram e fecharam 20 posições. Os dois últimos trades abriram novas posições que ainda não estão fechadas. Nesse caso, ao visualizar o histórico na forma de trades, você verá 100 entradas, bem como leituras totais calculadas com base nelas. Ao visualizar o histórico na forma de posições, você verá 20 entradas coletadas com base em 98 trades. São estes dados que serão levados em consideração ao dar as leituras finais. Se a corretora cobrar uma comissão pelos trades de entrada, o tamanho final da comissão ao visualizar o histórico de trades e de posições será diferente, pois, neste último caso, os dois últimos trades não serão levados em consideração.

  5. Acelerada a inicialização de programas MQL5.
  6. Adicionada a opção /beta para o arquivo de instalação do terminal que permite baixar a versão beta do programa em vez da versão de lançamento. No modo normal, para obter uma versão beta, você deve primeiro instalar a versão de lançamento e depois atualizá-la. Agora você pode pular esta etapa, economizando tempo e tráfego. Exemplo de início de instalação:
    C:\mt5setup.exe /beta
  7. Corrigido o erro na exibição de requisitos de margem para ações (instrumentos do tipo "Exchange Stocks").
  8. Acelerado o trabalho de todos os componentes da plataforma graças ao uso do compilador Clang/LLVM. Em alguns casos, a aceleração atinge 20%.

MQL5

  1. Adicionados novos recursos e shaders do DirectX 11 para visualização em 3D. Agora você pode criar gráficos tridimensionais poderosos diretamente em MQL5.

    A nova classe CCanvas3D é uma extensão da classe de gráficos personalizados CCanvas. Está disponível no diretório \MQL5\Include\Canvas\. Ele implementa funções para renderizar objetos tridimensionais através do DirectX API.

    • Create — criar cenário.
    • Attach — vinculação do cenário ao gráfico.
    • Destroy — destruição do cenário.
    • ObjectAdd — adição de objeto-herdeiro da classe base CDXObject ao cenário.
    • Render — ciclo completo de renderização com limpeza de buffers e renderização de todos os CDXObjects adicionados através do método ObjectAdd.
    • RenderBegin — inicia a renderização do cenário, preenche o buffer de imagem com a cor especificada (ao usar o sinalizador DX_CLEAR_COLOR) e os buffers de profundidade (ao usar DX_CLEAR_DEPTH) e também define o buffer de cenário DXInputScene para shaders por padrão.
    • RenderEnd — completa a renderização do cenário e recebe o resultado no buffer interno. Se redraw==true, exibe a imagem no gráfico ao qual está anexada.
    • ViewMatrixGet — obter matrizes de exibição.
    • ViewMatrixSet — definir matrizes de exibição. A matriz não é compatível com os métodos ViewPositionSet, ViewRotationSet, ViewTargetSet, ViewUpDirectionsSet.
    • ViewPositionSet — definir o ponto de vista/posição da câmera.
    • ViewRotationSet — definir a matriz de rotação da câmera.
    • ViewTargetSet — definir o ponto para o qual aponta a câmera. Juntamente com o ViewUpDirectionsSet, é uma alternativa ao ViewRotationSet.
    • ViewUpDirectionsSet — definir a direção vertical da câmera. Juntamente com o ViewTargetSet, é uma alternativa ao ViewRotationSet.
    • ProjectionMatrixGet — obter matrizes de projeção.
    • ProjectionMatrixSet — definir matrizes de projeção.

    A documentação completa sobre a nova biblioteca estará disponível em breve.




  2. Adicionado suporte para trabalhar com bancos de dados SQLite diretamente em MQL5. Agora você pode executar facilmente consultas SQL sem criar ligações complexas. A nova extensão da biblioteca padrão assume todo o trabalho interno.

    As seguintes funções estão disponíveis:

    • DatabaseOpen — abre ou cria um banco de dados no arquivo especificado
    • DatabaseClose — fecha um banco de dados
    • DatabaseTableExists — verifica a existência de tabela no banco de dados
    • DatabaseExecute — executa uma consulta no banco de dados especificado
    • DatabasePrepare — cria um identificador de consulta, que pode ser executado usando DatabaseRead()
    • DatabaseRead — realiza o a transição para o próximo registro como resultado de uma consulta
    • DatabaseFinalize — exclui uma consulta criada em DatabasePrepare()
    • DatabaseTransactionBegin — inicia a execução da transação
    • DatabaseTransactionCommit — conclui a execução da transação
    • DatabaseTransactionRollback — executa a reversão de transações
    • DatabaseColumnsCount — obtém o número de campos na consulta
    • DatabaseColumnName — obtém o nome do campo pelo número
    • DatabaseColumnType — obter tipo de campo por número
    • DatabaseColumnSize — obtém o tamanho do campo em bytes
    • DatabaseColumnText — obtém o valor do campo do registro atual como uma string
    • DatabaseColumnInteger — obtém um valor int do registro atual
    • DatabaseColumnLong — obtém um valor long do registro atual
    • DatabaseColumnDouble — obtém um valor double do registro atual
    • DatabaseColumnBlob — obtém o valor do campo do registro atual como um array

    Os seguintes códigos de erro foram adicionados para trabalhar com novas funções:

    • ERR_MQL_DATABASE_INTERNAL (5120) — erro interno do banco de dados
    • ERR_MQL_DATABASE_INVALID_HANDLE (5121) — identificador de banco de dados inválido
    • ERR_MQL_DATABASE_TOO_MANY_OBJECTS (5122) número de objetos Database excedido
    • ERR_MQL_DATABASE_CONNECT (5123)erro de conexão ao banco de dados
    • ERR_MQL_DATABASE_EXECUTE (5124) erro ao realizar a consulta
    • ERR_MQL_DATABASE_PREPARE (5125) erro ao criar a consulta
    • ERR_MQL_DATABASE_NO_MORE_DATA (5126) — não há mais dados para leitura
    • ERR_MQL_DATABASE_STEP (5127) ошибка transição para o seguinte registro de consulta
    • ERR_MQL_DATABASE_NOT_READY (5128) os dados para leitura dos resultados da consulta ainda não estão prontos
    • ERR_MQL_DATABASE_BIND_PARAMETERS (5129) erro de substituição automática de parâmetro na consulta SQL

  3. Adicionada a nova propriedade de programas MQL5 para escolher o método de visualização por padrão.
    #property optimization_chart_mode "3d,InpX,InpY"
    Ao usá-la, você pode especificar o tipo de gráfico aberto uma vez concluída a otimização, bem como os parâmetros do programa para seus eixos X e Y.

    A propriedade define apenas a visualização do gráfico por padrão. O usuário pode alterá-la manualmente a qualquer momento através do menu de contexto.

  4. Adicionada a função MathArctan2. Retorna em radianos o valor de um ângulo cuja tangente é igual ao quociente de dois números especificados.
    double  MathArctan2(
       double  y      // coordenada y do ponto
       double  x      // coordenada x do ponto
       );
  5. Realizada otimização geral de programas para melhorar o desempenho e reduzir o consumo de recursos.
  6. MQL5: adicionados exemplos de cálculos matemáticos que podem ser executados no testador de estratégias. Você pode encontrá-los no diretório \MQL5\Experts\Examples\Math 3D\.
  7. Implementado controle mais rígido do escopo de visibilidade (namespaces).
  8. Adicionado carregamento de bibliotecas vinculadas ao usar bibliotecas .NET em programas MQL5. Se a biblioteca .NET usada exigir o uso de outras bibliotecas, o compilador tentará carregá-las automaticamente do diretório atual ou do diretório \MQL5\Libraries.
  9. Corrigido o trabalho com a hora no módulo MetaTrader para integração com Python. Agora, todos os dados de saída usam o horário do servidor de negociação ao qual o terminal está conectado.

Tester

  1. Muitos novos recursos e melhorias no testador de estratégia:


    Configurações personalizadas para instrumentos financeiros
    Agora você pode alterar as configurações do instrumento principal no qual ocorre o teste/otimização. Você dispõe de quase todos os parâmetros de especificação: volumes, modo de negociação, requisitos de margem, modo de execução e muito mais. Desse modo, para verificar o EA sob outras condições de negociação, agora é opcional criar um símbolo personalizado e carregar o histórico nele. Você pode simplesmente alterar as configurações do instrumento padrão.



    Ao alterar a especificação de um símbolo, o ícone de configurações, bem como o ícone do próprio símbolo, são marcados com um asterisco na lista. Assim, você sempre saberá que o teste vem com configurações personalizadas.




    Configurações/EAs/gráficos recentes
    Para configurar o teste ou a otimização rapidamente, use os novos comandos do menu de contexto. Escolha as últimas configurações do testador utilizadas, os gráficos ou programas mais recentes:




MetaEditor

  1. adicionada o recurso para compilar projetos С/С++ e Python diretamente do MetaEditor. Agora, ao usar o editor embutido, você pode realizar projetos multilíngues.

    Se no seu computador já estiverem instalados os compiladores respectivos, o MetaEditor irá detectá-los e adicioná-los às configurações. Você também pode especificar o caminho para os componentes necessários, acessando a guia "Compiladores". Se os componentes ainda não estiverem instalados, você pode baixá-los clicando em "Instalar" no lado oposto do campo correspondente.




    Depois disso, você poderá trabalhar com projetos em С/С++ e Python da mesma maneira que nos programas regulares MQL5.

  2. Agora dentro do diretório Shared Projects, destinado a trabalhar com projetos de grupo através do MQL5 Storage, você pode criar subprojetos. Anteriormente, apenas podiam ser criados projetos individuais no nível superior.
  3. Atualizado depurador embutido.
  4. Corrigida a adição de cabeçalho de função ao usar estilizador de código.
  5. Comandos para navegar para a posição anterior e seguinte do cursor agora estão disponíveis não apenas no menu "Visualizar", mas também na barra de ferramentas.
  6. Agora você pode usar espaços nos nomes dos projetos.

Android

  1. Adicionado acesso rápido para depositar/retirar fundos da conta de negociação no site da corretora.

    Agora você não precisa procurar as funções correspondentes em sua conta no site da corretora. Os comandos para navegar rapidamente para as páginas de depósito e retirada da contas estão disponíveis diretamente nos terminais — na seção de contas e negociação:



    • Os comandos de depósito/retirada estão disponíveis apenas se as funções correspondentes estiverem ativadas para a conta de negociação no lado da corretora.
    • O terminal de negociação não realiza nenhuma operação de depósito/retirada da conta. As funções internas redirecionam o usuário apenas para as páginas da Web da corretora correspondentes.

  2. Agora as posições no histórico são classificadas por data de fechamento.
  3. As posições fechadas por Stop Loss ou Take Profit agora são realçadas com linhas verticais vermelhas e verdes na seção de histórico.
  4. À especificação do instrumento de negociação adicionados novos campos:

    • Categoria — propriedade usada para marcação adicional de instrumentos financeiros. Por exemplo, pode indicar setores de mercado relacionados com o símbolo: Agricultura, Petróleo e Gás, etc. Exibida apenas se as informações respectivas forem fornecidas pela corretora.
    • Bolsa de valores — aqui é indicado o nome da bolsa ou da plataforma na qual é negociado o símbolo. Exibida apenas se as informações respectivas forem fornecidas pela corretora.

  5. Adicionada indicação de status 'Margin Call' à seção de negociação. Quando ele ocorrer, as opções 'Margem', 'Margem livre ' e 'Nível da Margem' ficam vermelhas.
  6. Corrigida exibição do botão de navegação para a seção de senhas descartáveis em tablets.
  7. Várias correções e melhorias.

iPhone/iPad

  1. Adicionada a possibilidade de mudar rapidamente para depositar/retirar fundos da conta de negociação no site da corretora. Os detalhes do trabalho são fornecidos acima na descrição das alterações de terminal para Android.



  2. Adicionado suporte a layout escuro para iOS/iPadOS.
  3. Seção de trabalho com senhas OTP agora disponível na versão para iPad.
  4. As posições fechadas por Stop Loss ou Take Profit agora são realçadas com linhas verticais vermelhas e verdes na seção de histórico.
  5. Agora as posições no histórico são classificadas por data de fechamento. Se a posição ainda não foi fechada, para classificação é usada a hora de abertura.
  6. Várias correções e melhorias.


18 outubro 2019
MetaTrader 5 build 2190

Terminal

  1. Corrigida a classificação dos programas MQL5 no navegador.

MQL5

  1. Corrigido erro de compilação que ocorria ao usar variáveis estáticas locais se declarado input group no programa.

VPS

  1. Corrigidos erros que ocorriam ao solicitar o log de uma hospedagem.

Tester

  1. Aprimorada exibição de gráficos de otimização tridimensionais.
  2. Corrigido o uso de frames durante o otimização 'forward'. Agora todos os frames da otimização principal e da 'forward' estão disponíveis na função OnTesterDeinit.
  3. Corrigida a construção da árvore de caracteres nas configurações do testador.

Adicionada tradução da interface do usuário para punjabi (Índia).

Documentação atualizada.

Correções de crash-logs.

A atualização estará disponível através do sistema Live Update.

5 outubro 2019
MetaTrader 5 build 2170: escopos em MQL5, atualização global do testador de estratégia e hospedagem integrada

Terminal

  1. Completamente redesenhado o gerenciamento do serviço de Hospedagem Virtual embutido. Todas as informações sobre o terminal alugado, bem como as funções de migração do ambiente, parada e inicialização, agora estão disponíveis em uma guia separada da janela "Caixa de Ferramentas".

    Antes, para trabalhar com hospedagem virtual, era usado o menu de contexto da conta no Navegador. Agora todas as informações e comandos de controle necessários estão sempre à sua vista na guia "VPS":




    No lado esquerdo, estão disponíveis informações básicas de assinatura:

    • Dados de conexão: comparação de atrasos na rede entre o seu terminal no servidor-hospedagem e o computador local.
    • A conta comercial - para a qual é alugada a hospedagem - e o plano de dados.
    • Identificador de assinatura exclusivo. Ao clicar nele, você será direcionado para a seção "Hospedagem" no seu perfil da MQL5.community, nele você pode gerenciar sua assinatura.
    • Data de formalização e status atual. Se sua hospedagem for interrompida, você saberá imediatamente sobre isto.

    Usando o botão Iniciar/Parar, você pode rapidamente parar e iniciar o terminal virtual.

    A parte direita mostra informações sobre o equipamento no servidor-hospedagem, bem como gráficos de consumo de recursos usados pelo seu terminal. Se o seu Expert Advisor ou indicador usar uma quantidade excessiva de memória ou tempo do processador, você verá isso imediatamente e poderá responder oportunamente.

    Também estão disponíveis informações sobre a migração mais recente do ambiente de negociação, bem como comandos para migrar novamente. Agora você não vai se esquecer de transferir o ambiente depois de comprar uma hospedagem.

    Agora, o aluguel de hospedagem virtual também é realizado na guia "VPS". O processo em si não mudou, ainda requer apenas algumas etapas. Basta escolher uma tarifa e um sistema para pagamento. O melhor servidor para se conectar à sua corretora é selecionado automaticamente.




  2. Adicionada a possibilidade de mudar rapidamente para depositar/retirar fundos da conta de negociação no site da corretora.

    Agora você não precisa procurar as funções correspondentes em sua conta no site da corretora. Os comandos para navegar rapidamente para as páginas de depósito e retirada ficaram disponíveis diretamente nos terminais — no menu de contas no Navegador e na guia de negociação na Caixa de Ferramentas:



    • Os comandos de depósito/retirada estão disponíveis apenas se as funções correspondentes estiverem ativadas para a conta de negociação no lado da corretora.
    • O terminal de negociação não realiza nenhuma operação de depósito/retirada da conta. As funções internas redirecionam o usuário apenas para as páginas da Web da corretora correspondentes.
  3. Adicionados novos campos à especificação do instrumento de negociação:

    Categoria
    A propriedade é usada para marcação adicional de instrumentos financeiros. Por exemplo, pode indicar setores de mercado relacionados com o símbolo: Agricultura, Petróleo e Gás, etc. Exibida apenas se as informações respectivas forem fornecidas pela corretora.

    Bolsa de valores
    Aqui é indicado o nome da bolsa ou da plataforma na qual é negociado o símbolo. Exibida apenas se as informações respectivas forem fornecidas pela corretora.

    Comissão
    Aqui são exibidas informações sobre as taxas cobradas pela corretora ao fazer trades do instrumento. São mostrados todos os detalhes do cálculo:

    • As comissões podem ser de nível único e multinível, ou seja, pode ser cobrado o mesmo valor, independentemente do volume do trade/lote ou variar de acordo com seu tamanho. Na especificação são mostradas informações correspondentes.
    • As comissões podem ser cobradas imediatamente após a transação ou no final do dia/mês de negociação.
    • As comissões podem ser cobradas dependendo da direção do trade: pela entrada, pela saída ou pelos dois tipos de operações.
    • As comissões podem ser cobradas por lote ou por trade.
    • As comissões podem ser cobradas em diferentes formatos: dinheiro, porcentagem ou pontos.

    Por exemplo, a entrada a seguir significa que uma comissão é cobrada imediatamente após a entrada e saída de transações. Se o volume da transação for de 0 a 10 lotes, será cobrada uma comissão de US$ 1,2 por operação. Se o volume da transação for de 11 a 20 lotes, será cobrada uma comissão de US$ 1,1 por cada lote da transação.
    Comissão | Imediatamente pelo volume, pela transação de entrada/saída
    0  - 10  | US$ 1.2 por transação
    11 - 20  | US$ 1.1 por transação



  4. À especificação dos instrumentos adicionados campos adicionais para opções:

    • Tipo de opçõa — call ou put
    • Basis — nome do instrumento da opção
    • Strike price — preço de execução da opção

  5. Adicionado suporte à transmissão das "gregas" para opções: delta, gama, vega, teta, rô. Agora, para tais instrumentos, as corretoras podem transmitir informações adicionais na seção de estatísticas da observação do mercado, dando aos comerciantes mais oportunidades de análise:



  6. Agora, a ferramenta "Mira" mostra a distância entre os níveis de preços, não apenas em pips, mas também em porcentagem:




  7. Agora, ao executar operações nos modos de execução "A mercado" e "Em bosla", o preço final da transação é exibido nas caixas de diálogo de negociação se for conhecido no momento em que recebida a resposta da corretora:




  8. Corrigido um erro devido ao qual o comando "Mostrar tudo" na Observação do mercado em alguns casos não listava todos os instrumentos de negociação disponíveis.

MQL5

  1. Alterado o funcionamento do escopo, tornando a MQL5 mais próxima de C++. Os programadores MQL5 terão muito mais liberdade para usar bibliotecas de terceiros. Eles não precisarão mais modificá-las para que todos os identificadores tenham uma única aparência.

    Exemplo: no código são declaradas duas estruturas com o mesmo nome, mas em classes diferentes. Anteriormente, essa declaração gerava o erro de compilação "identifier already used". Agora esse código será compilado e executado com sucesso. Ao mesmo tempo, para acessar corretamente a variável/estrutura/função desejada fora de seu escopo, a classe deve ser indicada, neste caso, CBar::Item.
    class CFoo
      {
    public:
       struct Item { int x; };
      };
    //+------------------------------------------------------------------+
    class CBar
      {
    public:
       struct Item { int x; };
      };
      
    CBar::Item item;  // declaração válida da estrutura Item a partir da classe Bar
    Item       item;  // declaração inválida
    Adicionado suporte ao espaço de nomes (namespace), dando ainda mais liberdade ao usar códigos/bibliotecas de terceiros em nossos programas.

    #define PrintFunctionName() Print(__FUNCTION__)
    
    namespace NS
    {
    void func()
      {
       PrintFunctionName();
      }
    
    struct C
      {
       int               x;
                         C() { PrintFunctionName(); };
      };
    }
    
    struct C
      {
       int               x;
                         C() { PrintFunctionName(); };
      };
    
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    void func()
      {
       PrintFunctionName();
      }
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       func();
       NS::func();
    
       C c;
       NS::C ac;
      }
    Como resultado da execução, o programa mostrará as seguintes linhas:
    2019.09.18 13:39:35.947    TestScript (AUDCAD,H1)    func
    2019.09.18 13:39:35.949    TestScript (AUDCAD,H1)    NS::func
    2019.09.18 13:39:35.949    TestScript (AUDCAD,H1)    C::C
    2019.09.18 13:39:35.949    TestScript (AUDCAD,H1)    NS::C::C

  2. Acelerado acesso a dados de timeseries com ajuda das funções iTime, iOpen, iHigh, iLow, iClose, iVolume, iTickVolume, iSpread.

  3. Adicionado suporte ao atributo "=delete". Ele permite restringir o uso de métodos de classe específicos.
    class A
      {
       void              operator=(const A &)=delete;    // proíbe o operador de cópia de objeto
      };
    
    class B : public A
      {
      };
    
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       A a1,a2;
       B b1,b2; 
      
       a1=a2;
       b1=b2;
      }
    Neste exemplo, para as linhas "a1=a2" e "b1=b2", o compilador mostra os erros:
    attempting to reference deleted function 'void A::operator=(const A&)'
       function 'void A::operator=(const A&)' was explicitly deleted here

    attempting to reference deleted function 'void B::operator=(const B&)'
       function 'void B::operator=(const B&)' was implicitly deleted because it invokes deleted function 'void A::operator=(const A&)'

  4. À enumeração ENUM_SYMBOL_INFO_STRING adicionados os seguintes valores:

    • SYMBOL_CATEGORY: categoria do símbolo. Utilizado para marcação adicional de instrumentos financeiros. Por exemplo, pode indicar setores de mercado relacionados com o símbolo: Agricultura, Petróleo e Gás, etc.
    • SYMBOL_EXCHANGE: é o nome da bolsa ou plataforma na qual o símbolo é negociado.

  5. Adicionado o suporte ao fechamento de posições pelo princípio FIFO.

    • À enumeração ENUM_ACCOUNT_INFO_INTEGER adicionado o valor ACCOUNT_FIFO_CLOSE: indica que a posição pode ser fechada apenas de acordo pelo princípio FIFO. Se o valor da propriedade for true, as posições de cada símbolo poderão ser fechadas somente na ordem em que foram abertas, isto é, primeiro a mais antiga, depois a mais recente etc. Se você tentar fechar as posições em uma ordem diferente, será mostrado um erro. Para contas sem registro com cobertura de posições (ACCOUNT_MARGIN_MODE!=ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) a propriedade sempre é igual a false.
    • Adicionado o novo código de retorno do servidor TRADE_RETCODE_FIFO_CLOSE: solicitação rejeitada, pois para a conta de negociação definida a regra "Permitido fechar posições existentes apenas segundo o princípio FIFO".

    O fechamento de posições podem ser realizado de três maneiras:

    • Fechamento através do terminal do cliente: é o encerramento das posições realizado manualmente pelo trader, com a ajuda de um robô de negociação, por meio do serviço de "Sinais", etc. Se não tentar fechar posições segundo o princípio FIFO, o trader verá o erro correspondente.
    • Fechamento quando acionado Stop Loss ou Take Profit: esses pedidos são processados no lado do servidor, respectivamente, e as posições de fechamento nesse caso são iniciadas não pelo profissional (terminal), mas pelo próprio servidor. Se para uma posição for acionado um Stop Loss ou Take Profit e essa posição não corresponder com o princípio FIFO (existem posições anteriores para o mesmo instrumento), ela não será fechada.
    • Se acionado Stop out, essas operações também serão acionadas no lado do servidor. No modo normal, quando desativado o fechamento segundo princípio FIFO, se acontecer um Stop out, as posições são fechadas, começando pela menos lucrativa. Se ativada esta opção, para as posições não lucrativas encerradas, será adicionalmente verificado seu tempo de abertura. O servidor determina as posições mal-sucedidas de cada símbolo, localiza a posição mais antiga de cada símbolo e fecha a que mais causa perdas nas posições encontradas.

  6. Adicionada a possibilidade de agrupar parâmetros por meio do "input group". Isso permite que você separe visualmente alguns parâmetros de outros com base na lógica incorporada nos parâmetros.

    Exemplo de EA no qual o bloco de parâmetros de entrada é dividido segundo sua finalidade:
    input group           "Signal
    input int             ExtBBPeriod = 20;         // Bollinger Bands period
    input double          ExtBBDeviation=2.0;       // deviation
    input ENUM_TIMEFRAMES ExtSignalTF=PERIOD_M15;   // BB timeframe
    
    input group           "Trend"
    input int             ExtMAPeriod = 13;         // Moving Average period
    input ENUM_TIMEFRAMES ExtTrendTF=PERIOD_M15;    // MA timeframe
    
    input group           "ExitRules"
    input bool            ExtUseSL      = true;     // use StopLoss
    input int             Ext_SL_Points = 50;       // StopLoss in points
    input bool            ExtUseTP      = false;    // use TakeProfit
    input int             Ext_TP_Points = 100;      // TakeProfit in points
    input bool            ExtUseTS      = true;     // use Trailing Stop
    input int             Ext_TS_Points = 30;       // Trailing Stop in points
    
    input group           "MoneyManagement"
    sinput double         ExtInitialLot =0.1;       // initial lot value
    input bool            ExtUseAutoLot =true;      // automatic lot calculation
    
    input group           "Auxiliary"
    sinput int            ExtMagicNumber =123456;   // EA Magic Number
    sinput bool           ExtDebugMessage=true;     // print debug messages
    Ao iniciar este EA no testador de estratégia, você pode clicar duas vezes no nome do grupo para recolher e expandir o bloco de parâmetros de entrada, além de selecionar todos os seus parâmetros com um clique na caixa de seleção do grupo para otimização.




  7. Corrigido um erro que acontecia ao importar funções de uma DLL cujos nomes se cruzavam com as funções MQL. Exemplo:
    #import "lib.dll"
    int func();
    #import
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    int func()
      {
       return(0);
      }
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       Print( func() );
      }
    Anteriormente, a compilação deste tipo de código gerava o erro:
    'func' - ambiguous call to overloaded function with the same parameters
    could be one of 2 function(s)
       int func()
       int func()
    Agora, em vez do erro padrão, uma função MQL interna é usada como tendo uma prioridade mais alta. Para chamar a função importada, você deve especificar explicitamente o escopo:
    void OnStart()
      {
       Print( lib::func() );
      }
  8. Corrigida a especificação do tempo para notícia econômicas do calendário. Agora, a hora do evento é transmitida levando em consideração o fuso horário do servidor de negociação ao qual o terminal está conectado, e não o fuso horário do computador local.
  9. Corrigido o uso excessivo de memória nas funções CopyTicks e CopyTicksRange.

Signals

  1. Corrigida exibição de gráficos de sinais ao trabalhar no Wine (Mac OS e Linux).

Tester

  1. Testador de estratégia significativamente atualizado: adicionada página inicial, redesenhada página de configurações, aprimorada usabilidade.

    Página inicial
    Agora, ao iniciar o testador, em vez de muitas configurações, o usuário deve escolher uma das tarefas típicas e rapidamente começar a resolvê-la. Esta novidade é direcionada principalmente para usuários que não têm experiência.

    Identificamos várias tarefas básicas para testar e otimizar estratégias e as apresentamos graficamente na primeira página. Além disso, a partir da página inicial, agora você pode reiniciar rapidamente uma das tarefas anteriores. Se você executar muitas tarefas, e todas elas não couberem na lista, use a barra de pesquisa. Ela permite encontrar testes por qualquer parâmetro: nome do programa, por instrumento, por período gráfico, por tipo de simulação, etc.




    Omissão de parâmetros desnecessários
    Escolhida um das tarefas na página inicial, você é reencaminhado para um ajuste mais preciso dos parâmetros de teste: escolha de EA, de instrumento, de período gráfico, etc. Para facilitar o trabalho, estão ocultos todos os parâmetros que não são necessários para a tarefa selecionada. Por exemplo, se você escolher cálculos matemáticos, precisará definir apenas dois parâmetros: escolha um programa para teste e um modo de otimização. As configurações para o período de teste, atrasos e geração de ticks serão ocultadas.




    Configurações de teste convenientes
    Por conveniência, foram reorganizados alguns parâmetros na página de configurações. Além disso, adicionadas informações estendidas para os parâmetros de atraso e de visualização. Além disso, as configurações de teste agora podem ser salvas e carregadas manualmente, o que permite que você retorne rapidamente aos resultados anteriores.




    Você pode mudar rapidamente para a edição de programas no MetaEditor.

    Cálculo de lucro em pips
    Agora, nas configurações, você pode ativar o cálculo do lucro em pips. Isso permite acelerar o processo de teste, pois os lucros não são convertidos na moeda do depósito através de outras moedas (e, portanto, você não precisa fazer o download do histórico de preços). Também neste modo, não são calculados swaps e comissões.




    Lembre-se de que, ao calcular o lucro em pips, o volume de transações não importa. Para cada um, é sempre calculado apenas o número de pips ganhos/perdidos. Também neste modo, praticamente não há controle de margem. Use-o apenas para uma rápida avaliação aproximada da estratégia e verifique os resultados em modos mais precisos.

    Melhorias gerais
    O botão Iniciar/Parar o teste, bem como a barra de progresso foram movidos para a barra de guias. Isso permite que você controle o processo, não importa em que seção do testador de estratégia você esteja. Além disso, comandos de início e parada de teste foram adicionados aos menus de contexto das seções de configuração e de entrada de parâmetros.




  2. O gráfico de otimização agora pode ser exibido na área de trabalho principal do terminal e não, em uma seção separada do testador de estratégia. Isso permite que você use significativamente mais espaço na tela, tornando análise de dados mais conveniente. Além disso, foi atualizado o sistema de visualização 3D.




  3. Adicionado o armazenamento de cache de otimização para o modo "Todos os Símbolos na Observação do Mercado".
  4. Adicionado o armazenamento de cache de teste.

    Anteriormente, os resultados das tarefas concluídas eram salvos em arquivos apenas durante a otimização dos EAs. Agora, os arquivos de cache são salvos durante um teste único, permitindo que você retorne aos cálculos anteriores a qualquer momento, para ver todas as estatísticas, bem como gráficos de saldo, patrimônio e depósito. Também no futuro, isso permitirá comparar os resultados dos testes.

    Para carregar resultados de testes anteriores, use a nova página inicial do testador: clique em "Resultados Anteriores" e selecione o arquivo desejado:




  5. Significativamente acelerados teste e otimização, incluindo com uso de Rede em nuvem MQL5 Cloud Network.
  6. Corrigidos erros e otimizado o trabalho com frames.

MetaEditor

  1. Adicionada a possibilidade de configurar o estilizador de código.

    No MetaEditor está embutido um estilizador de código que permite formatar automaticamente o código fonte de um programa de acordo com um padrão específico. Agora, além do estilo usual de design, você pode usar outros padrões populares. Para fazer isso, abra as configurações do MetaEditor e selecione o estilo desejado:




    Além disso, para o estilizador, agora você pode definir os seguintes parâmetros:

    Espaços de recuo
    Determina o número de espaços inseridos ao alinhar estruturas aninhadas:
    if(condition)
      {
       //---
      }

    Substituir tabulação por espaços
    Quando ativada esta opção, o estilizador substitui todos as tabulações no código por espaços. O número de caracteres de tabulação é determinado na seção "Geral".

    Excluir linhas em branco
    Quando ativada esta opção, o estilizador exclui do código todas as linhas que contêm apenas um caractere de quebra de linha.

    Inserir espaços após vírgulas e após ponto e vírgula
    Quando ativada esta opção, o estilizador separa visualmente os constructos contendo uma lista de elementos. Por exemplo:
    // antes de estilizar
    ParameterGetRange("InpX",enable,x_cur,x_start,x_step,x_stop);
    // após estilizar
    ParameterGetRange("InpX", enable, x_cur, x_start, x_step, x_stop);

    Inserir espaços ao redor dos operadores de declaração
    Quando ativada esta opção, o estilizador inserirá espaços ao redor dos operadores de atribuição, de igualdade, de comparação, etc. Por exemplo:
    // antes de estilizar
    if(x==1&y!=2)
      {
       int a=0;
      }
    // após estilizar
    if(x == 1 & y != 2)
     {
      int a = 0;
     }

  2. Ao menu de contexto dos favoritos do arquivo adicionado o comando "Mostrar no Navegador". Ele permite que você encontre rapidamente o arquivo aberto para edição na estrutura de pastas do editor.




  3. Corrigida a exibição da palavra-chave union nas dicas de balão.

Adicionada tradução da interface do usuário para 18 novos idiomas:

  • Região européia — sueco, lituano, dinamarquês, letão, estoniano, sérvio, esloveno, eslovaco, finlandês, georgiano
  • Região asiática — javanês, marata, bengali, punjabi, tamil, telugu
  • Região africana — suaíli, hausa

No total, a interface da plataforma agora está traduzida para 50 idiomas e, no total, eles são nativos para mais de 4 bilhões de pessoas.

Para mudar a interface para o seu idioma, use o menu "Exibir \ Idioma" na parte superior do terminal.

Documentação atualizada.

Correções de crash-logs.

12 junho 2019
MetaTrader 5 build 2085: integração com Python e inúmeros aprimoramentos no testador de estratégias

Terminal

  1. Adicionada uma API para solicitar dados do terminal MetaTrader 5 através de aplicativos usando o Python.

    Python é uma linguagem de programação moderna de alto nível para o desenvolvimento de scripts e aplicativos. Possui muitas bibliotecas para aprendizado de máquina, automação de processos, análise de dados e visualização.

    O pacote MetaTrader para Python é projetado para o recebimento conveniente e rápido de informações de negociação através de comunicação entre processos diretamente do terminal MetaTrader 5. Os dados recebidos desta maneira podem ser utilizados para cálculos estatísticos e aprendizado de máquina.



    Conectando

    1. Baixe a última versão do Python Python da página https://www.python.org/downloads/windows
    2. Ao instalar o Python, marque a caixa "Add Python X.X to PATH%" para poder executar scripts Python a partir da linha de comando.
    3. Instale o módulo MetaTrader5 a partir da linha de comando
      pip install MetaTrader5
    4. Adicione os pacotes matplotlib e pytz
      pip install matplotlib
      pip install pytz

    Funções

    • MT5Initialize — estabelece a conexão com o terminal MetaTrader 5
    • MT5Shutdown — fecha a conexão previamente estabelecida com o terminal MetaTrader 5
    • MT5TerminalInfo — obtém o status e os parâmetros do terminal MetaTrader 5 conectado
    • MT5Version — retorna a versão do terminal MetaTrader 5
    • MT5WaitForTerminal — aguarda enquanto o terminal MetaTrader 5 se conecta ao servidor de negociação
    • MT5CopyRatesFrom — recebe barras do terminal MetaTrader 5 a partir da data especificada
    • MT5CopyRatesFromPos — recebe barras do terminal MetaTrader 5 a partir do índice especificado
    • MT5CopyRatesRange — recebe barras no intervalo de datas especificado a partir do terminal MetaTrader 5
    • MT5CopyTicksFrom — recebe ticks do terminal MetaTrader 5 a partir da data especificada
    • MT5CopyTicksRange — recebe ticks no intervalo de datas especificado a partir do terminal MetaTrader 5


  2. Otimizadas as seções "Mercado" e "Sinais". Agora os mostruários de produtos e de sinais funcionam até sete vezes mais rápido, tornando o trabalho com serviços de negociação integrados mais confortável.




  3. Adicionado suporte para "Mercado", "Sinais" e "Pesquisa" no Wine. Agora usuários de Linux e de Mac OS têm acesso à maior loja de aplicativos de negociação e ao serviço de cópia automática de operações.




  4. Sistema embutido de aprendizado traduzido para mais de 30 idiomas, incluindo espanhol, chinês, português e alemão. Para ver dicas interativas em outro idioma, basta alternar o idioma da interface através do menu Exibir.




  5. Adicionado o recurso para confirmar telefones e e-mail, especificado ao abrir contas preliminares e de demonstração.

    A verificação de dados é determinada pela corretora. Se estiver habilitada, ao solicitar uma conta, os códigos de confirmação serão automaticamente enviados ao trader, e campos especiais aparecerão na caixa de diálogo para serem preenchidos:




    Os códigos de confirmação são válidos por vários minutos. Se, no tempo previsto, ele não os usar para abrir uma conta, o procedimento precisará ser repetido.

    Antes de enviar os códigos, o sistema verifica se o telefone/e-mail especificado foi confirmado anteriormente. Se o trader já tiver realizado a verificação desses dados de seu computador, a abertura de conta ocorrerá como antes — sem confirmação adicional. Assim, os traders não enfrentarão dificuldades ao solicitar contas.

  6. Estendidas possibilidades de pagamento para serviços MQL5.community através do sistema PayPal. Agora, você pode fazer compras com um clique.

    Como isso funciona
    Durante a compra, após a autorização com sua conta do PayPal, você pode autorizar pagamentos adicionais à nossa empresa:





    Se você concordar, você pode fazer todas as compras subsequentes com um clique, simplesmente pressionando o botão de uma conta salva anteriormente:




    Se você clicar em "Cancelar e retornar para MetaQuotes Software Corp.", você continuará a fazer pagamentos como antes, fazendo login no PayPal manualmente a cada compra.
    O site MQL5.com/plataforma MetaTrader 5 não armazena seus detalhes de pagamento. A verificação de dados no caso de depósito na conta, compra no Mercado ou assinatura de Sinal é realizada do lado do sistema de pagamento.
    Você sempre pode se recusar a vinculação de sua conta do PayPal e comprar serviços como de costume.

  7. Inúmeras melhorias e otimização do trabalho do testador de estratégias.

    Fizemos um enorme trabalho oculto sobre a otimização interna do testador de estratégia e sobre a correção de erros. Tudo isso acelerou muito o teste em várias tarefas e também aumentou a estabilidade geral do trabalho. Principais melhorias:

    Trabalho com frames
    Significativamente otimizado trabalho com frames em agentes locais, de rede e de nuvem. Agora eles são processados mais rapidamente e nunca são ignorados.
     
    Distribuição de tarefas entre agentes
    Agora, durante a execução da otimização, o testador de estratégias pode redistribuir tarefas em tempo real. Se um novo agente estiver disponível (ou um dos anteriormente utilizados tiver sido liberado), o testador gerará automaticamente para ele um pacote de tarefas, daquelas que já foram distribuídas entre outros agentes. Da mesma forma, as tarefas são redistribuídas quando são detectados agentes muito lentos — suas tarefas são emitidas simultaneamente para outros agentes a fim de concluir a otimização mais rapidamente.

    Também acelerada significativamente a distribuição de tarefas no modo de cálculos matemáticos.
     
    Estatísticas de otimização no diário
    Expandido o log do processo de otimização — são exibidas estatísticas de uso mais detalhadas da MQL5 Cloud Network, ativação/desativação de agentes da nuvem, etc.

    Trabalho no modo de logs de otimização completos
    Para economizar recursos durante a otimização, o log do testador de estratégias não exibe todas as mensagens dos agentes. Para forçá-los a exibir, é fornecido o modo "Logs de otimização completos", o qual é ativado através do menu de contexto do log do testador. Anteriormente, a inclusão desse modo diminuía significativamente o processo de otimização, agora quase não tem efeito no tempo de cálculo.

    MQL5 Cloud Network
    Otimizados agentes de teste de nuvem. Agora as tarefas são distribuídas de maneira mais eficiente.

  8. O calendário embutido inclui mais de 900 indicadores de 18 das maiores economias do mundo: Estados Unidos, União Europeia, Japão, Reino Unido, etc. Todos os dados são coletados em tempo real a partir de fontes primárias, permitindo responder à situação global oportunamente e tomar decisões de negociação informadas.

    O calendário econômico está disponível não apenas em terminais e sites, mas também em dispositivos móveis. O aplicativo desejado agora pode ser diretamente acessado do menu de contexto do calendário no terminal:




    Escolha sua plataforma e baixe o aplicativo Tradays:


    Além de todas as funções do calendário da plataforma desktop, a versão móvel pode criar lembretes de eventos, bem como um histórico completo de indicadores na forma de gráficos e tabelas.

  9. Adicionada geração automática de histórico de barras para instrumentos personalizados ao importar o histórico de ticks. Agora, ao alterar dados de ticks de um instrumento personalizado, as barras correspondentes são automaticamente recalculadas:

    • Isso permite evitar discrepâncias de dados.
    • Depois de importar os dados de ticks (se suficientemente completo), o terminal os calcula por si mesmo, sem perder tempo importando barras manualmente.

    As alterações dizem respeito à importação de tiques através da interface do terminal e à atualização de tiques através de programas MQL5 usando a função CustomTicks*. Quaisquer alterações nos dados de ticks levam ao recálculo das barras de minutos correspondentes do instrumento personalizado.

  10. Corrigida a atualização de informações na "Janela de dados" ao usar o cursor em forma de cruz no gráfico desencaixado.
  11. Corrigido armazenamento do histórico de ticks. Anteriormente, quando havia vários ticks em um milissegundo, a ordem ao salvar os ticks podia ser violada.
  12. Corrigida plotagem de gráficos com um histórico de preços muito curto (menos de um dia) no servidor.

MQL5

  1. Adicionado o suporte a depuração de serviços MQL5. Agora você pode verificar programas de forma semelhante a EAs e indicadores.
  2. Novos tipos de cálculo de lucro e de margem adicionados à enumeração ENUM_SYMBOL_CALC_MODE:

    • SYMBOL_CALC_MODE_EXCH_BONDS — cálculo para títulos de bolsa de valores.
    • SYMBOL_CALC_MODE_EXCH_STOCKS_MOEX — cálculo para ações negociadas na Bolsa de Valores de Moscou.
    • SYMBOL_CALC_MODE_EXCH_BONDS_MOEX — cálculo para títulos do tesouro negociados na Bolsa de Valores de Moscou.

  3. Adicionada a função TesterDeposit que permite emular a operação de depósito de dinheiro na conta durante o processo de teste. A função pode ser útil ao verificar várias estratégias de gerenciamento de dinheiro.
    bool  TesterDeposit(
       double money      // montante do depósito
       );
  4. Agora durante a execução do método OnDeinit o programa MQL5 não recebe nenhum evento do terminal. Anteriormente, os programas não conseguiam concluir corretamente a desinicialização (por exemplo, excluir todos os objetos por trás deles) devido ao recebimento de outros eventos.
  5. Corrigidos erros que ocorriam ao alterar o histórico de ticks do dia atual em ferramentas de negociação personalizadas.
  6. Corrigido um bug que fazia com que o programa diminuísse seu desempenho ao usar um grande número (dezenas de milhares) de objetos gráficos.
  7. Corrigida latência do terminal devido ao acesso frequente ao histórico de negociação a partir de programas MQL5.
  8. Corrigido erro da função iBarShift. Ao marcar o item "exact=false" e solicitar fora do intervalo, era retornado o número da barra mais antiga, excluindo a mais recente.

Tester

  1. Corrigida a definição de número de núcleos em computadores com processadores com vários nós NUMA.
  2. Adicionada a possibilidade de executar testes e otimização com depósito inicial zero, agora você pode emular o depósito de fundos durante testes usando a nova função TesterDeposit.

MetaEditor

  1. Agora o comando estilo de código pode ser adicionado à barra de ferramentas para acesso rápido.
  2. Corrigida a transição para a definição e exibição de informações sobre os parâmetros ao usar caracteres não-Unicode como nomes e variáveis de função.

Documentação atualizada.

A atualização estará disponível através do sistema LiveUpdate.

21 fevereiro 2019
MetaTrader 5 build 2005: calendário econômico, programas MQL5 como serviços e APIs para linguagem R

Terminal

  1. Calendário econômico embutido totalmente atualizado.

    O Calendário econômico foi desenvolvido propriamente por nós. Mais de 600 indicadores e indicadores das 13 principais economias do mundo estão disponíveis: os EUA, a União Europeia, o Japão, a Grã-Bretanha, o Canadá, a Austrália, a China, etc. Todos os dados são coletados em tempo real a partir de fontes abertas.

    Além de atualizar o conteúdo, filtros de eventos avançados estão disponíveis no calendário: por hora, por prioridade, por moeda e por país.

    Além disso, os dados do calendário agora podem ser consultados em programas MQL5. Mais informações sobre isso são fornecidas abaixo.




  2. Adicionado um novo tipo de programa MQL5, Serviços. Eles permitem que você crie suas próprias fontes de preços para o terminal, transferindo preços vindos de sistemas externos em tempo real, como fazem os servidores de negociação das corretoras.

    Ao contrário de EAs, de indicadores e de scripts, os serviços não estão vinculados a um gráfico específico. Eles correm em segundo plano e começam a trabalhar automaticamente quando é iniciado o terminal (se eles não foram forçados a parar).

    Para gerenciar serviços, ao Navegador foi adicionada uma subseção:





    Criação de serviços
    Para criar um modelo de serviço, use o item correspondente em Assistente MQL5. Serviços têm um ponto de entrada OnStart semelhante a scripts. Nele, você pode organizar um loop interminável de recebimento e processamento de dados usando funções de rede.

    Inicialização de serviços
    Para iniciar várias cópias de um EA ou indicador com parâmetros diferentes, basta colocá-lo em gráficos diferentes. Isso cria instâncias separadas do programa, que operam independentemente umas das outras. Os serviços não estão vinculados a gráficos, portanto, é fornecido um mecanismo separado para criar suas instâncias.

    Selecione serviço no navegador e clique em "Adicionar serviço" em seu menu de contexto. Uma caixa de diálogo padrão do programa MQL5 é aberta, nela você pode ativar/desativar a negociação e o acesso a sinais, bem como definir parâmetros.




    Para iniciar e parar a instância do serviço, use seu menu. Para gerenciar todas as instâncias, use o menu do próprio serviço.

  3. Adicionado sistema de educação.

    Agora os iniciantes podem aprender facilmente como trabalhar com a plataforma. Nós adicionamos mais de 100 dicas interativas nas principais funções.

    • As dicas não distraem do trabalho com a plataforma, pois elas são incorporadas na barra de ferramentas na forma de uma barra de progresso.
    • As dicas são exibidas apenas para ações que você ainda não realizou na plataforma.
    • Links interativos são incorporados nas dicas para ir a elementos específicos da interface da plataforma. Por exemplo, diretamente do EA, você pode abrir um diálogo de negociação ou um menu com o comando desejado.

    Conforme você passa pelo treinamento e executa ações na plataforma, a barra de progresso é preenchida.




  4. O histórico da conta de negociação pode ser representado como posições — a plataforma coleta dados sobre transações relacionadas à posição (abertura, aumento, fechamento parcial e total) e agrupa esses dados em um único registro. Isso facilita a visualização do horário de abertura e fechamento de posições, seu volume, preço e resultado total. Essa exibição agora também está disponível em relatórios de histórico exportados para arquivos.




  5. Adicionada uma API para solicitar dados do terminal MetaTrader 5 através de aplicativos usando linguagem R.

    Nós preparamos um pacote MetaTrader especial. Ele contém uma DLL para interação entre o terminal R e o terminal MetaTrader 5, bem como documentação e arquivos auxiliares-r. O pacote está atualmente no processo de registro no repositório CRAN e, em breve, estará disponível para download e instalação.




    Para instalar um pacote, use o seguinte comando:
    R CMD INSTALL --build MetaTrader

    Atualmente, os seguintes comandos estão disponíveis para consulta de dados:

    • MT5Initialize — inicializa e estabelece uma conexão com o terminal MetaTrader 5. Quando o comando é executado, o terminal é iniciado, se necessário.
    • MT5Shutdown — desinicialização e desconexão do terminal MetaTrader 5.
    • MT5Version — obtém a versão do terminal MetaTrader 5.
    • MT5TerminalInfo — obtém o status e os parâmetros de conexão do terminal ao servidor da corretora (número da conta e endereço do servidor).
    • MT5WaitTerminal — aguarda a conexão do terminal MetaTrader 5 com o servidor da corretora.
    • MT5CopyTicksFrom(symbol, from, count, flags) — copia os ticks com a data especificada no valor especificado. A data é especificada em milissegundos desde 1970.01.01.
    • MT5CopyTicksRange(symbol, from, to, flags) — copia ticks a partir do período de data especificado. A data é especificada em milissegundos desde 1970.01.01.
    • MT5CopyRatesFrom(symbol, timeframe, from, count) — copia as barras de minuto de uma data especificada no valor especificado. A data é indicada em segundos desde 1970.01.01.
    • MT5CopyRatesFromPos(symbol, timeframe, start_pos, count) — copia as barras de minuto de uma posição especificada começando com última barra.
    • MT5CopyRatesFromRange(symbol, timeframe, date_from, date_to) — copia barras do período de data especificado. As datas são especificadas em segundos desde 1970.01.01.

    No futuro, a lista de comandos suportados será expandida.

  6. Otimizado o diálogo fechar posição de negociação usando outra oposta. Agora seu trabalho não diminui com um grande número de posições abertas.
  7. Corrigidos erros de cálculo de instrumentos sintéticos, o que levava à formação de omissão de dados.
  8. Agora, ao excluir instrumentos personalizados, são excluídos os arquivos com seu histórico de ticks e de barras. Isso evita o acúmulo de dados não utilizados no disco rígido.
  9. Corrigida a exibição de resultados de pesquisa em monitores de alta DPI.

MQL5

  1. Adicionado acesso a dados do calendário econômico através de programas MQL5.

    Novos recursos

    CalendarCountryById — obtém a descrição do país por identificador.
    bool CalendarCountryById(
       const long           country_id,    // identificador do país
       MqlCalendarCountry&  country        // descrição do país
       );
    CalendarEventById — obtém a descrição do evento por identificador.
    bool CalendarEventById(
       const long           event_id,      // identificador do evento
       MqlCalendarEvent&    event          // descrição do evento
       );
    CalendarValueById — obtém a descrição do valor do evento por identificador.
    bool CalendarValueById(
       const long           value_id,      // identificador do valor
       MqlCalendarValue&    value          // descrição do valor
       );
    CalendarEventByCountry — obtém um array de notícias disponíveis por país.
    bool CalendarEventByCountry(
       string               country_code,  // código do país
       MqlCalendarEvent&    events[]       // matriz do evento
       );
    CalendarEventByCurrency — obtém um array contendo as notícias disponíveis da moeda, que elas afetam.
    bool CalendarEventByCurrency(
       string               currency,      // moeda
       MqlCalendarEvent&    events[]       // matriz de eventos
       );
    CalendarValueHistoryByEvent — obtém um array de valores para o período especificado de acordo com o identificador do evento.
    bool CalendarValueHistoryByEvent(
       ulong                event_id,      // identificador do evento
       MqlCalendarValue&    values[],      // matriz de valores
       datetime             datetime_from, // data inicial
       datetime             datetime_to=0  // data final
       );
    CalendarValueHistory — obtém um array de valores de todos os pelo período definido com filtragem por país e/ou moeda.
    bool CalendarValueHistory(
       MqlCalendarValue&    values[],          // matriz de valores
       datetime             datetime_from,     // início do período
       datetime             datetime_to=0,     // fim do período
       string               country_code=NULL, // código do país
       string               currency=NULL      // moeda
       );
    CalendarValueLastByEvent — obtém o array dos últimos valores de evento por identificador. Esse recurso permite consultar apenas os valores que foram alterados desde a última consulta. Para fazer isso, é usado seu in/out parâmetro "change_id".

    Toda vez que o banco de dados do calendário é alterado, a propriedade "change_id" é alterada — identificador da última alteração. Ao solicitar dados, você especifica "change_id" e o terminal retorna os eventos que aparecem no calendário a partir desse momento, bem como o valor atual de "change_id", que pode ser usado para a próxima solicitação. Ao chamar a função pela primeira vez, especifique um zero "change_id", assim, a função não retorna nenhum evento, mas fornece o "change_id" atual para as próximas solicitações.
    bool CalendarValueHistory(
       ulong                event_id,          // identificador do evento
       ulong&               change_id,         // identificador do último valor do calendário
       MqlCalendarValue&    values[]           // matriz de valores
       );
    CalendarValueLast — obtém o array dos últimos valores de todos os eventos com filtragem por país e/ou moeda. Esse recurso permite consultar apenas os valores que foram alterados desde a última consulta. Semelhante a CalendarValueLastByEvent, a propriedade "change_id" é usada para a consulta.
    bool CalendarValueHistory(
       ulong                event_id,          // identificador do evento
       ulong&               change_id,         // ID da última alteração do calendário
       MqlCalendarValue&    values[],          // matriz de valores
       string               country_code=NULL, // código do país
       string currency=NULL                    // moeda
       );

    Novas estruturas

    MqlCalendarCountry — descrição do país.
    struct MqlCalendarCountry
      {
       ulong             id;                        // identificador do país ISO 3166-1
       string            name;                      // nome do país
       string            code;                      // código do país ISO 3166-1 alpha-2
       string            currency;                  // código da moeda do país
       string            currency_symbol;           // símbolo da moeda do país
       string            url_name;                  // nome do país usado no URL no site mql5.com
      };
    MqlCalendarEvent — descrição do evento.
    struct MqlCalendarEvent
      {
       ulong                          id;           // identificador do evento
       ENUM_CALENDAR_EVENT_TYPE       type;         // tipo de evento
       ENUM_CALENDAR_EVENT_SECTOR     sector;       // setor ao qual está relacionado o evento
       ENUM_CALENDAR_EVENT_FREQUENCY  frequency;    // frequência de publicação de eventos
       ENUM_CALENDAR_EVENT_TIMEMODE   time_mode;    // modo de publicação de eventos por horário
       ulong                          country_id;   // identificador do país
       ENUM_CALENDAR_EVENT_UNIT       unit;         // medida do valor do evento
       ENUM_CALENDAR_EVENT_IMPORTANCE importance;   // importância do evento
       ENUM_CALENDAR_EVENT_MULTIPLIER multiplier;   // multiplicador do valor do evento
       uint                           digits;       // número de casas decimais no valor do evento
       string                         source_url;   // URL da fonte
       string                         event_code;   // código do evento
       string                         name;         // nome do evento na linguagem do terminal
      };
    MqlCalendarValue — descrição do valor do evento.
    struct MqlCalendarValue
      {
       ulong             id;                        // identificador do valor
       ulong             event_id;                  // identificador do evento
       datetime          time;                      // hora e data do evento
       datetime          period;                    // período de relatório do evento
       int               revision;                  // revisão do indicador publicado em relação ao período de relatório
       long              actual_value;              // valor atual do evento
       long              prev_value;                // valor anterior do evento
       long              revised_prev_value;        // valor anterior revisado para o evento
       long              forecast_value;            // valor previsto do evento
       ENUM_CALENDAR_EVENT_IMPACRT impact_type;     // impacto potencial na taxa de câmbio 
      };

    Novas enumerações

    enum ENUM_CALENDAR_EVENT_FREQUENCY
      {
       CALENDAR_FREQUENCY_NONE            =0,   // não é usado
       CALENDAR_FREQUENCY_WEEK            =1,   // semana
       CALENDAR_FREQUENCY_MONTH           =2,   // mês
       CALENDAR_FREQUENCY_QUARTER         =3,   // trimestre
       CALENDAR_FREQUENCY_YEAR            =4,   // ano
       CALENDAR_FREQUENCY_DAY             =5,   // dia
      };
    
    enum ENUM_CALENDAR_EVENT_TYPE
      {
       CALENDAR_TYPE_EVENT                =0,   // evento (reunião, discurso, etc.)
       CALENDAR_TYPE_INDICATOR            =1,   // indicador
       CALENDAR_TYPE_HOLIDAY              =2,   // feriado
      };
    
    enum ENUM_CALENDAR_EVENT_SECTOR
      {
       CALENDAR_SECTOR_NONE               =0,   // não
       CALENDAR_SECTOR_MARKET             =1,   // mercado
       CALENDAR_SECTOR_GDP                =2,   // PIB
       CALENDAR_SECTOR_JOBS               =3,   // trabalho
       CALENDAR_SECTOR_PRICES             =4,   // preços
       CALENDAR_SECTOR_MONEY              =5,   // dinheiro
       CALENDAR_SECTOR_TRADE              =6,   // negociação
       CALENDAR_SECTOR_GOVERNMENT         =7,   // governo
       CALENDAR_SECTOR_BUSINESS           =8,   // negócio
       CALENDAR_SECTOR_CONSUMER           =9,   // usuário
       CALENDAR_SECTOR_HOUSING            =10,  // habitação
       CALENDAR_SECTOR_TAXES              =11,  // impostos
       CALENDAR_SECTOR_HOLIDAYS           =12,  // feriados
      };
      
    enum ENUM_CALENDAR_EVENT_IMPORTANCE
      {
       CALENDAR_IMPORTANCE_NONE           =0,   // não
       CALENDAR_IMPORTANCE_LOW            =1,   // baixo
       CALENDAR_IMPORTANCE_MODERATE       =2,   // médio
       CALENDAR_IMPORTANCE_HIGH           =3,   // alto
      };
    
    enum ENUM_CALENDAR_EVENT_UNIT
      {
       CALENDAR_UNIT_NONE                 =0,   // não
       CALENDAR_UNIT_PERCENT              =1,   // porcentagem
       CALENDAR_UNIT_CURRENCY             =2,   // moeda nacional 
       CALENDAR_UNIT_HOUR                 =3,   // quantidade de horas 
       CALENDAR_UNIT_JOB                  =4,   // número de empregos
       CALENDAR_UNIT_RIG                  =5,   // número de torres
       CALENDAR_UNIT_USD                  =6,   // dólares estadunidenses
       CALENDAR_UNIT_PEOPLE               =7,   // número de pessoas
       CALENDAR_UNIT_MORTGAGE             =8,   // número de empréstimos hipotecários
       CALENDAR_UNIT_VOTE                 =9,   // número de votos
       CALENDAR_UNIT_BARREL               =10,  // número de barreis
       CALENDAR_UNIT_CUBICFEET            =11,  // pés cúbicos
       CALENDAR_UNIT_POSITION             =12,  // número de empregos
       CALENDAR_UNIT_BUILDING             =13   // número de edifícios
      };
      
    enum ENUM_CALENDAR_EVENT_MULTIPLIER
      {
       CALENDAR_MULTIPLIER_NONE           =0,   // não    
       CALENDAR_MULTIPLIER_THOUSANDS      =1,   // miles
       CALENDAR_MULTIPLIER_MILLIONS       =2,   // milhões
       CALENDAR_MULTIPLIER_BILLIONS       =3,   // bilhões
       CALENDAR_MULTIPLIER_TRILLIONS      =4,   // trilhões
      };
      
    enum ENUM_CALENDAR_EVENT_IMPACRT
      {
       CALENDAR_IMPACT_NA                 =0,   // desconhecido
       CALENDAR_IMPACT_POSITIVE           =1,   // positivo
       CALENDAR_IMPACT_NEGATIVE           =2,   // negativo
      };
    
    enum ENUM_CALENDAR_EVENT_TIMEMODE
      {
       CALENDAR_TIMEMODE_DATETIME         =0,   // a fonte publica o tempo exato
       CALENDAR_TIMEMODE_DATE             =1,   // evento acontece durante todo o dia
       CALENDAR_TIMEMODE_NOTIME           =2,   // fonte não publica a hora do evento
       CALENDAR_TIMEMODE_TENTATIVE        =3,   // fonte não publica com antecedência o tempo exato do evento, apenas notifica o dia, o tempo é confirmado após a ocorrência do evento
      };

    Novos códigos de erro

    ERR_CALENDAR_MORE_DATA             =5400,   // matriz é pequena para o resultado inteiro (dados os valores que se ajustam na matriz)
    ERR_CALENDAR_TIMEOUT               =5401,   // expirado tempo de resposta da consulta de dados a partir do calendário
    ERR_CALENDAR_NO_DATA               =5402,   // dados não encontrados

  2. Corrigido e significativamente acelerado o trabalho com histórico de ticks e de barras.
  3. Corrigidas e significativamente aceleradas funções para alterar o histórico de ticks e de barras nos instrumentos de negociação personalizados CustomTicks* e CustomRates*.
  4. Adicionadas novas funções de conversão de dados.

    CharArrayToStruct — copia um array de tipo uchar para uma estrutura POD.
    bool  CharArrayToStruct(
       void&         struct_object,    // estrutura
       const uchar&  char_array[],     // matriz
       uint          start_pos=0       // posição inicial na matriz
       );
    StructToCharArray — copia uma estrutura POD para um array de tipo uchar.
    bool  StructToCharArray(
       const void&  struct_object,     // estrutura
       uchar&       char_array[],      // matriz
       uint         start_pos=0        // posição inicial na matriz
       );

  5. Adicionada a função MathSwap para alterar a ordem dos bytes no valor ushort, uint e ulong.
    ushort MathSwap(ushort value);
    uint   MathSwap(uint   value);
    ulong  MathSwap(ulong  value);

  6. Adicionadas funções de rede para criar conexões TCP para hosts remotos por meio de soquetes de sistema:

    • SocketCreate — cria um soquete com os sinalizadores especificados e retorna seu identificador
    • SocketClose — fecha o soquete
    • SocketConnect — conecta-se a um servidor com controle de tempo limite
    • SocketIsConnected — verifica se o soquete está conectado no momento
    • SocketIsReadable — obtém o número de bytes que podem ser lidos no soquete
    • SocketIsWritable — verifica se os dados podem ser gravados no soquete no momento atual
    • SocketTimeouts — define os tempos limite para receber e enviar dados para o objeto do sistema de soquete
    • SocketRead — lê dados do soquete
    • SocketSend — grava dados em um soquete
    • SocketTlsHandshake — inicia uma conexão TLS (SSL) segura com o host especificado usando o protocolo TLS Handshake
    • SocketTlsCertificate — obtém informações sobre o certificado usado para proteger a conexão de rede.
    • SocketTlsRead — lê dados de uma conexão TLS segura
    • SocketTlsReadAvailable — lê todos os dados disponíveis a partir de uma conexão TLS segura
    • SocketTlsSend — envia dados por meio de uma conexão TLS segura

    O endereço do host ao qual você está se conectando - usando funções de rede - deve ser explicitamente da lista permitida nas configurações do terminal.

    Para trabalhar com funções de rede, adicionados novos códigos de erro:

    • ERR_NETSOCKET_INVALIDHANDLE (5270) — identificador de soquete inválido passado para a função
    • ERR_NETSOCKET_TOO_MANY_OPENED (5271) — muitos soquetes abertos (máximo de 128)
    • ERR_NETSOCKET_CANNOT_CONNECT (5272) — erro de conexão com host remoto
    • ERR_NETSOCKET_IO_ERROR (5273) — erro ao enviar/receber dados para/de um soquete
    • ERR_NETSOCKET_HANDSHAKE_FAILED (5274) — erro de estabelecimento de conexão segura (handshake TLS)
    • ERR_NETSOCKET_NO_CERTIFICATE (5275) — não há informações sobre o certificado que protege a conexão

  7. Adicionadas novas funções para trabalhar com strings:

    StringReserve — reserva na memória para o string o buffer do tamanho especificado.
    bool  StringReserve(
       string&        string_var,          // string
       uint           new_capacity         // tamanho do buffer para armazenar a string
       );
    StringSetLength — define para a string o comprimento especificado nos símbolos.
    bool  StringSetLength(
       string&        string_var,          // strings
       uint           new_length           // novo comprimento da string
       );

  8. Adicionadas novas funções para trabalhar com arrays:

    ArrayRemove — remove o número especificado de elementos da matriz, iniciando no índice especificado.
    bool  ArrayRemove(
       void&         array[],              // matriz de qualquer tipo
       uint          start,                // índice para começar a excluir
       uint          count=WHOLE_ARRAY     // número de elementos
       );
    ArrayInsert — insere o número especificado de elementos do array de origem no array de destino, iniciando no índice especificado.
    bool  ArrayInsert(
       void&         dst_array[],          // array de destino
       const void&   src_array[],          // array de origem
       uint          dst_start,            // índice no array de destino para inserir
       uint          src_start=0,          // índice no array de origem para copiar
       uint          count=WHOLE_ARRAY     //  número de elementos a serem inseridos
       );
    ArrayReverse — inverte o número especificado de elementos no array, iniciando no índice especificado.
    bool  ArrayReverse(
       void&         array[],              // array de qualquer tipo
       uint          start=0,              // índice para começar a inverter o array
       uint          count=WHOLE_ARRAY     // número de elementos
       );

  9. Às funções CustomRatesUpdate, CustomRatesReplace, CustomTicksAdd e CustomTicksReplace adicionado o parâmetro "uint count" para especificar o número de elementos do array transmitido a ser usado. Por padrão, para o parâmetro, é usado o valor WHOLE_ARRAY. Isso significa que será usado todo o array.
  10. Adicionada a função CustomBookAdd — transmite o estado do livro de ofertas para o instrumento personalizado. A função permite transmitir um livro de ofertas como se viesse do servidor de uma corretora.
    int  CustomBookAdd(
       const string        symbol,            // nome do símbolo
       const MqlBookInfo&  books[]            // array com descrições de elementos do livro de ofertas
       uint                count=WHOLE_ARRAY  // número de elementos a serem usados
       );
  11. Adicionada a sobrecarga da função CustomSymbolCreate, permitindo que você crie um instrumento de negociação personalizado com base em um existente. Após a criação, qualquer propriedade de símbolo pode ser alterada para o valor desejado pelas funções correspondentes.
    bool  CustomSymbolCreate(
       const string        symbol_name,       // nome do símbolo personalizado
       const string        symbol_path="",    // nome do grupo em que é criado o símbolo
       const string        symbol_origin=NULL // nome do símbolo em cuja base é criado o símbolo personalizado
       );
    O nome do símbolo - do qual serão copiadas as propriedades do símbolo personalizado criado - é especificado no parâmetro "symbol_origin".

  12. Atualizada a função StringToTime que converte uma string de data/hora em um valor de data e hora. Agora suporta os seguintes formatos de data:

    • yyyy.mm.dd [hh:mi]
    • yyyy.mm.dd [hh:mi:ss]
    • yyyymmdd [hh:mi:ss]
    • yyyymmdd [hhmiss]
    • yyyy/mm/dd [hh:mi:ss]
    • yyyy-mm-dd [hh:mi:ss]

  13. À enumeração ENUM_TERMINAL_INFO_INTEGER adicionada a propriedade TERMINAL_VPS — sinal de que o terminal está sendo executado em um servidor virtual Hospedagem Virtual MetaTrader (VPS MetaTrader). Se o programa estiver sendo executado em um serviço de hospedagem, você poderá desabilitar todas as suas funções visuais, já que o servidor virtual não possui uma interface gráfica de usuário.
  14. À enumeração ENUM_SYMBOL_INFO_INTEGER adicionada a nova propriedade SYMBOL_EXIST — sinal de que existe um símbolo com o mesmo nome.
  15. Corrigida tipificação ao usar declaração preliminar de uma função de template.
  16. Adicionada a reinicialização de indicadores ao alterar uma conta de negociação.
  17. Otimizado o trabalho da função StringSplit.
  18. Corrigidos erros na biblioteca padrão.

Tester

  1. Adicionada a função TesterStop — término antecipado do trabalho um EA em um agente de teste. Agora você pode forçar a interrupção do teste quando for atingido um determinado número de negociações perdedoras, um determinado nível de rebaixamento ou qualquer outro critério.

    O teste concluído com essa função é considerado bem-sucedido. Depois de ser chamado, o terminal recebe o histórico de negociação obtido como resultado de testes, bem como todas as estatísticas de negociação.

  2. Desativado o recurso para testar e otimizar EAs via MQL5 Cloud Network no modo de uso de ticks reais. Este modo pode ser usado somente em agentes locais e farms na rede local.
  3. Aprimorado o trabalho com indicadores para testes visuais. Agora, o gráfico de preços e as linhas de indicadores são desenhados em sincronia, mesmo na velocidade máxima de renderização.
  4. Otimizados e significativamente acelerados teste e otimização.
  5. Corrigida a depuração de indicadores em dados históricos. Agora a função OnInit e OnDeinit dos indicadores podem ser depuradas corretamente.
  6. Acelerado o acesso a dados históricos ao testar EAs em várias moedas.
  7. Corrigidos erros que faziam o testador visual congelar ao depurar dados históricos.
  8. Acelerado início de passagens quando o agente processa o pacote de tarefas.
  9. Alterada a política de distribuição de pacotes de tarefas para agentes de teste. O tamanho do pacote foi aumentado, o que levava a uma redução significativa nos custos indiretos das operações de rede.
  10. Alterado o comportamento da opção de usar agentes locais, de rede e de nuvem. Agora, quando essas opções estão desativadas, as tarefas já emitidas são processadas no final e as novas não são mais emitidas. Anteriormente, essas opções funcionavam de forma semelhante ao comando "Desativar", impedindo o trabalho dos agentes imediatamente.




MetaEditor

  1. Adicionado suporte para símbolos não-ANSI no depurador. Agora as expressões observadas são exibidas corretamente, mesmo se o nome da variável for especificado em cirílico.
  2. Corrigida a exibição de resultados de pesquisa em monitores de alta DPI.

Adicionada tradução da interface do usuário para o idioma croata.

Documentação atualizada.

26 outubro 2018
MetaTrader 5 build 1930: Gráficos flutuantes e bibliotecas .Net em MQL5

Terminal

  1. agora você pode exibir gráficos de instrumentos financeiros fora da janela do terminal de negociação.

    Isso é conveniente quando se trabalha com vários monitores. Por exemplo, em um deles, você pode colocar a janela principal da plataforma e monitorar o status da conta, enquanto, em outro, você pode botar os gráficos para avaliar a situação no mercado. Para separar o gráfico do terminal, desative a opção "Encaixar" em seu menu de contexto. Depois disso, coloque o gráfico no monitor desejado.





    Para que você não precise alternar entre monitores para aplicar objetos ou indicadores analíticos, os gráficos desafixados têm uma barra de ferramentas separada. A fim de alterar um conjunto de comandos ou ocultar a barra de ferramentas, use seu menu de contexto.

  2. bate-papos incorporados totalmente atualizados. Agora eles suportam diálogos e canais de grupo. Você pode iniciar discussões privadas com grupos de pessoas em um único espaço - sem alternar entre diferentes diálogos -, criar canais temáticos por interesse e idioma. Você pode se comunicar com colegas e amigos na MQL5.community sem visitar o site.

    Cada bate-papo e canal em grupo pode ser público ou privado. O próprio autor decide se eles podem se juntar livremente ou apenas por convite. Você também pode atribuir moderadores a canais e bate-papos, providenciando controle adicional de comunicação.




  3. adicionado suporte para maior precisão na negociação de criptomoedas. Agora, o volume mínimo possível de operações de negociação é de 0,00000001 lotes. Ao livro de ofertas, ao feed de transações e a outros itens de interface foi adicionado um recurso para exibir volumes com uma precisão de até 8 casas decimais.

    Seu valor mínimo, 'step' e alteração dependem das configurações do instrumento financeiro no lado da corretora.



  4. à janela "Caixa de Ferramentas" foi adicionada uma guia de artigos publicados na MQL5.community. Mais de 600 materiais detalhados sobre o desenvolvimento de estratégias de negociação em MQL5 estão agora disponíveis diretamente no terminal. Novos artigos são publicados a cada semana.




  5. adicionado o suporte a autorização estendida usando certificados ao trabalhar com o Wine.
  6. corrigida a exibição do livro de ofertas quando sua profundidade é limitada a um nível.
  7. adicionado o comando "Salvar como imagem" à barra de ferramentas "Padrão". Agora é mais fácil tirar capturas de tela dos gráficos e compartilhá-los na comunidade.




  8. corrigida a implementação do deslocamento temporal ao importar barras e ticks. Anteriormente, em alguns casos, o deslocamento não era aplicado.




  9. corrigido o bloqueio do terminal com uma grande quantidade de notícias do calendário econômico.

MQL5

  1. adicionada suporte nativo a bibliotecas .NET com funções de importação inteligentes. Agora, as bibliotecas .NET podem ser usadas sem escrever 'wrappers' especiais — o MetaEditor toma conta disso por conta própria.

    Para trabalhar com as funções da biblioteca .NET, basta importar a própria DLL sem especificar funções específicas. O MetaEditor importa automaticamente todas as funções com as quais é possível o trabalho:
    • Estruturas simples (POD, plain old data), isto é, estruturas que contêm apenas tipos de dados simples.
    • Funções estáticas públicas cujos parâmetros usam apenas tipos simples e estruturas de POD ou seus arrays

    Para chamar funções da biblioteca, basta importá-la:
    #import "TestLib.dll"
    
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       int x=41;
       TestClass::Inc(x);
       Print(x);
      }
    O código C# para a função Inc da classe TestClass é semelhante ao seguinte:
    public class TestClass
    {
       public static void Inc(ref int x)
       {
        x++;
       }
    }
    Como resultado, o script retornará o valor 42.

    O melhoramento do suporte a bibliotecas .NET continua, em versões futuras, planeja-se expandir suas possibilidades de uso.

  2. à biblioteca padrão foi adicionado o suporte para trabalhar com funções WinAPI. Agora, para usar as funções do sistema operacional no programa MQL5, não há necessidade de importar manualmente as bibliotecas e descrever as assinaturas de funções. Basta conectar o arquivo de cabeçalho do diretório MQL5\Include\WinAPI.

    As funções WinAPI são agrupadas em arquivos separados por finalidade:

    • libloaderapi.mqh — trabalho com recursos
    • memoryapi.mqh — trabalho com memória
    • processenv.mqh — trabalho com ambiente
    • processthreadsapi.mqh — trabalho com processos
    • securitybaseapi.mqh — trabalho com o sistema de segurança do sistema operacional
    • sysinfoapi.mqh — obtenção de informações do sistema
    • winbase.mqh — funções comuns
    • windef.mqh — constantes, estruturas e enumerações
    • wingdi.mqh — trabalho com objetos gráficos
    • winnt.mqh — trabalho com exceções
    • winreg.mqh — trabalho com o registro
    • winuser.mqh — gerenciamento de janelas e interface
    • errhandlingapi.mqh — processamento de erros
    • fileapi.mqh — trabalho com arquivos
    • handleapi.mqh — trabalho com identificadores
    • winapi.mqh — conexão de todas as funções (arquivos de cabeçalho WinAPI)

    A ligação funciona apenas com arquitetura de 64 bits.

  3. adicionado o suporte a qualificadores inline, __inline, __forceinline ao analisar o código. A presença desses qualificadores no código não causará erros e não afetará a compilação. No momento, isso torna mais fácil transferir código C++ para MQL5.
    Mais informações sobre qualificadores estão disponíveis no MSDN.

  4. realizada uma otimização substancial da execução de programas MQL5. Em alguns casos, o ganho de desempenho pode chegar a 10%. Para obter um aumento de velocidade, recompile seus programas na nova versão do MetaEditor.
    Infelizmente, otimização adicional levou à perda de compatibilidade de novos programas com versões anteriores do terminal. Todos os programas compilados no MetaEditor versão 1910 e superior não serão inicializados em terminais de versão inferior a 1880. Ao mesmo tempo, programas compilados anteriormente em versões anteriores do MetaEditor funcionarão em novos terminais.

  5. realizado trabalho de otimização de conjuntos de funções MQL5.
  6. adicionadas novas propriedades para ajustar/separar gráficos da janela principal do terminal e controlar sua posição.

    À enumeração ENUM_CHART_PROPERTY_INTEGER adicionados:

    • CHART_IS_DOCKED — janela do gráfico encaixada. Se definido como false, o gráfico pode ser arrastado para fora do terminal.
    • CHART_FLOAT_LEFT — coordenada esquerda do gráfico desencaixado em relação à tela virtual.
    • CHART_FLOAT_TOP — coordenada superior do gráfico desencaixado em relação à tela virtual.
    • CHART_FLOAT_RIGHT — coordenada direita do gráfico desencaixado em relação à tela virtual.
    • CHART_FLOAT_BOTTOM — coordenada inferior do gráfico desencaixado em relação à tela virtual.

    À enumeração ENUM_TERMINAL_INFO_INTEGER foram adicionados:

    • TERMINAL_SCREEN_LEFT — coordenada esquerda da tela virtual. A tela virtual é o retângulo que cobre todos os monitores. Se o sistema tiver dois monitores e sua ordem for definida da direita para a esquerda, a coordenada esquerda da tela virtual poderá estar na borda de dois monitores.
    • TERMINAL_SCREEN_TOP — coordenada superior da tela virtual.
    • TERMINAL_SCREEN_WIDTH — largura do terminal.
    • TERMINAL_SCREEN_HEIGHT — altura do terminal.
    • TERMINAL_LEFT — coordenada esquerda do terminal em relação à tela virtual.
    • TERMINAL_TOP — coordenada superior do terminal em relação à tela virtual.
    • TERMINAL_RIGHT — coordenada direita do terminal em relação à tela virtual.
    • TERMINAL_BOTTOM — coordenada inferior do terminal em relação à tela virtual.

  7. adicionado o campo volume_real às estruturas MqlTick e MqlBookInfo. Ele é projetado para funcionar com maior precisão. O valor volume_real tem uma precedência mais alta do que o volume. O servidor usará esse valor, se especificado.

    struct MqlTick
      {
       datetime         time;          // Hora da última atualização de preço
       double           bid;           // Preço Bid atual
       double           ask;           // Preço Ask atual
       double           last;          // Preço atual da última transação (Last)
       ulong            volume;        // Volume para o preço Last atual
       long             time_msc;      // Hora da última atualização de preço em milissegundos
       uint             flags;         // Sinalizadores de ticks
       double           volume_real;   // Volume para o preço Last atual com alta precisão
      };

    struct MqlBookInfo
      {
       ENUM_BOOK_TYPE   type;            // tipo de boleta a partir da enumeração ENUM_BOOK_TYPE
       double           price;           // preço
       long             volume;          // volume
       double           volume_real;     // volume com alta precisão
      };

  8. à enumeração ENUM_SYMBOL_INFO_DOUBLE foram adicionadas novas propriedades:

    • SYMBOL_VOLUME_REAL — volume da última transação concluída;
    • SYMBOL_VOLUMEHIGH_REAL — valor máximo do volume da transação concluída para o dia atual;
    • SYMBOL_VOLUMELOW_REAL — valor mínimo do volume da transação concluída para o dia atual.

    Para obter essas propriedades, use a função SymbolInfoDouble.

  9. à enumeração ENUM_MQL_INFO_INTEGER foi adicionada a propriedade MQL_FORWARD — um sinal de que o programa está no modo teste para frente.
  10. adicionada a propriedade pack( integer_value ) para estruturas. Permite definir o alinhamento da localização dos campos dentro da estrutura, é necessário quando se trabalha com uma DLL. Para integer_value, são possíveis os valores 1, 2 ,4 ,8 e 16.
    Se a propriedade não estiver definida, por padrão é usado o alinhamento de 1 byte — pack(1).

    Exemplo de uso:
    //+------------------------------------------------------------------+
    //| Default packing                                                  |
    //+------------------------------------------------------------------+
    struct A
      {
       char              a;
       int               b;
      };
    //+------------------------------------------------------------------+
    //| Specified packing                                                |
    //+------------------------------------------------------------------+
    struct B pack(4)
      {
       char              a;
       int               b;
      };
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       Print("sizeof(A)=",sizeof(A));
       Print("sizeof(B)=",sizeof(B));
      }
    //+------------------------------------------------------------------+
    Conclusão:
    sizeof(A)=5
    sizeof(B)=8
    Mais informações sobre o alinhamento em estruturas estão disponíveis no MSDN.

  11. flexibilização dos requisitos para coerção de enumerações. Quando implicitamente convertido, o compilador substituirá automaticamente pelo valor da enumeração correta e exibirá um aviso.

    Para o seguinte código:
    enum Main
      {
       PRICE_CLOSE_,
       PRICE_OPEN_
      };
    
    input Main Inp=PRICE_CLOSE;
    //+------------------------------------------------------------------+
    //| Start function                                                   |
    //+------------------------------------------------------------------+
    void OnStart()
      {
      }
    O compilador emitirá um aviso:
    implicit conversion from 'enum ENUM_APPLIED_PRICE' to 'enum Main'
    'Main::PRICE_OPEN_' instead of 'ENUM_APPLIED_PRICE::PRICE_CLOSE' will be used
    Anteriormente, neste caso, era gerado o erro:
    'PRICE_CLOSE' - cannot convert enum
    Se enumerações são usadas incorretamente nos parâmetros de funções, o compilador ainda produzirá um erro.

  12. corrigidos erros de compilação de funções de modelo. Agora, ao usar funções de modelo sobrecarregadas, apenas a sobrecarga necessária é instanciada e não todas as existentes.
    class X {  };
    
    void f(int)  {  }
      
    template<typename T>
    void a(T*) { new T(2); }  // anteriormente neste lugar o compilador dava um erro
      
    template<typename T>
    void a()  { f(0); }
      
      
    void OnInit()  { a<X>(); }  

  13. otimizados alguns casos de acesso ao histórico de ticks através da função CopyTicks*.
  14. adicionada a nova função TesterStop que permite concluir o teste/otimização antes do planejado. Ao ser chamada, todo o histórico de negociação e o resultado do OnTester são transferidos para o terminal do cliente como durante a conclusão geral do teste/otimização.
  15. adicionada uma nova propriedade para indicadores personalizados #property tester_everytick_calculate. Ela é usada no testador de estratégias e permite ativar o cálculo de indicadores em cada tick.

Tester

  1. agora, com testes/otimização não visuais, todos os indicadores usados (padrão e personalizados) são calculados apenas por solicitação de dados. Os indicadores que contêm chamadas da função EventChartCustom e que usam o manipulador Ontimer são exceções. Anteriormente no testador de estratégias, após a chegada de qualquer tick (mesmo do instrumento de outra pessoa), todos os indicadores eram calculados incondicionalmente. Essa inovação acelerou significativamente os testes e a otimização.

    Para forçar o cálculo de indicadores em cada tick, adicione a propriedade #property tester_everytick_calculate para o programa.

    Os indicadores compilados por versões anteriores do compilador serão calculados como antes — em cada tick.

  2. corrigida a precisão da moeda de depósito ao testar/otimizar e gerar relatórios relevantes.
  3. otimizado e acelerado o funcionamento do testeador de estratégias.
  4. corrigidos vários erros de teste e otimização.

MetaEditor

  1. corrigida a busca de palavras inteiras. Agora, ao pesquisar, o sublinhado é contado como um caractere regular, não como um delimitador de palavras.

Documentação atualizada.

12345678910111213