MetaTrader 5 build 1730: projetos no MetaEditor e instrumentos sintéticos

O que há de novo na MetaTrader 5?

20 dezembro 2017

Fim do suporte a versões antigas dos terminais!

Na nova versão da plataforma será descontinuado o suporte a terminais desktop e móveis das versões mais antigas:

  • Terminal do cliente: versões inferiores à 730 de 23 de setembro 2012
  • Terminal móvel para iPhone: versões inferiores à 1171 de 11 de novembro de 2015
  • Terminal móvel para Android: versões inferiores à 1334 de 5 agosto de 2016
Não será possível conectar esses terminais aos servidores de novas versões. Recomendamos que você atualize antes seus terminais.

Modificado o protocolo de trabalho com o MQL5 Storage

Para dar suporte a novos projetos de grupo, foi modificado o protocolo de trabalho com o armazenamento online MQL5 Storage. Infelizmente, após a atualização para uma nova versão da plataforma, você terá que re-extrair todos os dados a partir do repositório. Os dados armazenados nele não serão nem afetados nem perdidos.

Antes de atualizar para uma nova versão da plataforma, recomendamos que você envie todas as alterações locais para o repositório (executar Commit).

Terminal

  1. Adicionado recurso para criar instrumentos financeiros sintéticos, isto é, instrumentos com base em um ou mais dos que temos disponíveis. Basta especificar a fórmula para calcular as cotações, e a plataforma em tempo real gera os ticks do instrumento sintético, bem como cria seu histórico de minuto.

    Como isso acontece?
    • Você cria um instrumento sintético, especificando uma fórmula para ele.
    • A plataforma contará seus ticks a uma frequência de 10 vezes por segundo (só se o preço de pelo menos um dos instrumentos incluídos na fórmula mudar).
    • A plataforma computa o histórico de barras de minutos - durante os últimos dois meses - com base nas barras de minutos dos instrumentos incluídos na fórmula. Todas as barras novas (atuais e ulteriores) serão construídas em tempo real com base nos ticks gerados do instrumento sintético.

    Por exemplo, você pode criar uma ferramenta que mostrará o índice do dólar (USDX). Sua fórmula é a seguinte:

    50.14348112 * pow(ask(EURUSD),-0.576) * pow(USDJPY,0.136) * pow(ask(GBPUSD),-0.119) * pow(USDCAD,0.091) * pow(USDSEK,0.042) * pow(USDCHF,0.036)

    Nota: na fórmula original do índice do dólar, são usados os pares USDEUR e USDGBP. Como na plataforma há apenas pares invertidos, na fórmula do instrumento sintético para eles é usada uma potência negativa e o preço Ask, em vez do Bid.

    A plataforma calculará em tempo real o preço do novo instrumento com base nas cotações de outros seis instrumentos diferentes fornecidos pela sua corretora. Na Observação do mercado e no gráfico, você pode ver como se altera seu preço:




    Crie um novo instrumento personalizado, abra sua especificação e insira a fórmula:




    Por conveniência, o editor de fórmulas exibe uma lista de opções enquanto você digita os nomes dos instrumentos e funções.

    Cálculo de ticks e de barras de minuto do instrumento sintético começará quando ele é adicionado à "Observação do mercado". Além disso, todos os símbolos necessários para seu cálculo são adicionados automaticamente à "Observação do mercado". Ao diário da plataforma será adicionado o registro sobre o início do cálculo: Synthetic Symbol USDX: processing started.
    • Cálculo do instrumento sintético é interrompido quando ele é oculto na "Observação do mercado".
    • Os símbolos que estão sendo utilizados para o cálculo dos instrumentos sintéticos não podem ser ocultos da "Observação do mercado".

    Cálculo de cotações em tempo real
    A cada 100 ms (dez vezes por segundo) é verificado se o preço de pelo menos um dos instrumentos envolvidos na fórmula mudou. Se assim for, ocorrerá o cálculo do preço do instrumento sintético e será gerado um tick. O cálculo é realizado paralelamente em três fluxos para os preços Bid, Ask e Last. Por exemplo, se, na fórmula, for especificado EURUSD*GBPUSD, o cálculo do instrumento sintético será como se segue:

    • Bid - bid(EURUSD)*bid(GBPUSD)
    • Ask - ask(EURUSD)*ask(GBPUSD)
    • Last - last(EURUSD)*last(GBPUSD)

    A presença de alterações é verificada para cada preço separadamente. Por exemplo, como, durante o cálculo, no instrumento-fonte só foi o preço Bid que se alterou, então, para o tick do instrumento sintético foi calculado apenas o preço onde houve mudanças.

    Traçado do histórico de barras de minuto
    Além da coleta de ticks em tempo real, a plataforma cria um histórico de minuto para o instrumento sintético. Assim, o trader pode, da mesma maneira como o faria com instrumentos convencionais, ver seus gráficos, realizar a análise técnica usando os objetos e indicadores.

    Assim que o trader adiciona um instrumento sintético à Observação do mercado, a plataforma verifica se exite algum histórico de minuto reservado para ele. Se não for assim, ele será criado para os últimos 60 dias, o que é cerca de 50 000 barras. Se, nas configurações da plataforma, no parâmetro "Máx. de barras na janela", for definido um valor menor, será usada essa restrição.

    Quando uma parte das barras em este período já está construída, a plataforma criar as que estão em falta. É só quando se tenta consultar o período correspondente no gráfico que se cria um histórico mais em profundidade, caso esse período for rolado para cima ou consultado a partir de programas em linguagem MQL5).

    O histórico de barras de minuto, do instrumento sintético, é calculado com base nas barras de minuto (e não de ticks) dos instrumentos incluídos na fórmula. Por exemplo, para calcular o preço Open da barra de minuto do instrumento sintético, a plataforma toma os preços Open dos instrumentos incluídos na fórmula. Da mesma forma, é realizado o cálculo para os preços High, Low e Close.

    Se qualquer um dos instrumentos da fórmula não tiver a barra de minuto necessária, a plataforma será obrigada a calcular usando o preço Close da barra anterior. Vamos supor que estamos usando três instrumentos: EURUSD, USDJPY e GBPUSD. Se não for encontrada a barra correspondente ao minuto 12:00 durante seu cálculo, serão usados os seguintes preços:

    • Para Open - EURUSD Open 12:00, USDJPY Close 11:59, GBPUSD Open 12:00
    • Para High - EURUSD High 12:00, USDJPY Close 11:59, GBPUSD High 12:00
    • Para Low - EURUSD Low 12:00, USDJPY Close 11:59, GBPUSD Low 12:00
    • Para Close - EURUSD Close 12:00, USDJPY Close 11:59, GBPUSD Close 12:00

    Se nenhum dos instrumentos da fórmula tiver certa barra de minuto, a barra correspondente no instrumento sintético também não não será calculada.

    Traçado de novas barras de minuto
    Todas as barras novas (atuais e ulteriores) do instrumento sintético são construídas com base nos ticks gerados. O preço segundo o qual são construídas as barras depende do parâmetro "Plotagem de gráficos" na especificação:



    Operações a serem usadas na fórmula do instrumento
    Na fórmula, podem-se usar dados de preços, bem como algumas propriedades dos símbolos (fornecidas pela corretora). Para fazer isso, insira:

    • Nome do símbolo - dependendo de qual o preço do instrumento sintético é calculado, na fórmula será usado o preço Bid, Ask ou Last do instrumento especificado. Por exemplo, especificado EURUSD*GBPUSD, o Вid é calculado como bid(EURUSD)*bid(GBPUSD), enquanto o preço Ask - como ask(EURUSD)*ask(GBPUSD).
    • bid(nome do símbolo) - para o cálculo do preço Bid do instrumento sintético será usado - incondicionalmente - o preço Bid do símbolo especificado. Na verdade, esta variação coincide com a anterior (sem especificar o tipo de preço).
    • ask(nome do símbolo) - para o cálculo do preço Bid do instrumento sintético será usado - incondicionalmente - o preço Ask do símbolo especificado. Para o cálculo do preço Ask será usado o preço Bid do instrumento especificado. Para o cálculo do preço Last será usado o preço Last do instrumento especificado. Por exemplo, se você especificar ask(EURUSD)*GBPUSD, o cálculo é o seguinte:
      • Вid = ask(EURUSD)*bid(GBPUSD)
      • Ask = bid(EURUSD)*ask(GBPUSD)
      • Last = last(EURUSD)*last(GBPUSD)
    • last(nome do símbolo) - preço Last do símbolo especificado será usado durante o cálculo de todos os preços do instrumento sintético (Bid, Ask e Last). Por exemplo, se você definir last(EURUSD)*GBPUSD, o cálculo é o seguinte:
      • Вid = last(EURUSD)*bid(GBPUSD)
      • Ask = last(EURUSD)*ask(GBPUSD)
      • Last = last(EURUSD)*last(GBPUSD)
    • volume(nome do símbolo) - na fórmula será usado o volume do tick do instrumento especificado. Verifique que as informações dos volumes são transmitidas para o instrumento especificado.
    • point(nome do símbolo) - na fórmula será colocado em seu lugar o tamanho da alteração mínima do preço do instrumento especificado.
    • digits(nome do símbolo) - na fórmula será colocado em seu lugar o número de casas decimais no preço do instrumento especificado.

    Se o personagem tem um nome complexo (contendo hífens, pontos, etc.), deve estar entre aspas. Por exemplo, "RTS-6.17".
    Na fórmula, pode-se utilizar operações aritméticas tais como a adição (+), a subtração (-), multiplicação (*), divisão (/) e o resto da divisão (%). Por exemplo, EURUSD+GBPUSD indica que o preço é calculado como a soma dos preços EURUSD e GBPUSD. Também na fórmula pode ser usado o menos unário para alterar o sinal, por exemplo: -10*EURUSD.

    É dada prioridade à execução de operações aritméticas:

    • As operações de multiplicação, divisão e resto da divisão são executadas primeiro, logo, a adição e a subtração.
    • Operações são realizadas da esquerda para a direita. Se, na fórmula, forem utilizadas várias operações com a mesma prioridade (por exemplo, multiplicação e divisão), a primeira operação realizada é a do lado esquerdo.
    • Para alterar a prioridade das operações, pode-se usar parênteses (e). As expressões entre parênteses têm a maior prioridade durante o cálculo. Para elas também se aplica o princípio da esquerda para a direita, isto é, primeiro, são avaliadas as expressões entre parênteses, mais à esquerda, na fórmula.

    Além disso, na fórmula, é possível usar as constantes:

    • Numéricas (inteiros e reais com ponto). Por exemplo, EURUSD*2+GBPUSD*0.7.
    • Propriedades do símbolo _Digits e _Point. Eles adicionam à fórmula as propriedades do símbolo personalizado a partir da especificação. _Digits é o número de dígitos após o ponto decimal no preço do instrumento, _Point é o tamanho da variação mínima no preço do instrumento.

    Além disso, na fórmula é possível utilizar todas as funções matemáticas habilitadas para linguagem MQL5, exceto MathSrand, MathRand e MathIsValidNumber: Para todas as funções apenas são usados nomes curtos: fabs(), acos(), asin(), etc.

  2. Adicionado o recurso que permite adicionar cotações para instrumentos personalizados em tempo real. Agora, em MQL5, pode-se programar um expert que adiciona quaisquer cotações de acordo com o instrumento personalizado definido. Para fazer isso, usa-se a nova função CustomTicksAdd.
    int  CustomTicksAdd(
       const string           symbol,       // nome do símbolo
       const MqlTick&         ticks[]       // matriz com dados de ticks que é necessário aplicar ao instrumento personalizado
       );
    A função CustomTicksAdd permite enviar ticks, como se viessem do servidor da corretora. Os dados não são gravados diretamente no banco de ticks, em vez disso, são enviados para a janela "Observação do mercado". Em seguida, a partir dela, o terminal armazena ticks em seu banco de dados. Quando o volume de dados enviados numa única chamada é muito grande, a função muda o seu comportamento para economizar recursos. Ao carregar mais de 256 ticks, os dados são divididos em duas partes. A primeira parte (a maior) é imediatamente gravada no banco de ticks (como o faz CustomTicksReplace). A segunda parte, que consiste nos últimos 128 ticks, é enviada através da janela "Observação do mercado" e, em seguida, é armazenada na base do terminal.

  3. Adicionada a exibição de preços High e Low na Observação do mercado. Por padrão, essas colunas estão desabilitadas. Elas podem ser ativadas através do menu de contexto:




    Para instrumentos cujos gráficos são construídos nos preços Bid (indicado na especificação) são mostrados os preços Bid High e Bid Low. Para instrumentos cujos gráficos são construídos nos preços Last são mostrados os preços Last High e Last Low.
    Juntamente com as colunas High/Low é ativada automaticamente a coluna Last, se, na Observação do mercado, há pelo menos um instrumento cujos gráficos são construídos nos preços Last.

  4. Adicionado recurso para editar o histórico de ticks de instrumentos financeiros personalizados. Clique em "Símbolos" no menu de contexto da Observação do mercado, selecione o instrumento personalizado e solicite o intervalo de dados necessário na guia "Ticks".

    • Para alterar o valor, clique duas vezes sobre ele.
    • Para adicionar ou apagar entradas, use o menu de contexto.
    • Para excluir várias barras/ticks, selecione-os com o mouse, mantenha pressionada a tecla Shift ou Ctrl+Shift.


    Por conveniência, as entradas modificadas são destacadas:

    • fundo verde — entrada alterada
    • fundo cinza — entrada excluída
    • fundo amarelo — entrada adicionada

    Para salvar as alterações, clique em "Aplicar alterações" na parte inferior da janela.

  5. Adicionada a exibição de contas prévias na árvore do Navegador.

    Traders podem enviar a corretoras pedidos para abrir contas reais diretamente a partir de terminais desktop. Para fazer isso, basta preencher um formulário simples com informações de contato, como ao abrir uma conta de demonstração. Após isso, para o trader, é criada uma conta prévia especial. Em seguida, a corretora entre em contato com o trader para formalizar relacionamento com o cliente e transformá-la em conta real.




  6. Adicionada a exibição do tempo em milissegundos na Janela de cotações:




  7. Rastreamento mais rápido de servidores disponíveis na caixa de diálogo da nova conta.
  8. Corrigida a exibição do objeto gráfico "Linha de tendência" com as opções "Raio para esquerda" e "Raio para a direita" ativadas.
  9. Otimizado o trabalho com muitas mensagens no correio interno (centenas de milhares).
  10. Otimizado o funcionamento do terminal com muitos instrumentos financeiros (50 mil ou mais).
  11. Adicionado recurso para otimização do histórico de ticks de instrumentos personalizados realizada após a edição do histórico.

