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

Completamente redesenhado o gerenciamento do serviço de Hospedagem Virtual embutido

5 outubro 2019

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.