MetaEditor

  1. Projetos com recursos completos estão agora disponíveis no MetaEditor. O processo de desenvolvimento de programas se tornou muito mais conveniente.

    Agora o arquivo de programa principal MQ5 não é apresentado como projeto. O projeto é um arquivo separado "MQPROJ", em que são armazenadas as configurações do programa, os parâmetros de compilação e informações sobre todos os arquivos utilizados. O acesso às principais configurações do projeto é organizado através de uma caixa de diálogo separada, não há mais necessidade de especificá-las no código fonte através de #property.

    Para o trabalhar facilmente com o projeto, existe uma guia separada no Navegador. Ela mostra todos os arquivos usados por categorias: incluídos, de recurso, de cabeçalhos, etc. Além disso, os arquivos são adicionados ao navegador do projeto automaticamente. Por exemplo, se você habilitar um novo arquivo MQH no código, ele será exibido automaticamente na seção "Dependencies" do navegador.
    Ao mesmo tempo, nós tornamos possível trabalhar com novos projetos no repositório online MQL5 Storage. Agora, o desenvolvimento de grandes projetos pode ser realizado conjuntamente com outros participantes da MQL5.community.

    Para trabalhar com projetos em grupo, foi adicionada a nova seção Shared Projects. O projeto criado nesta seção é imediatamente enviado para o repositório: você pode distribuir rapidamente permissões de acesso a ele a outros participantes e começar o desenvolvimento conjunto.




    Quando você compila o projeto no Shared Project, o executável EX5 é automaticamente copiado no catálogo local Experts, Indicators ou Scripts, dependendo do tipo de programa. Você pode imediatamente executar o programa dentro do gráfico, sem ter que copiar os arquivos manualmente de cada vez.


    Alterações no trabalho com o repositório MQL5 Storage

    Para uma experiência completa com projetos em grupo, foi refeito o protocolo de trabalho com o repositório MQL5 Storage. Infelizmente, após a atualização para uma nova versão da plataforma, você terá que re-extrair todos os dados a partir do repositório. Os dados armazenados nele não serão nem afetados nem perdidos.

    Antes de atualizar para uma nova versão da plataforma, recomendamos que você envie todas as alterações locais para o repositório (executar Commit).

    Agora o comando "Extrair dados do repositório" (Checkout from Storage) está indisponível. Para extrair dados, são usados os comandos "Ativar MQL5 Storage" e "Obter arquivo do repositório":

    • Se, na cópia atual do MetaEditor, você ainda não tiver usado o repositório, clique no botão "Ativar MQL5 Storage" no menu contextual da janela "Navegador". Todos os diretórios e arquivos em seu repositório serão transferidos para um computador local.
    • Se você já estiver trabalhando com o repositório, para extrair dados, clique em "Obter arquivos do repositório" no menu contextual do elemento raiz MQL5 na janela "Navegador".

    Novos projetos: exemplo de criação e detalhes de trabalho

    Ao MetaEditor foi adicionado o projeto. Trata-se de um arquivo com extensão mqproj, em que são armazenadas as propriedades gerais do programa, bem como informações sobre todos os arquivo utilizados. Agora é possível gerenciar facilmente as propriedades do programa numa caixa de diálogo separada do MetaEditor, em vez de alterá-las manualmente no código-fonte (diretiva #property).

    Se você já tiver um projeto, a maneira mais fácil de experimentar novos projetos é usar o comando "Novo projeto a partir do arquivo-fonte."




    No diretório em que o arquivo selecionado está localizado, será criado um novo arquivo de projeto com o mesmo nome e a extensão mqproj. As principais propriedades do programa especificadas no código-fonte via #property serão automaticamente adicionadas ao projeto, incluindo o nome, direitos de autor, versão, link para o site e programa de descrição do desenvolvedor.

    Ao conjunto de propriedades do programa no arquivo de projeto é dada uma prioridade mais elevada do que às propriedades especificadas no código do programa. Se propriedades são especificadas tanto no projeto quanto no arquivo de origem, serão usadas as propriedades do projeto.




    Foram adicionadas duas novas opções para compilar programas MQL5:

    • Ativar otimização adicional: aplicativo com otimização desativada são compilados mais rápido, mas trabalham mais devagar.
    • Verificar separadores de ponto flutuante: aplicativos com teste desativado correm ligeiramente mais rápido, porque a divisão por zero não é verificada durante a execução do código.

    Para trabalhar com o projeto, use a guia separada "Projeto" na janela "Navegador". Todos os arquivos usados no projeto são exibidos nesta guia convenientemente. Quando um projeto é gerado a partir de um arquivo de origem, todos os arquivos anexados (especificados usando a diretiva #include no arquivo MQ5 principal e em todos os arquivos incluídos no mesmo) são automaticamente adicionados à seção "Dependencies".

    Quando você adiciona novos arquivos no código fonte, eles também aparecerão no Navegador do projeto. Os arquivos de cabeçalho usados serão adicionados à seção Headers, enquanto as imagens, sons e outros programas MQL5 são adicionados ao projeto como recursos na seção Resources. Na seção Sources, são exibidos os arquivos MQ5 com código-fonte. Na seção Settings and files, pode-se adicionar outros arquivo, por exemplo, configurações de teste e modelos de gráficos.

    Para adicionar arquivos existentes a um projeto ou para excluir os arquivos a partir dele, use os comandos do menu contextual. Tenha cuidado ao excluir, pois você pode estar removendo um arquivo de projeto (remover a ligação) ou completamente excluí-lo do disco rígido:




    Criar um novo projeto é tão facilmente como a criação de um programa MQL5 convencional. Clique em "Novo projeto", selecione o tipo de programa e especifique suas propriedades (nome, manipuladores de eventos, etc.) no Assistente MQL5, no modo normal.

    Para obter um arquivo executável EX5, você pode abrir um projeto e pressionar F7 (o comando de compilação) ou abrir o arquivo MQ5 principal do programa e compilá-lo.


    Projetos em grupo no MQL5 Storage: detalhes de trabalho

    Projetos em grupo são gerenciados a partir da seção Shared Projects. Se você não tiver conectado o repositório ainda, execute o comando Activate MQL5 Storage no menu de contexto desta pasta. MetaEditor verificará se o seu armazenamento contém dados armazenados e se existem quaisquer projetos disponíveis para você. Os dados existente serão recuperados do seu repositório e carregados na seu computador (Checkout). Os projetos em grupo serão exibidos na seção Shared Project, para extrai-los clique em "Extrair arquivos do repositório" no menu contextual.

    Para criar um novo projeto grupal, selecione a pasta Shared Projects e clique em "Novo projeto":




    Em seguida, complete as etapas do Assistente MQL5: defina o tipo, nome e propriedades do futuro programa. Para projetos em grupo, escolha nomes claros e compreensíveis, para que os outros participantes possam encontrá-los facilmente. Nos nomes dos projetos só podem ser usadas letras latinas sem espaços.

    Imediatamente após a criação do projeto, ele é automaticamente adicionado ao repositório MQL5 Storage. Os arquivos usados pela biblioteca padrão no repositório não são adicionados, você pode adicioná-los manualmente, se necessário.

    Para permitir outros participantes trabalharem com o projeto, abra suas propriedades. Você pode, especificando o login da MQL5.community, conceder permissões a usuários, bem como estabelecer os parâmetros gerais do trabalho em grupo:

    • Projeto privado
    • Livre para se juntar ao projeto
    • Participação no projeto a pedido




    A fim de facilitar o trabalho, ao compilar o projeto grupal, o executável final (EX5) é copiado automaticamente na pasta Experts, Indicators ou Scripts, dependendo do tipo de programa. Assim, você pode executar imediatamente o programa no terminal, sem ter que copiá-lo manualmente no diretório desejado.


    Projetos públicos no MQL5 Storage: participação no desenvolvimento

    Como mencionado acima, cada projeto em grupo, na MQL5 Storage, tem configurações de disponibilidade ao público: o projeto pode ser privado ou aberto à participação de outros usuários. Agora, todos os projetos com participação livre são exibidos na guia separada "Projetos públicos".

    Todo mundo pode encontrar um projeto interessante e participar em seu desenvolvimento. Basta pressionar "Ingressar" e, em seguida, receber o projeto a partir do repositório.




    Após ingressar, cada usuário recebe o direito apenas de visualizar o projeto. A fim de obter os direitos para enviar suas próprias alterações ao repositório, entre em contato com o autor do projeto. Para saber seu login, abra as propriedades do projeto no menu de contexto.

  2. Adicionada a capacidade de inserir facilmente diferentes propriedades e recursos no código do programa. Por exemplo, você pode adicionar rapidamente no código um arquivo. Selecione o comando "Inserir - MQH como #incude", e, em seguida, escolha o arquivo a ser incluído na janela que se abre. Após isso, ao código de programa é adicionada a diretiva #include com o caminho apropriado para o arquivo selecionado.




    O mesmo menu do código do programa permite a adição de arquivos como uma matriz binária ou de texto. Por exemplo, você pode transferir modelos de gráficos junto com experts/indicadores: habilite seu modelo no código do programa na forma de uma matriz, em seguida, use a função FileSave para guardá-lo disco. Depois disso, o modelo pode ser aplicado a um gráfico utilizando a função ChartApplyTemplate.
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //--- arquivo de modelo como matriz binária
       unsigned char my_template[]=
         {
          0xFF,0xFE,0x3C, ... ,0x00 // a matriz de dados é reduzida
         };
    //--- armazenamento e implementação do modelo
       if(FileSave("my_template.tpl",my_template))
         {
          Print("Custom template saved in \\MQL5\\Files");
          if(ChartApplyTemplate(0,"\\Files\\my_template.tpl"))
             Print("Custom template applied to the current chart");
          else
             Print("Failed to apply custom template");
         }
       else
          Print("Failed to save custom template");
      }

  3. Adicionada funcionalidade para conversão de linhas entre formatos ASCII, HEX e Base64. Selecione a linha no código-fonte e clique no comando adequado no menu "Editar - Converter":




  4. Corrigida a pesquisa por arquivos sem diferenciação de maiúsculas e minúsculas.
  5. Corrigido o bug no depurador durante o cálculo dos valores da expressão do tipo x.y[0][1].z.
  6. Corrigida a navegação pelo código usando os botões "Anterior" e "Avançar".

MQL5

  1. Adicionado o novo serviço online para proteção secundária de programas MQL5, o MQL5 Cloud Protector. Esta proteção é semelhante com a utilizada na mais grande loja de aplicativos de negociação, o Mercado MetaTrader, onde arquivos de produtos (EX5) enviados por vendedores são ainda compilados em código nativo.

    Agora, este tipo de proteção está disponível para todos os usuários da plataforma. Basta executar o comando Serviço - MQL5 Cloud Protector no MetaEditor. Esta proteção difere da do Mercado em que o arquivo não está ligado ao computador do usuário. Arquivos protegidos pela MQL5 Cloud Protector podem ser executados em qualquer computador como arquivos EX5 convencionais.
    O serviço MQL5 Cloud Protector é seguro. Proteção adicional é aplicada apenas no arquivo já compilado. O código-fonte não é enviado para nenhum lugar. Primeiro, o programa é compilado num arquivo EX5, no computador do usuário, em seguida, o arquivo compilado é enviado através de uma conexão criptografada ao serviço, onde é protegido e devolvido ao utilizador.



  2. Adicionadas funções para trabalhar com instrumentos financeiros personalizados.

    Função Ação
    CustomSymbolCreate Cria um símbolo personalizado com o nome especificado no grupo definido
    CustomSymbolDelete Remove o símbolo personalizado com o nome especificado
    CustomSymbolSetInteger Define o valor do tipo inteiro para o símbolo personalizado
    CustomSymbolSetDouble Define o valor do tipo real para o símbolo personalizado
    CustomSymbolSetString Define o valor do tipo cadeia de caracteres para o símbolo personalizado
    CustomSymbolSetMarginRate Define o coeficiente de cobrança da margem - dependendo do tipo e direção da ordem - para o símbolo personalizado
    CustomSymbolSetSessionQuote Define a hora de início e fim da sessão de cotação especificada para o símbolo especificado e dia da semana
    CustomSymbolSetSessionTrade Define a hora de início e fim da sessão de negociação especificada para o símbolo especificado e dia da semana
    CustomRatesDelete Exclui todas as barras no histórico de preço do instrumento personalizado, no intervalo de tempo selecionado
    CustomRatesReplace Substitui todo o histórico de preços do instrumento personalizado pelos dados na matriz do tipo MqlRates, no intervalo de tempo definido
    CustomRatesUpdate Adiciona ao histórico do instrumento personalizado as barras que faltam e substitui os dados existentes na matriz do tipo MqlRates
    CustomTicksAdd Adiciona dados de uma matriz do tipo MqlTick ao histórico de preços de um símbolo personalizado. O símbolo personalizado deve ser selecionado na janela Market Watch (Observação do mercado).
    CustomTicksDelete Exclui todos os ticks no histórico de preço do instrumento personalizado, no intervalo de tempo selecionado
    CustomTicksReplace Substitui todo o histórico de preço do instrumento personalizado pelos dados na matriz do tipo MqlTick, no intervalo de tempo definido

  3. Adicionadas Coleções de dados genéricas à biblioteca padrão, elas contêm classes e interfaces para definição de coleções com base em modelos. As novas coleções fortemente tipadas proporcionam uma maior comodidade e desempenho durante manipulação de dados do que as coleções tipadas convencionais.

    A biblioteca está localizada no diretório de trabalho do terminal na pasta Include\Generic.

  4. adicionado o suporte a modelos para dados do tipo union.
  5. Adicionada a propriedade do instrumento de negociação SYMBOL_VISIBLE. Chamada de SymbolInfoInteger(symbol, SYMBOL_VISIBLE) retorna false, se o símbolo especificado não é visível na Observação do mercado.
  6. Adicionado o evento CHARTEVENT_MOUSE_WHEEL. Este evento é chamado ao rolar o pressionar a roda do mouse no gráfico (se para ele é definida propriedade CHART_EVENT_MOUSE_WHEEL=true).
  7. Adicionadas novas propriedades do gráfico:

    • CHART_EVENT_MOUSE_WHEEL - ativar/desativar a geração do evento de rolagem e pressionado de roda do mouse no gráfico CHARTEVENT_MOUSE_WHEEL. Valores possíveis: 0 e 1.
    • CHART_CROSSHAIR_TOOL - habilitar/desabilitar o recurso de alternância de mouse no modo "fio de retículo" pressionando o botão do meio do mouse. Valores possíveis: 0 e 1.
    • CHART_CONTEXT_MENU - habilitar/desabilitar a exibição do menu de contexto pressionando o botão direito do mouse no gráfico. Valores possíveis: 0 e 1.

  8. Agora ao calcular a escala da janela do indicador não são levados em conta os buffers de desenho com o estilo DRAW_NONE.
  9. Adicionada a geração do evento CHARTEVENT_CHART_CHANGE ao definir a propriedade CHART_SCALEFIX (escala fixa) para o gráfico.
  10. Adicionada a função ArraySwap, ela permite compartilhar rapidamente conteúdo de matrizes dinâmicas.
    bool  ArraySwap(
       void&  array1[],      // primeira matriz
       void&  array2[]       // segunda matriz
       );
    A função implementa matrizes dinâmicas do mesmo tipo e as mesmas dimensões. Para matrizes multidimensionais, o número de elementos em todas as dimensões, excepto o primeiro, tem de ser o mesmo.

  11. Adicionada a nova propriedade TERMINAL_RETRANSMISSION - porcentagem de pacotes de rede re-enviados (re-transmits) no protocolo TCP/IP para todos os aplicativos e serviços executados no computador. A perda de pacotes ocorre mesmo em redes rápidas e configuradas corretamente. Quando ela ocorre, não há confirmação do fornecimento de pacotes entre o receptor e o remetente. Por conseguinte, pacotes perdidos são reenviados.

    O terminal não calcula esse valor; ele é solicitado uma vez por minuto a partir do sistema operacional. Além disso, não é uma indicação da qualidade da conexão entre um terminal particular e um servidor de negociação, uma vez que a porcentagem é calculada para toda a atividade da rede, incluindo de sistema e de atividade de fundo.
    Propriedade TERMINAL_RETRANSMISSION adicionada à enumeração ENUM_TERMINAL_INFO_DOUBLE, para acessá-la, usa-se a função TerminalInfoDouble.
  12. Aprimorado o trabalho com o histórico de negociação.

Signals

  1. Corrigida a colocação do tipo de execução de ordem com base no resíduo (filling) durante o fechamento forçado de posições abertas com o sinal. Nas configurações de cópia dos sinais existe a opção "Stop, se a conta for inferior a US$ XXX": se o nível de fundos na conta cair abaixo do indicado, a cópia dos sinais de negociação é automaticamente interrompida, todas as posições são forçosamente fechadas. Anteriormente, após o fechamento forçado de posições, em alguns casos, para ordens de fechamento, o tipo de preenchimento era indicado de maneira incorreta. Agora, o terminal verifica os tipos de preenchimento permitidos nas configurações do símbolo e especifica a opção válida nas ordens.

Tester

  1. O comportamento da função HistoryOrderSelect no testador de estratégias é alinhado com o terminal do cliente.
  2. O coportamento das funções CopyTicks e CopyTicksRange no testador de estratégias é alinhado com o terminal do cliente.
  3. Otimizada a exibição de objetos gráficos para os testes no modo visual.
  4. Corrigida a exibição de resultados de teste de instrumentos bolsistas (com modelo bolsista de gestão de risco). Agora, o gráfico mostra apenas o capital (equity), o saldo e a carga sobre o depósito não são mostrados. As condições de negociação dessas contas são estimadas com base no nível dos fundos. O saldo mostra apenas o dinheiro na conta e não leva em conta os ativos e passivos do trader. Carga no depósito (margin/equity) não é mostrada, uma vez que a margem é o custo atual do ativo/passivo levando em conta o desconto, e ela varia com o capital.