O que há de novo na MetaTrader 5?

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

8 abril 2017
MetaTrader 5 Android build 1576: adicionadas posições ao histórico de negociação

Ao MetaTrader 5 Android adicionada a apresentação do histórico de negociação na forma de posições. Anteriormente na aba "Histórico" eram exibidas apenas transações e ordens a partir do histórico, e agora é possível analisar as negociações usando posições. Para fazer isso, todas as operações relacionadas com a posição são agrupadas num único registro, nele é possível ver:

  • O tempo de abertura e fechamento da posição (determinado pela primeira e a última transação)
  • O volume da posição (se a posição é fechada parcialmente, são exibidos o volume fechado e o volume original)
  • Os preços médios ponderados de abertura e de fechamento de posição
  • O resultado financeiro total das transações relacionadas com a posição

30 março 2017
MetaTrader 5 iOS build 1547: histórico de negociação na forma de posições

Foi adicionada a apresentação do histórico na forma de posições. Anteriormente, na aba "Histórico" eram exibidas apenas as transações a partir do histórico, agora nela também são apresentadas as posições. A plataforma de negociação recolhe dados sobre operações - relativas à posição - e agrupa estes dados numa única entrada. Nela pode ser visto:

  • Momento - de abertura e fechamento de posição - a ser determinado pela primeira e a última transação, respectivamente
  • Volume da posição, isto é, se a posição é fechada parcialmente, são exibidos o volume fechado e o volume original
  • Preço de abertura médio ponderado e preço de fechamento de posição
  • Resultado financeiro total das transações relacionadas com a posição

24 março 2017
MetaTrader 5 build 1570: melhoria do mostruário do Mercado e expansão de funções de modelo em MQL5

Terminal

  1. Atualizado o mostruário da loja de aplicativos MetaTrader Market. A escolha de robôs de negociação e indicadores técnicos tornou-se mais fácil. Nós não só atualizamos o design, mas também acrescentamos a seleção de produtos:

    • Na página principal agora são mostrados os mais populares Experts, indicadores, produtos recentes do Mercado, bem como os melhores aplicativos gratuitos.
    • Nas seções de Experts, indicadores e utilitários apareceram subcategorias: robôs de cobertura e de grade, indicadores de tendência e multimoeda, e muito mais.




  2. Corrigida tanto a atualização do terminal de cliente quanto a mecânica das compras embutidas no Mercado, Sinais e Hospedagem Virtual, ao utilizar a conta de usuário de Windows com privilégios restritos.
  3. Corrigido o erro que, em alguns casos, levava à classificação incorreta do histórico de posições.
  4. otimizada e corrigida a exibição da aba "Ativos".

MQL5

  1. Adicionado o suporte para a sobrecarga de funções de modelo de parâmetros. Por exemplo, se existir uma função de modelo que registra no primeiro parâmetro o valor do segundo parâmetro usando uma conversão explícita de tipos. Em linguagem MQL5 é proibida a conversão do tipo string para o tipo bool, mas podemos fazer isto nós mesmos. Criamos uma sobrecarga de função de modelo:
    //+------------------------------------------------------------------+
    //| Função de modelo                                                 |
    //+------------------------------------------------------------------+
    template<typename T1,typename T2>
    string Assign(T1 &var1,T2 var2)
      {
       var1=(T1)var2;
       return(__FUNCSIG__);
      }
    //+------------------------------------------------------------------+
    //| Sobrecarga especial para o caso bool+string                      |
    //+------------------------------------------------------------------+
    string Assign(bool &var1,string var2)
      {
       var1=(StringCompare(var2,"true",false) || StringToInteger(var2)!=0);
       return(__FUNCSIG__);
      }
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       int i;
       bool b;
       Print(Assign(i,"test"));
       Print(Assign(b,"test"));
      }
    Como resultado da execução deste código, podemos ver que para o par int+string foi utilizada a função de modelo Assign(), enquanto, na segunda chamada, para o par bool+string já foi utilizada a versão sobrecarregada.
    string Assign<int,string>(int&,string)
    string Assign(bool&,string)

  2. adicionada a possibilidade de especialização explícita de funções de modelo. Para fazer isto, antes da lista de parâmetros de chamada, é preciso especificar os parâmetros de digitação:
    template<typename T>
    T Func() { return (T)0; }
      
      
    void OnInit()
      {
       Func<double>();   // especialização explícita da função de modelo
      }
    Assim, a especialização não se realiza através do parâmetro de chamada, mas sim especificando os tipos.

  3. Otimizada a exibição de indicadores de usuário com o tipo de desenho DRAW_ZIGZAG.
  4. Na enumeração de tipos de transações ENUM_DEAL_TYPE adicionados novos valores:

    • DEAL_DIVIDEND — operação de dividendo.
    • DEAL_DIVIDEND_FRANKED — operação de dividendo franqueado (não tributável, a empresa paga pelo cliente).
    • DEAL_TAX — dedução de imposto.

  5. Corrigida a exibição de indicadores com o tipo de desenho DRAW_FILLING. Caso coincidam as coordenadas das linhas superior e inferior, agora é desenhada uma linha fina.
  6. Corrigido o cálculo de coordenadas do objeto "Etiqueta bitmap" (Bitmap Label) ao definir o parâmetro CHART_SHOW na condição false. Este parâmetro é definido pela função ChartSetInteger e permite ocultar todos os elementos do gráfico de preço a fim de criar uma interface própria de programa.
  7. Corrigido o erro de transcodificação de imagens de 24 bits ao serem colocadas nos recursos do aplicativo MQL5.
  8. Corrigido o erro de impressão de estruturas das funções ArrayPrint.
  9. Atualizadas as bibliotecas-padrão MQL5.

MetaEditor

  1. Adicionada a tradução da interface de usuário para malaio.

Signals

  1. Corrigida a abertura da pagina de sinal no terminal, durante a transição a partir do site da MQL5.community, caso a conta de negociação não esteja conectada.

Tester

  1. Corrigido o erro da função CopyTicks em execução, no testador de estratégias.
  2. Corrigida a classificação de transações do tipo "Retirada" (Withdrawal) ao gerar um relatório de teste.
  3. Corrigida a modificação de ordens pendentes.

Hosting

  1. Corrigida a exibição do assistente da hospedagem virtual em telas de altíssima resolução (4K).

Documentação atualizada.

17 fevereiro 2017
MetaTrader 5 build 1545: rápida alternância entre janelas e alteração dos preços usando o mouse

Terminal

  1. Foi adicionada a alternância rápida entre as janelas "Caixa de Ferramentas" e "Testador de Estratégias."



  2. foi adicionada a possibilidade de alterar os preços e volumes das ordens usando a roda do mouse:




  3. Agora, ao alternar para baixar os terminais móveis, é armazenada a lista de seus servidores de negociação. Após instalar o MetaTrader 5, para iPhone ou Android, no dispositivo móvel, aparecerá imediatamente uma lista pronta com os servidores. Assim, você poderá conectar rapidamente as contas de negociação existentes. O servidor da conta conectada atualmente será exibido primeiro no terminal móvel.




  4. Foi reduzida significativamente a carga - sobre o terminal - criada pelos gráficos e objetos recolhidos, ou seja, em segundo plano.
  5. Foi corrigido o erro que, em alguns casos, levava à ativação incorreta dos Trailing-Stops.
  6. Foi corrigido o erro de filtragem de símbolo, no histórico de negociação da conta.
  7. Foi corrigido o erro de exibição do campo "Type", no histórico de posições.
  8. Foi corrigido o erro de formação e apresentação do histórico de negociação sob a forma de posições.

MQL5

  1. Foi corrigida a exibição de indicadores personalizados com o tipo de plotagem DRAW_COLOR_LINE, DRAW_COLOR_ZIGZAG e DRAW_COLOR_SECTION ao utilizar a cor CLR_NONE.
  2. Foi corrigido o erro nos modelos ao digitar o ponteiro constante.
  3. Foi corrigido o controle do acesso aos membros de classe private e protected.

‌Tester

  1. Foi corrigida a ativação de ordens limit - nos instrumentos financeiros - quando o valor da ordem a ser colocada é pior em relação ao mercado (quer o preço de compra é superior quer o preço de venda é inferior ao proposto pelo mercado).
  2. Foi removida a restrição no teste de indicadores personalizáveis com mais de 64 parâmetros de entrada.
  3. Foi adicionada a tradução da interface de usuário para hindi.

Documentação atualizada.

9 fevereiro 2017
MetaTrader 5 iOS build 1509: login no MQL5.com através do Facebook
  • Foi adicionada a possibilidade de login e registro da conta MQL5.com via Facebook. Agora, se você tem um perfil, nesta rede social, você pode em alguns cliques acessar os bate-papos e todo o conjunto de serviços para MetaTrader 5.

  • Melhoramentos e correções.
27 janeiro 2017
MetaTrader 5 build 1525: Apresentação do histórico na forma de posições e melhorias no testador

Terminal

  1. Foi adicionada a apresentação do histórico na forma de posições. O terminal de recolhe dados sobre transações relacionadas com a posição (abertura, aumento, fechamento parcial e total) e agrupa este dados numa única conta, onde é possível ver imediatamente:

    • Momento - de abertura e fechamento de posição - a ser determinado pela primeira e a última transação, respectivamente
    • Volume da posição; se a posição é fechada parcialmente, são exibidos o volume fechado e o volume original
    • Preço de abertura médio ponderado e preço de fechamento de posição
    • Resultado financeiro total das transações relacionadas com a posição




    Para contas de cobertura, esse tipo de apresentação de posições, na verdade, é semelhante ao histórico da conta na plataforma MetaTrader 4.




  2.  Foi adicionado um comando para processar o histórico de transações no gráfico de um determinado símbolo.

    • Para exibir todas as transações somente no símbolo da posição/transação selecionada, clique em "Adicionar transação por [nome do símbolo]." Transações serão adicionadas a todos os gráficos abertos atualmente de acordo com este símbolo. Se não houver gráficos abertos, será aberto um novo.
    • Para exibir as transações para todos os símbolos a partir do histórico da conta, clique em "Adicionar todas as transações." Em todos os gráficos abertos, serão adicionadas todas as operações de acordo com o símbolo correspondente.




  3. Foram adicionadas tanto a exibição do nome internacional do instrumento de negociação nas especificações do contrato, como a possibilidade de procurar segundo ele na caixa de diálogo de controle de instrumentos.




  4. Foi adicionada a possibilidade de definir rapidamente a resolução para a janela do terminal. A função será útil para aqueles que fazem vídeos. No menu, estão disponíveis as mais populares resoluções para a publicação em serviços de vídeo, como YouTube.



  5. Escalas e perfis de gráficos migrados a partir de [diretório de dados do terminal\Profiles] para [diretório de dados do terminal\MQL5\Profiles]. Agora é possível adicionar facilmente escalas no repositório MQL5 Storage e utilizá-las com qualquer um dos seus computadores.

  1. Foi adicionado o suporte para variáveis de recurso. Sua utilização pode facilitar muito a escrita de alguns programas. Por exemplo, você pode escrever um código em OpenCL num arquivo CL separado e, em seguida, incluir esse arquivo - como uma cadeia de caracteres - nos recursos de seu programa MQL5. Anteriormente, em vez disso, era necessário descrever esse código como uma variável de cadeia grande.

    Declaração da variável de recurso
    #resource caminho_para_o_arquivo_do_recurso as tipo_de_variável_de_recurso nome_de_variável_de_recurso

    Características
    • Para arquivos de sequência de caracteres, a codificação de BOM (cabeçalho) é detectada automaticamente. Se não houver nenhum BOM, a codificação será determinada pelo conteúdo. São suportadas codificações ANSI, UTF-8 e UTF-16. Todas as cadeias de caracteres são convertidas para Unicode.
    • Os dados deste recurso podem ser tratados por intermédio de uma variável. O endereçamento automático via "::<resource name>" não funciona.
    • O tipo especial de variável de recurso bitmap informa ao compilador que o recurso é uma representação gráfica. A variável de recurso, neste caso, obtém o tipo uint.
    • Ao usar uma imagem de 24 bits, para todos seu pixels de componente de canal-alfa, define-se como 255.
    • Ao usar uma imagem de 32 bits, sem canal-alfa, para todos seu pixels de componente de canal-alfa, também é definido como 255.
    • Após carregar uma imagem de 32 bits com canal-alfa não acontece nenhuma manipulação de pixels.
    • A matriz-variável de recurso de tipo bitmap pode ter duas dimensões. Neste caso, o tamanho da matriz será definido como [altura_de_imagem][largura_de_imagem].
    • No caso de uma matriz unidimensional, o número de elementos será definido como altura_de_imagem*largura_de_imagem.
    • Se o tamanho do arquivo de recurso não é um múltiplo do tamanho do elemento da matriz, em seguida, o resto dos dados é cortado. Por exemplo, quando o tamanho do arquivo é 14 bytes, para a matriz int o número de elementos será 3, e os restantes 2 bytes (14 - sizeof(int)*3) serão descartados.

    Exemplos de utilização
    #resource "data.bin" as int ExtData[]             // declaração de matriz de tipo numérico, que contém dados a partir do arquivo data.bin
    #resource "data.bin" as MqlRates ExtData[]        // declaração de matriz de estrutura simples, que contém dados a partir do arquivo data.bin
    
    #resource "data.txt" as string ExtCode            // declaração de cadeias de caracteres, que contém dados a partir do arquivo data.txt
    #resource "data.txt" as string ExtCode[]          // declaração de matriz de sequência de caracteres, que contém dados a partir do arquivo data.txt
    
    #resource "image.bmp" as bitmap ExtBitmap[]       // declaração de matriz unidimensional, que contém em si a varredura a partir do arquivo BMP, tamanho da matriz = height * width
    #resource "image.bmp" as bitmap ExtBitmap2[][]    // declaração de matriz bidimensional, que contém em si a varredura a partir do arquivo BMP, tamanho da matriz [height][width]

  2. Foi adicionada a propriedade CHART_SHOW para desativa a exibição do gráfico. Para obter e instalar a propriedade, são utilizadas as funções ChartGetInteger e ChartSetInteger.

    Se for definido como false, será desativada a plotagem de todos os atributos do gráfico de colunas de preços e serão removidas todos os recuos nas bordas do gráfico de colunas: escala do tempo e preço, barra de navegação rápida, marcas de eventos de calendário, ícones de transação, dicas de indicadores e barras, painéis indicadores, histogramas de volume, etc.

    A desativação da plotagem é uma solução ideal para criar sua própria interface de programa usando recursos gráficos.

    Os objetos gráficos sempre são plotados independentemente do valor da propriedade CHART_SHOW.

  3. Foi adicionada a propriedade CHART_KEYBOARD_CONTROL para ativar/desativar o controle de gráficos usando os teclas ("Home", "End", "PageUp", "+", "-", "Seta para cima", etc.). Ao definir CHART_KEYBOARD_CONTROL=false, é possível desativar a rolagem e dimensionamento do gráfico, no entanto, ao fazer isto, mantem-se a possibilidade de obter eventos - usando essa teclas - em OnChartEvent.

    Para obter e definir propriedades, são utilizadas as funções ChartGetInteger e ChartSetInteger.

  4. Foram adicionadas novas funçóes e propriedade para trabalhar com OpenCL.

    Novas propriedades para trabalhar com a memória
    Usando CLGetInfoIntegrer agora é possível quatro novas propriedades:
    • CL_DEVICE_MAX_WORK_GROUP_SIZE — número total de grupos locais de trabalho para o dispositivo OpenCL.
    • CL_KERNEL_WORK_GROUP_SIZE — número total de grupos locais de trabalho para o programa OpenCL.
    • CL_KERNEL_LOCAL_MEM_SIZE — tamanho da memória local em bytes, que é usada pelo programa OpenCL para todas as tarefas simultâneas no grupo. Utilize CL_DEVICE_LOCAL_MEM_SIZE para obter o máximo disponível.
    • CL_KERNEL_PRIVATE_MEM_SIZE — tamanho mínimo de memória privada em bytes a ser usado por cada tarefa na kernel do programa OpenCL.

    bool CLExecutionStatus(int kernel)
    Retornar o estado de execução do programa OpenCL. Como parâmero é enviado o identificador para a kernel do programa OpenCL.

    bool CLSetKernelArgMemLocal(int kernel_handle,int arg_index,ulong local_mem_size)
    Ele define o buffer local como argumento da função kernel. Como parâmero são enviados: o identificador para a kernel do programa OpenCL, o número do argumento de função OpenCL e tamanho de buffer.

  5. Foi adicionado o código de resposta TRADE_RETCODE_LIMIT_POSITIONS. O número de posições abertas que você pode ter em sua conta pode ser restrito pelas configurações do servidor. Após atingir o limite, em resposta à colocação de uma ordem, o servidor retorna o erro TRADE_RETCODE_LIMIT_POSITIONS. A restrição opera de forma diferente dependendo do tipo de registro de posições na conta:

    • Sistema de compensação — leva em conta o número de posições abertas. Ao atingir o limite, a plataforma não permite colocar ordens novas, cuja execução poderia levar a aumentar o número de posições abertas. Na verdade, a plataforma colocará ordens apenas nos símbolos, nos quais já existem posições abertas. No sistema de compensação, ao verificar o limite, não são tidas em conta as ordens pendentes atuais, uma vez que sua execução pode levar a uma alteração nas posições atuais, em vez de um aumento de seu número.
    • No sistema de cobertura, além das posições abertas, são tidas em conta as ordens pendentes colocadas, uma vez que sua execução sempre leva a abertura de uma nova posição. Ao atingir o limite, a plataforma não permite colocar ordens de mercado nem ordens pendentes para abrir posições.

  6. Foi corrigido o erro que em alguns casos causava que ticks fossem ignorados no histórico de negociação.
  7. Foram corrigidos os erros de digitação indireta de escalas.
  8. Foi atualizada a biblioteca para trabalhar com estatísticas matemáticas.

Market

  1. Foi corrigida a abertura da página do produto ao baixar a versão demo.

Tester

  1. Após completar a otimização, os resultados são classificados automaticamente na coluna "Resultados."
  2. No menu de contexto da guia de resultados de otimização e diário, foi adicionada uma opção a fim de alternar automaticamente para resultados, após concluir a otimização.
  3. O testador de estratégias agora permanece no modo de otimização, após iniciar um único teste. Anteriormente, ao iniciar um teste único, a partir da guia de resultados de optimização, o testador de estratégias mudava automaticamente para o modo de teste único. Para realizar a re-otimização, foi necessário incluí-lo novamente nas configurações.
  4. Agora os conjuntos de parâmetros de entrada podem ser armazenados não só sob a forma de arquivos set, mas também como configurações do testador local de estratégias, com fácil acesso a eles através do menu de contexto.




  5. Foi adicionada tradução da interface para o mongol, húngaro, romeno e urdu.

MetaEditor

  1. Foi adicionada a possibilidade de alterar a ordem das expressões a serem observadas na janela de depuração. Basta arrastar a expressão para a posição desejada com o mouse.




  2. Foi corrigido o erro na determinação da codificação nos arquivos de origem.
  3. Foi corrigida a busca por arquivos em UTF-8.
  4. Foi corrigido o erro na seleção de texto com o mouse ao haver nele caracteres de tabulação.
  5. Foi adicionada tradução da interface para húngaro e romeno.

Documentação atualizada.

18 janeiro 2017
MetaTrader 5 Android build 1506: filtragem e classificação de transações
  • Nas guias "Negociação" e "Histórico", encontra-se a classificação; Isso permite que você organize todas as operações de negociação de acordo com os símbolos (instrumentos financeiros), ordens e tempo de abertura/fechamento. Além da classificação no "Histórico", existe a possibilidade de filtrar as transações segundo o símbolo.

  • O trabalho com gráficos em modo multi-janela foi otimizado. À sua disposição, encontra-se um menu melhorado no qual é possível abrir novas janelas, excluir as antigas, bem como reorganizá-las e selecionar sua localização (vertical, horizontal ou mosaico).

9 dezembro 2016
MetaTrader 5 build 1495: Melhoras na MQL5 para trabalhar com gráficos personalizados

MQL5

  1. Foi adicionada a função CopyTicksRange.
  2. Na classe CCanvas foram adicionadas funções de suavização melhoradas:
  3. A documentação MQL5 foi adicionada a descrição da biblioteca gráfica, com a qual é possível construir rapidamente gráficos de barras, distribuições e gráficos lineares diretamente sobre os gráficos de preços.
  4. As constantes Status do terminal de cliente foram adicionados identificadores de estado de teclas de atalho. A chamada de TerminalInfoInteger(TERMINAL_KEYSTATE_XXX) retorna o mesmo código de status de teclas como a função GetKeyState() a partir de MSDN.
  5. Não suporta conversão do tipo string para o tipo bool. Para verificar as cadeias de caracteres será preciso especificar explicitamente a condição. Por exemplo, para o código a seguir, na nova versão, será emitido um erro de compilação:
    string str;
    ...
    if(str)                        // aparecerá o erro de compilação "Cannot convert type 'string' to 'bool'" (nas compilações anteriores não acontecia o erro)
       Print("str is true");
    É necessário escrever uma condição explícita:
    string str;
    ...
    
    //--- verifica se a cadeia de caracteres é inicializada
    if(str!=NULL)
       Print("str is true");
    
    ou
    
    //--- verifica se o valor da cadeia de caracteres é "true"
    if(StringCompare(str,"true",false))
       Print("str is true");
    
    ou
    
    //--- verifica se a cadeia de caracteres é um número e não é igual a zero
    if((int)str!=0)
       Print("str is true");

Correções de crash-logs.

2 dezembro 2016
Plataforma web MetaTrader 5: autenticação de dois fatores e alteração de senha
  • Para reforçar a segurança das contas de negociação foi adicionada uma autenticação de dois fatores usando senhas de uso único. Para ativar a autenticação de dois fatores, use o aplicativo móvel MetaTrader 5. Faça login e, na janela "Opções", abra o gerador One-time password (OTP). Associe a ele todas suas contas de negociação, assim cada uma irá gerar automaticamente uma senha única de seis dígitos descartável. Insira-a ao iniciar sessão na plataforma web.


  • Foi adicionada a possibilidade de alterar as senhas habitual e de investidores. Aproveite esta oportunidade para criar um identificador pessoal de fácil uso com o qual não esquecerá sua senha.
  • À plataforma web também foi adicionada a geração automática de contas de demostração. Agora você pode fazer login na MetaTrader 5 Web a partir de qualquer navegador e começar imediatamente a negociar no mercado Forex, de ações ou futuros.
24 novembro 2016
MetaTrader 5 build 1485: modos de teste adicionais e gráficos na biblioteca padrão

Terminal

  1. Foi alterada a ordem de exibição das entradas no registro do terminal e MetaEditor. Anteriormente, no início, no registro eram exibidas as entradas mais recentes, agora, as mais antigas. Inverter a ordem de classificação fará a leitura do registro mais fácil e familiar.




    Além disso, através do menu de contexto do registro agora é possível ocultar as colunas "Tempo" e "Fonte".

  2. No histórico de negociação, as ordens e transações de fechamento de posição - no modo de cobertura - agora mostram o bilhete de posição fechada. Isso facilita a busca de operações pares de abertura e fechamento.




  3. Foi corrigido o erro que levava à cópia dos níveis SL/TP a partir das posições atuais para a posição nova do mesmo instrumento. O erro acontecia ao utilizar a função Negociação em um clique (por exemplo, painel no gráfico, janela Observação do mercado) no modo de cobertura.
  4. Foi corrigida a exibição de objetos de seta em telas de alta resolução (4K).

MQL5

  1. Foi adicionada a função ArrayPrint para saída no registro de matrizes de tipos e estruturas simples.
    void  ArrayPrint(
       const void&   array[],             // matriz de saída
       uint          digits=_Digits,      // número de casas decimais
       const string  separator=NULL,      // delimitador entre os valores dos campos de estrutura
       ulong         start=0,             // índice do primeiro elemento de saída
       ulong         count=WHOLE_ARRAY,   // número de elementos de saída
       ulong         flags=ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_LIMIT|ARRAYPRINT_ALIGN    
       );
    ArrayPrint não exibe, no registro, todos os campos da matriz de estruturas, uma vez que os campos tanto de matriz como de ponteiros de objetos são omitidos. Para exibição de todos os campos dessa estrutura, será necessário escrever a função de saída em massa com a formatação desejada.
    //--- exibe os valores das 10 últimas barras
       MqlRates rates[];
       if(CopyRates(_Symbol,_Period,1,10,rates))
         {
          ArrayPrint(rates);
          Print("Verificação\n[time]\t[open]\t[high]\t[low]\t[close]\t[tick_volume]\t[spread]\t[real_volume]");
          for(int i=0;i<10;i++)
            {
             PrintFormat("[%d]\t%s\t%G\t%G\t%G\t%G\t%G\t%G\t%I64d\t",i,
             TimeToString(rates[i].time,TIME_DATE|TIME_MINUTES|TIME_SECONDS),
             rates[i].open,rates[i].high,rates[i].low,rates[i].close,
             rates[i].tick_volume,rates[i].spread,rates[i].real_volume);
            }
         }
       else
          PrintFormat("CopyRates failed, error code=%d",GetLastError());
    //--- exemplo de saída
    /*
                        [time]  [open]  [high]   [low] [close] [tick_volume] [spread] [real_volume]
       [0] 2016.11.09 04:00:00 1.11242 1.12314 1.11187 1.12295         18110       10   17300175000
       [1] 2016.11.09 05:00:00 1.12296 1.12825 1.11930 1.12747         17829        9   15632176000
       [2] 2016.11.09 06:00:00 1.12747 1.12991 1.12586 1.12744         13458       10    9593492000
       [3] 2016.11.09 07:00:00 1.12743 1.12763 1.11988 1.12194         15362        9   12352245000
       [4] 2016.11.09 08:00:00 1.12194 1.12262 1.11058 1.11172         16833        9   12961333000
       [5] 2016.11.09 09:00:00 1.11173 1.11348 1.10803 1.11052         15933        8   10720384000
       [6] 2016.11.09 10:00:00 1.11052 1.11065 1.10289 1.10528         11888        9    8084811000
       [7] 2016.11.09 11:00:00 1.10512 1.11041 1.10472 1.10915          7284       10    5087113000
       [8] 2016.11.09 12:00:00 1.10915 1.11079 1.10892 1.10904          8710        9    6769629000
       [9] 2016.11.09 13:00:00 1.10904 1.10913 1.10223 1.10263          8956        7    7192138000
       Verificação
       [time] [open] [high] [low] [close] [tick_volume] [spread] [real_volume]
       [0] 2016.11.09 04:00:00 1.11242 1.12314 1.11187 1.12295 18110 10 17300175000 
       [1] 2016.11.09 05:00:00 1.12296 1.12825 1.1193 1.12747 17829 9 15632176000 
       [2] 2016.11.09 06:00:00 1.12747 1.12991 1.12586 1.12744 13458 10 9593492000 
       [3] 2016.11.09 07:00:00 1.12743 1.12763 1.11988 1.12194 15362 9 12352245000 
       [4] 2016.11.09 08:00:00 1.12194 1.12262 1.11058 1.11172 16833 9 12961333000 
       [5] 2016.11.09 09:00:00 1.11173 1.11348 1.10803 1.11052 15933 8 10720384000 
       [6] 2016.11.09 10:00:00 1.11052 1.11065 1.10289 1.10528 11888 9 8084811000 
       [7] 2016.11.09 11:00:00 1.10512 1.11041 1.10472 1.10915 7284 10 5087113000 
       [8] 2016.11.09 12:00:00 1.10915 1.11079 1.10892 1.10904 8710 9 6769629000 
       [9] 2016.11.09 13:00:00 1.10904 1.10913 1.10223 1.10263 8956 7 7192138000 
    */

  2. Foi corrigido o erro ao adicionar cadeias de caracteres do tipo S1=S2+S1
  3. Foi alterado o comportamento da função ArrayResize. Ao enviar - como parâmetros reserve_size - o valor -1, a função liberta a memória não utilizada (memória reservada), desde que o aumento no tamanho da matriz não aconteça. Alteração do tamanho da matriz para 0 com valor reserve_size=-1 equivalente à chamada ArrayFree. O novo comportamento permite otimizar o uso de memória em programas MQL5.
    void OnStart()
      {
       int arr[];
    //--- quanta memória é usada inicialmente 
       Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
    //--- quanta memória é usado para uma matriz de tamanho 1, mas com uma reserva de
       ArrayResize(arr,1,1024*1024);
       Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
    //--- após aumentar a matriz, o tamanho da memória utilizada não é alterado pela reserva
       ArrayResize(arr,1024*512,1024*1024);
       Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
    //--- após reduzir a matriz, o tamanho da memória utilizada também não é alterado
       ArrayResize(arr,1);
       Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
    //--- a memória sem uso é liberada pela remoção da reserva
       ArrayResize(arr,1,-1);
       Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
      }

  4. A biblioteca padrão foram adicionadas funções para plotagem de gráficos. Para usar, habilite o arquivo MQL5\Include\Graphics\Graphic.mqh em seu projeto.

    Plotagem de gráfico de 3 séries de dados usando GraphPlot:
    #include <Graphics/Graphic.mqh>
    
    double Func1(double x) { return MathPow(x,2); }
    double Func2(double x) { return MathPow(x,3); }
    double Func3(double x) { return MathPow(x,4); }
    
    void OnStart()
      {
       GraphPlot(Func1,Func2,Func3,-2,2,0.05,CURVE_LINES);
      }
    
    Resultado:


    Plotagem de gráfico com base na matriz de dados usando GraphPlot:<br2>
    #include <Math/Stat/Binomial.mqh>
    #include <Graphics/Graphic.mqh>
    
    void OnStart(void)
      {
       double    vars[101];
       double    results[101];
       const int N=2000;
    //---  
       MathSequence(0,N,20,vars);
       MathProbabilityDensityBinomial(vars,N,M_PI/10,true,results);
       ArrayPrint(results,4);
       GraphPlot(results);
    //---
      }
    Resultado:



  5. Foram atualizadas as funções de trabalho com estatística matemática na biblioteca padrão. Foi realizada uma verificação grande quanto à qualidade e precisão de todas as funções na versão MQL5, bem como na linguagem de origem R. Para controlar a precisão e a velocidade do trabalho, juntamente com biblioteca estática são distribuídos testes de unidade. Eles estão localizados no diretório \MQL5\Scripts\UnitTests\Stat.

    • TestStat.mq5 — script de teste base para verificar os resultados dos cálculos
    • TestPrecision.mq5 — teste de precisão de cálculos
    • TestBenchmark.mq5 — teste com medida do desempenho de cálculos

Tester

  1. Foram estendidas as configurações de espera na execução de pedidos de negociação durante o teste. Agora é possível verificar o robô de negociação em uma variedade de condições financeiras mais amplas: desde o caso ideal sem demora a qualquer atraso definido pelo usuário.



    Anteriormente estava disponível apenas o modo de atraso aleatório.

  2. Foi corregido erro de formação de volume de tick de barras ao testar em modo OHLC em М1.
  3. Foi corrigida a colocação de tempo de abertura de ordens e posições em milissegundos ao negociar no modo de cobertura.
  4. Foi corregido o erro "old tick" (tick obsoleto) durante o teste multi-moeda ou multi-timeframe no modo de ticks reias.
  5. Foram aceleradas as funções CopyTicks quando os ticks solicitados eram lidos a partir do banco de dados no disco.

MetaEditor

  1. Foram adicionados os comados de trabalho com o repositório versionado de códigos-fonte MQL5 Storage ao menu de contexto do arquivo no Navegador e na barra de ferramentas.




  2. Foi corrigido o erro que levava à violação da integridade do banco de dados local MQL5 Storage quando se trabalhava com mais de 1024 arquivos no repositório.
  3. Foram corrigidos bugs de exibição da árvore em arquivos da MQL5 Storage.
  4. Foi corrigido a exibição de arquivo após a substituição de texto em massa.

Documentação atualizada.

24 novembro 2016
MetaTrader 5 iOS build 1425
  • Melhorias do painel One Click Trading no gráfico: agora também está disponível no modo retrato; o volume de negociação pode ser rapidamente alterado selecionando um valor desejado na lista.

  • O símbolo do gráfico agora pode ser alterado tocando no nome do símbolo no cabeçalho da janela.
  • Melhorias na seção de configurações do aplicativo: agora ele apresenta informações sobre a conta atual, unidades devidamente dispostas e melhor projetado.
  • Múltiplas melhorias e correções.
14 outubro 2016
MetaTrader 5 build 1455: Biblioteca de funções matemáticas MQL5

Terminal

  1. Foram adicionados dicas pop-up para os botões Buy, Sell e Close nos diálogos da negociação. As dicas explicam exatamente quais ativos são comprados e vendidos durante a execução de uma operação, ajudando traders iniciantes a entender o processo de negociação.




  2. Foram adicionados novos ícones de ordens, transações e posições nas guias "Negociação" e "Histórico".




  3. Foram otimizados e acelerados consideravelmente (até 4-5 vezes) a exibição e atualização do livro de ofertas, gráfico de ticks do livro de ofertas e canal de negociações.
  4. Foi corrigido o erro de sincronização do histórico de ticks em tempo de não-negociação. Em alguns casos, o erro levava ao consumo excessivo de tráfego de rede.

MQL5

  1. Na biblioteca padrão, foi incluía a versão MQL5 da biblioteca de análise numérica ALGLIB.

    Possibilidades da biblioteca

    • Álgebra linear
    • Solução de sistemas de equações lineares e não lineares
    • Interpolação
    • Otimização
    • Transformada rápida de Fourier
    • Integração numérica
    • Aproximação de mínimos quadrados lineares e no-lineares
    • Solução de equações diferenciais ordinárias
    • Cálculo de funções especiais
    • Estatística descritiva e testes de hipóteses
    • Análise de dados: classificação, regressão
    • Implementação de algoritmos de álgebra linear, interpolação, etc. na aritmética de alta precisão (usando MPFR)

    Como usar

    Os arquivos da biblioteca ALGLIB estão localizados no diretório \MQL5\Include\Math\Alglib. Para usar as funções, adicione o arquivo principal da biblioteca ao seu programa:

    #include <Math\Alglib\alglib.mqh>

  2. A biblioteca padrão foram adicionadas funções de trabalho com estatística matemática. Agora, em MQL5, estão disponíveis as possibilidades da linguagem R, ela é um dos melhores instrumentos de processamento estatístico e análise de dados.<br1>

    Possibilidades da biblioteca

    A biblioteca estatística contém funções para cálculo de características estatísticas de dados, bem como funções para trabalhar com distribuições estatísticas:

    • Funções para calcular as características estatísticas de elementos de matriz
    • Funções para trabalhar com distribuições estatísticas: distribuição normal, distribuição log-normal, distribuição beta, etc.

    Como usar

    Os arquivos da biblioteca ALGLIB estão localizados no diretório \MQL5\Include\Math\Stat. Para usar as funções, adicione o arquivo com as funções desejadas ao seu programa, por exemplo:

    #include <Math\Stat\Binomal.mqh>
    #include <Math\Stat\Cauchy.mqh>
    

    Leia descrições detalhadas das funções da biblioteca no artigo Distribuições estatísticas em MQL5: pegamos as melhores a partir de R.


  3. Na biblioteca padrão, foi incluía a versão MQL5 da biblioteca Fuzzy, ela implementa sistemas de inferência de lógica difusa Mastop e Sugeno.

    Possibilidades da biblioteca

    • 13 funções de associação
    • Forma flexível de criação de regras para sistemas fuzzy
    • Sistema de inferência de lógica difusa Mastop
    • Sistema de inferência de lógica difusa Sugeno
    • 5 métodos de exclusão da difusão para sistemas do tipo Mamdani
    • Número ilimitado de variáveis de entrada e saída

    Como usar

    Os arquivos da biblioteca Fuzzy estão localizados no diretório \MQL5\Include\Math\Fuzzy. Para usar as funções, adicione o arquivo com as funções desejadas ao seu programa, por exemplo:

    #include <Math\Fuzzy\mamdanifuzzysystem.mqh>
    #include <Math\Fuzzy\sugenofuzzysystem.mqh>
    

    Uma descrição detalhada da biblioteca pode ser encontrada ni Code Base: Fuzzy, biblioteca para trabalhar com lógica difusa


  4. Foi adicionada a propriedade CHART_QUICK_NAVIGATION para habilitar/desabilitar a barra de navegação rápida no gráfico. Para alterar e obter o estado das propriedades, utilize as funções ChartSetInteger e ChartGetInteger.




    A barra é chamada pressionado a tecla Enter ou Space. Ao usá-la, é possível passar rapidamente para a data especificada no gráfico, alternar o símbolo e período. Se seu programa MQL5 manipula as teclas Enter ou Space, desative a propriedade CHART_QUICK_NAVIGATION para o terminal não capturar esses eventos. Além disso, a barra de navegação rápida pode ser chamada mediante duplo clique.

  5. Foram adicionadas as funções FileLoad e FileSave para facilitar a leitura e armazenamento de matizes nos arquivos. Ao contrário de FileRead* e FileWrite*, essas funções não precisam o manipulador de arquivo. FileLoad e FileSave trabalham com matrizes de tipos numéricos, bem como com estruturas simples sem cadeias de caracteres, matrizes dinâmicas ou objetos de uma classe.
    long  FileLoad(
       const string filename,      // [in] nome do arquivo
       void         &buffer[],     // [out] matriz na qual é tomado em consideração o arquivo
       uint         common_flag=0  // [in] 0 - busca do arquivo na pasta Files do terminal, FILE_COMMON - na pasta comum dos terminais
       );
    
    bool  FileSave(
       const string filename,      // [in] nome do arquivo
       const void   &buffer[],     // [in] matriz armazenada no arquivo
       uint         common_flag=0  // [in] 0 - criação do arquivo na pasta Files do terminal, FILE_COMMON - na pasta comum dos terminais
       );
    Exemplo de como armazenar, numa pasta, uma matriz de ticks e, em seguida, lê-la.
    //--- parâmetros de entrada
    input int      ticks_to_save=1000; // número de ticks
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       string  filename=_Symbol+"_ticks.bin";
       MqlTick ticks[];
    //---
       int copied=CopyTicks(_Symbol,ticks,COPY_TICKS_ALL,0,ticks_to_save);
       if(copied!=-1)
         {
          PrintFormat(" CopyTicks(%s) copied %d ticks",_Symbol,copied);
          //--- se o histórico de ticks estiver sincronizado, o código de erro será igual a zero
          if(!GetLastError()==0)
             PrintFormat("%s: Ticks are not synchronized. Error=",_Symbol,copied,_LastError);
          //---  armazenamos os ticks no arquivo
          if(!FileSave(filename,ticks,FILE_COMMON))
             PrintFormat("FileSave() failed, error=%d",GetLastError());
         }
       else
          PrintFormat("Failed CopyTicks(%s), Error=",_Symbol,GetLastError());
    //--- agora lemos de volta estes ticks a partir do arquivo
       ArrayFree(ticks);
       long count=FileLoad(filename,ticks,FILE_COMMON);
       if(count!=-1)
         {
          Print("Time\tBid\tAsk\tLast\tVolume\tms\tflags");
          for(int i=0;i<count;i++)
            {
             PrintFormat("%s.%03I64u:\t%G\t%G\t%G\t%I64u\t0x%04x",
             TimeToString(ticks[i].time,TIME_DATE|TIME_SECONDS),ticks[i].time_msc%1000,
             ticks[i].bid,ticks[i].ask,ticks[i].last,ticks[i].volume,ticks[i].flags);
            }
         }
      }

  6. Foi modificada a exibição do indicador personalizado com modo de desenho DRAW_CANDLES. Agora é possível definir de uma a três cores. A exibição de velas depende de quantas cores são definidas.

    Se for indicada uma cor, todas as velas no gráfico serão completamente pintadas com essa cor.
    //--- velas pintadas na mesma cor
    #property indicator_label1  "One color candles"
    #property indicator_type1   DRAW_CANDLES
    //--- foi indicado apenas uma cor, por isso todas as velas terão apenas uma cor
    #property indicator_color1  clrGreen  
    Se forem indicadas duas cores, os contornos das velas serão desenhadas usando a primeira cor, enquanto o corpo usando a segunda.
    //--- a cor das velas difere da cor das sombras
    #property indicator_label1  "Two color candles"
    #property indicator_type1   DRAW_CANDLES
    //--- sombras e contorno de velas de cor verde, corpo de cor branca
    #property indicator_color1  clrGreen,clrWhite 
    Se forem indicadas duas cores, os contornos das velas serão desenhadas usando a primeira cor, enquanto o as velas de alta e baixa serão definidas usando uma segunda e terceira.
    //--- o cor das velas é diferente da cor das sombras
    #property indicator_label1  "One color candles"
    #property indicator_type1   DRAW_CANDLES
    //--- as sombras e contornos de cor verde; o corpo da vela de alta de cor branca; corpo da vela de baixa de cor vermelha
    #property indicator_color1  clrGreen,clrWhite,clrRed
    Assim, usando o estilo DRAW_CANDLES, é possível criar suas próprias opções personalizadas para colorir velas. Também é possível alterar dinamicamente todas as cores -no processo de trabalho do indicador- mediante a função PlotIndexSetInteger(índice_de_construção_DRAW_CANDLES, PLOT_LINE_COLOR, número_de_modificador, cor), aqui o número_de_modificador pode ter os seguintes valores:
    • 0 – cor do contorno e as sombras
    • 1 – cor do corpo da vela de alta
    • 2 – cor do corpo da vela de baixa
    //--- definimos a cor do contorno e das sombras
    PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrBlue);
    //--- definimos a cor do corpo para a vela de alta
    PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrGreen);
    //--- definimos a cor do corpo para a vela de baixa
    PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,clrRed);
  7. Foram corrigidos vários bugs e foi acelerado o trabalhar com o histórico de ticks usando as funções CopyTicks.
  8. Permitido usar operadores nas interfaces.

Market

  1. Foi corrigido o erro que, em alguns casos, levava a um pedido repetido de autorização na MQL5.community ao comprar no Mercado.

Tester

  1. Foi adicionada a tradução da interface do usuário para grego, malaio e hebraico.

Documentação atualizada.

29 setembro 2016
Plataforma web MetaTrader 5: otimização do código e novas possibilidades da interface
  • Foi adicionada a possibilidade de alterar a dimensão dos blocos do aplicativo web, incluindo a "Observação do mercado" e as janelas com gráficos de cotações.
  • Agora está disponível a classificação por colunas nas guias "Negociação" e "Histórico", na janela "Caixa de ferramentas". Além disso, a largura das colunas pode ser alterada.
  • Foram adicionados um instrumento de seleção rápida de símbolo é a guia "Detalhes."
  • Foi melhorado o código para acelerar o funcionamento geral do terminal web: a inicialização da conta, a seleção de símbolos e a negociação em si agora funcionam com uma maior velocidade.

26 setembro 2016
MetaTrader 5 iOS build 1403
  • Foi alterada a seção “Negociação”, agora as informações de negociação dependem do sistema de controle de riscos na conta de negociação: Retail Forex, Futures ou Exchange model.

  • A seleção de idioma de interface foi movida para um item separado nas configurações gerais.
  • Melhorias e correções.
26 setembro 2016
MetaTrader 5 Android build 1372
  • O aplicativo suporta o modo multi-janela para gráficos, agora os traders podem monitorar simultaneamente a dinâmica de preços de vários instrumentos financeiros.
  • Agora você pode alterar a altura das subjanelas nas quais são exibidos os indicadores.
  • Do mesmo modo, na plataforma móvel agora há um botão de seleção rápida de instrumento e um menu separado de configurações de gráfico. 


  • Na plataforma MetaTrader 5 Android, nós adicionamos a edição de níveis de indicadores e traduzimos a interface para idioma búlgaro.
16 setembro 2016
MetaTrader 5 build 1430: guia Exposure atualizada

Terminal


  1. Foi desenvolvido um novo algoritmo que ajuda a geração da guia "Ativos" para o mercado de ações. Agora o terminal adapta a apresentação de ativos dependendo do sistema de gerenciamento de riscos utilizado para a conta de negociação: Retail Forex, Futures ou Modelo de bolsa.

    A seção "Ativos" ajudará aqueles que negociam com moedas ou futuros a entender seu estado atual no mercado. As mesmas moedas podem se encontrar em uma variedade de instrumentos, sendo membros de um par de moedas, sendo a moeda básica, etc. Por exemplo, você pode ter posições opostas nos pares GBPUSD, USDJPY e GBPJY. Neste tipo de situação, será muito problemático compreender, por um lado, qual é a quantidade de moeda que você tem e, por outro, quanto você deve. No entanto, a situação é ainda mais complicada quando o número dessas posições é superior a 3. Nesta situação, é fácil proceder à verificação do estado final da conta na seção "Ativos".
    Examinemos um exemplo, no caso de ter três posições:

    Buy GBPJPY 1 lot at 134.027 — obtivemos 100 000 GBP, 134 027 000 JPY
    Sell USDJPY 1 lot at 102.320 — entregamos 100 000 USD, obtivemos 102 320 000 JPY
    Sell GBPUSD 1 lot at 1.30923 — entregamos 100 000 GBP, obtivemos 103 920 USD

    Nós compramos e vendemos simultaneamente 100 000 GPB. Em GBP temos 0, e a guia "Ativos" não exibe esta moeda. Em USD, em um caso, entregamos moeda, em outro, obtemos. Como a nossa moeda de depósito é também USD, a guia Ativos calcula o total e totaliza-o com o saldo atual. A moeda JPY participou em duas negociações, a guia também exibe o valor total.




    A seção ajudará aqueles que negociam segundo o modelo de bolsa a entender como usar o dinheiro. Ao contrário do modelo anterior, uma vez finalizada a negociação, o dinheiro é diretamente debitado/creditado do/ao saldo. Por exemplo, ao comprar EURRUB, você recebe imediatamente euros, e a partir do saldo debita-se o valor correspondente em rublos. Durante a negociação, mesmo o saldo da conta pode se tornar negativo, isto é: quando você está negociando com dinheiro emprestado, os ativos adquiridos agirão como fundos de manutenção. Nesta situação, a guia "Ativos" permitirá que você entenda facilmente o estado de negociação da conta.

    Adicionalmente, neste caso, exibe-se o valor de liquidação, isto é, a soma entre a quantidade de fundos na conta e o valor (resultado) de fechamento das posições atuais, de acordo com o preço de mercado.





  2. Foi corrigido o erro de exibição do tipo de negociação no histórico de operações de negociação.
  3. Foi corrigida a exibição da janela de notificação sobre riscos durante a reconexão da conta de negociação.
  4. Foi melhorado e corrigido o trabalho com o diálogo de seleção de instrumentos de negociação ao ter um número grande de símbolos (alguns milhares e mais).
  5. Foi corrigida a exibição de níveis nos indicadores embutidos, calculados com base na média móvel (Bollinger Bands, Adaptive Moving Average, etc.). O problema surgia ao construir os indicadores em uma janela separada.
  6. Foi corrigido o erro que, em alguns casos, não permitia colocar a ordem em um contrato futuro. O problema surgia se o preço na ordem coincidia com o limite superior ou inferior do preço do contrato.

MQL5

  1. Foi otimizada e acelerada a compilação de programas MQL5.
  2. Foi adicionado o suporte dos modificadores final e override para classes, estruturas e funções.

    Modificador final para classes e estruturas
    A presença do modificador final, ao declarar a estrutura ou classe, restringe a futura herança a partir dele. Se a classe (estrutura) não precisar de alterações futuras ou se essas alterações não estiverem disponíveis por razões de segurança, será bom que a declare com o modificador final. Quando você fizer isso, todos os métodos da classe também serão implicitamente considerados como final.
    class CFoo final
      {
      //--- corpo da classe
      };
     
    class CBar : public CFoo
      {
      //--- тело класса
      };
    Ao tentar herdar a partir da classe com o modificador final, como foi mostrado no exemplo acima, o compilador exibirá o erro:
    cannot inherit from 'CFoo' as it has been declared as 'final'
    see declaration of 'CFoo'

    Modificador override para a função
    O modificador override indica que a função declarada deve substituir o método da classe pai. Durante a substituição, o uso deste modificador permite evitar erros como, por exemplo, a alteração aleatória de assinatura. Outro exemplo mais detalhado seria, na classe básica, está definido o método func, ele aceita como argumento a variável do tipo int:
    class CFoo
      {
       void virtual func(int x) const { }
      };
    Além disso, o método é substituído na classe herdada:
    class CBar : public CFoo
      {
       void func(short x) { }
      };
    No entanto, de acordo com o erro, o tipo de argumento é alterado de int para short. De fato, neste caso, não acontece uma substituição, senão uma sobrecarga do método. Após agir segundo o algoritmo para determinar a função sobrecarregada, em determinadas situações, o compilador pode selecionar o método definido na classe base, em vez do método substituído.

    Para evitar esses erro, é preciso adicionar explicitamente o modificador override ao método override.
    class CBar : public CFoo
      {
       void func(short x) override { }
      };
    Se, durante a substituição, for alterada a assinatura do método, o compilador não poderá encontrar, na classe pai, o método com exatamente a mesma assinatura e exibirá o erro de compilação:
    'CBar::func' method is declared with 'override' specifier but does not override any base class method

    Modificador final para a função

    Ao contrário, o modificador final restringe a substituição de método nas classes-herdeiras. Se a realização do método for auto-suficiente é estiver totalmente concluída, declare-o com o modificador final, para que ele não seja modificado posteriormente.
    class CFoo
      {
       void virtual func(int x) final { }
      };
     
    class CBar : public CFoo
      {
       void func(int) { }
      };
     
    Ao tentar substituir o método com o modificador final, como foi mostrado no exemplo acima, o compilador exibirá o erro:
    'CFoo::func' method declared as 'final' cannot be overridden by 'CBar::func'
    see declaration of 'CFoo::func'
  3. Foi corrigido o erro de compilação de funções modelo com parâmetros padrão.

Market

  1. Foi corrigida a série de erros na classificação de produtos do Mercado-

Tester

  1. Foi corrigida a atualização das ordens de mercado atuais, nas posições abertas e posições no modo de teste visual.
  2. Foi removida a derrapagem (slippage) de execução de ordens Buy Limit e Sell Limit ao testar em instrumentos financeiros.
  3. Foi corrigido o erro que levava à geração de preços incorretos no modo de teste "Segundo os preços de abertura".
  4. Foi corrigida a formação de eventos OnTradeTransaction durante o teste.
  5. Ao testar com base em ticks reais, no diário do testador, são exibidas informações sobre a discrepância de preços dos ticks (bid ou last, dependendo do preço é baseada a barra) para os valores low ou high disponíveis na barra minuto.

MetaEditor

  1. Foram corrigidos os erros de exibição de dados nos arquivos do código fonte.

Documentação atualizada.

19 agosto 2016
MetaTrader 5 build 1395: aceleração de operações de negociação e melhorias no teste visual

Terminal

  1. Foi otimizado e consideravelmente acelerado o envio de comandos de negociação para o terminal de cliente.
  2. Foi corrigido um bug que não permitia executar programas MQL5 nos terminais, ao trabalhar em versões de 32 bits do Windows 10 build 1607.
  3. Foi adicionado ao navegador a exibição do modo de trabalho da conta de negociação, isto é, a cobertura e compensação (Hedging e Netting).
  4. Foi adicionado ao navegador um comando de menu de contexto para conetar a conta desejada ao terminal web.
  5. Foi redesenhada a seção do menu "Ajuda", foram anexados links para assistir a vídeos de treinamento.
  6. Foram corrigidos vários erros de interface, ao trabalhar em telas de alta resolução (4K).
  7. Foram corrigidos os erros na tradução da interface do usuário para persa.

MQL5

  1. Foram adicionados os ponteiros 'void *', o que permitirá criar coleções abstratas de objetos. Neste tipo de variável, você pode armazenar um ponteiro para um objeto de qualquer classe.
    Para a conversão inversa, recomenda-se usar o operador dynamic_cast<nome da classe *>(ponteiro void *). Se a conversão não for possível, o resultado será NULL.
    class CFoo { };
    class CBar { };
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       void *vptr[2];
       vptr[0]=new CFoo();
       vptr[1]=new CBar();
    //---
       for(int i=0;i<ArraySize(vptr);i++)
         {
          if(dynamic_cast<CFoo *>(vptr[i])!=NULL)
             Print("CFoo * object at index ",i);
          if(dynamic_cast<CBar *>(vptr[i])!=NULL)
             Print("CBar * object at index ",i);
         }
       CFoo *fptr=vptr[1];  // emitirá o erro de apresentação de ponteiros, vptr[1] não é um objeto CFoo
      }
    //+------------------------------------------------------------------+
  2. Foi adicionado o suporte do operador [] para a cadeia de caracteres, isso irá permitir obter um símbolo a partir da cadeia de caracteres no índice. Se o índice especificado sair dos limites da cadeia de carateres, o resultado será 0.
    string text="Hello";
    ushort symb=text[0];  // retorna o código do símbolo 'H'
    
  3. Foi adicionada a segunda opção do processador de eventos TesterInit com rótulo int OnTesterInit(void), ele pode retornar o código INIT_SUCCEEDED (0) ou INIT_FAILED (o qualquer valor diferente de zero). Se OnTesterInit retornar um valor diferente de zero, não começará a otimização.
  4. Foi corrigido o erro pelo cual diferentes sobrecargas da função ChartGetString dava um resultado diferente.

Tester

  1. Foram adicionados comandos e atalhos adicionais para o teste visual. Agora, os gráficos, tanto no testador visual como no terminal, podem ser configurados: alterar cores, controlar a exibição de vários elementos, aplicar modelos, etc.




  2.  Foi corrigido o trabalho da função Sleep em modo de teste "segundo os preços de abertura" ("Price Open").
  3.  Foi corrigido o erro que causava a formação de um estado incorreto das barras, ao trabalhar em períodos W1 e MN1.

MetaEditor

  1. MetaEditor: Foi adicionada a tradução da interface do usuário para chines tradicional.

Documentação atualizada.

8 agosto 2016
MetaTrader 5 iOS build 1371
  • Um novo design de mensagens. Agora, as mensagens MQL5.community e notificações push da plataforma de desktop são exibidos como chat, semelhantes aos populares messengers de celular.
  • Agora é possível mudar para uma das 23 línguas disponíveis direto da plataforma. Por exemplo, se você preferir usar a interface em Inglês, você pode escolhê-lo na página "Sobre", sem alterar a configuração de idioma do seu dispositivo.
5 agosto 2016
MetaTrader 5 Android build 1338
  •  Foi adicionado o bate-papo MQL5.community.
  •  Foi adicionada a opção de transferir certificados SSL a partir da plataforma desktop.
  •  Foram adicionadas novas traduções de interface em persa e holandês.
15 julho 2016
MetaTrader 5 build 1375: canal de negociações e acesso a ticks durante os testes

Terminal

  1. Foi adicionado um canal de negociações no livro de ofertas.




    O que é um canal de negociações
    No canal de negociações, é exibida em tempo real uma lista de todas as operações realizadas na bolsa de valores. Para cada transação são mostrados o momento da sua execução, a direção (comprar ou vender), o preço e o volume. Para facilitar a análise visual, cada direção de transação é exibida com uma cor diferente: azul - comprar, rosa - venda, verde - direção não definida. O volume das transações é, adicionalmente, apresentado como um histograma.

    Como o canal de negociações ajuda a entender o mercado
    O canal de negociações vai permitir analisar os mercados mais detalhadamente. No canal, a direção da operação indica ao trader quem foi o iniciador da sua execução: o comprador ou vendedor. O volume de negociações executadas irá permitir compreender o comportamento dos participantes no mercado, isto é, a sua atividade e competitividade. Enquanto, a velocidade de negociação e o seu volume em determinados níveis de preços permitirá tirar conclusões sobre a importância destes níveis.

    Como usar os dados
    Além da análise visual da tabela, você também pode fazer o upload dos dados das transações para um arquivo CSV. Eles podem ser estudados imediatamente em qualquer outro aplicativo, por exemplo, no MS Excel. No arquivo, todos os dados são separados por um ponto e vírgula:
    Time,Bid,Ask,Last,Volume,Type
    2016.07.06 16:05:04.305,89360,89370,89370,4,Buy
    2016.07.06 16:05:04.422,89360,89370,89370,2,Buy
    2016.07.06 16:05:04.422,89360,89370,89370,10,Buy
    2016.07.06 16:05:04.669,89360,89370,89370,1,Buy
    2016.07.06 16:05:05.968,89360,89370,89360,7,Sell
    Para salvar dados num arquivo, abra o menu de atalho:



    Para determinar com precisão a direção das operações, a plataforma de negociação da corretora deve ser atualizada para a versão 1375.
  2. Foi significativamente reduzido o tempo entre a chegada de um novo tick/alteração do livro de ofertas e a chamada do ponto de entrada OnTick e OnCalculate. Também foi reduzido entre a chegada do evento de alteração do estado de negociação e a chamada do ponte de entrada OnTrade e OnTradeTransaction. Assim, os programas MQL5 agora reagirão mais rapidamente aos eventos do mercado.
  3. As solicitações de negociação agora são enviadas mais rápido, ao usar a autenticação estendida com certificados SSL.
  4. Foi atualizada a tradução da interface do usuário em persa.
  5. Foi corrigida a exibição do comando de configuração SL/TP no menu de contexto do gráfico ao trabalhar no modo de cobertura.

Tester

  1. Foi adicionada a solicitação do histórico de ticks, durante o teste, usando a função CopyTicks. Anteriormente, essa função não estava funcionando no testador de estratégias.

    • No modo "Cada tick", a função retorna o histórico de ticks gerados. Você pode solicitar não mais de 128 000 dos últimos ticks.
    • No modo "Cada tick na base de ticks reais", a função devolve o histórico de ticks reais. A profundidade dos dados solicitados está restrita apenas pela disponibilidade desses dados. No entanto, tenha em mente que os últimos 128 000 ticks são armazenados na cache do testador de estratégias, adicionalmente, a solicitação destes dados será realizada com suficiente rapidez. Além disso, é possível solicitar um histórico mais profundo a partir do disco rígido, porém, a execução desse pedido levará muito mais tempo.
    • Nos modos "Apenas preços de abertura" e "OHLC em M1", a função ainda não vai funcionar, pois o histórico de ticks não se cria na realidade.

  2. Foi adicionado o suporte para tempo com exatidão de um milissegundo. Anteriormente, no testador de estratégias, um quantum era igual a um segundo.

    • Agora as funções EventSetMillisecondTimer e Sleep trabalham com mais precisão no testador de estratégias.
    • Além disso, melhorou a precisão de emissão de ticks durante o teste dos conselheiros multi-moedas. Anteriormente, ao pôr vários ticks num segundo (volume de ticks da barra minutos maior que 60), todos eles ficavam com o mesmo tempo. Ao testar os conselheiros mono-moeda, isto realmente não importa, porque os ticks são apenas transmitidos seqüencialmente para o conselheiro. No entanto, quando testamos em vários pares, é importante saber a partir de qual par o tick veio primeiro. Em versões anteriores, os ticks de cada símbolo eram passados para o conselheiro seqüencialmente: primeiro, todos os ticks por segundo para um símbolo e, em seguida, todos os ticks, de forma diferente. Agora, eles são enviados em milissegundos.

      Ao usar ticks reais para o teste, os milissegundos são tomados a partir dos dados fonte do tick. Quando os ticks são gerados, os milissegundos são definidos em conformidade com o volume de tics. Por exemplo, se 3 ticks cabem num segundo, o seu tempo em milissegundos será igual a 000, 333 e 666

  3. Nos modos "Abrir apenas preços" e "OHCL em 1M", a execução de ordens pendentes e de ordens SL/TP agora é realizada segundo os preços indicados nas ordens, e não pelo preço atual no momento da execução. O algoritmo de execução, segundo os preços de mercado, usado nos modos de precisão (cada tick e ticks reais), não é adequado para modos menos precisos. Em alguns modos, os ticks intermediários não são gerados, portanto, a diferença entre a ordem solicitada e o preço atual de mercado (Aberto ou OHLC) pode ser significativa. A execução de ordens, ao preço solicitado no modo, "Abrir apenas preços" e "OHLC em M1", fornece resultados de testes mais precisos.

  4. Foi adicionado o suporte para o teste em tempo real (avançado) no modo visual. Agora, para o bektest e o teste avançado, serão abertas duas janelas separadas para visualização do teste, o que permitirá que você compare comodamente os resultados do trabalho dos conselheiros em períodos diferentes.




    A janela de teste avançado só é aberta após a conclusão dos testes no período principal.

  5. Tester: No gráfico de teste, agora em vez do nível de margem, é exibida a carga do depósito, ela é calculada como a razão margem/capital (margin/equity).


  6. Foi corrigido o cálculo da comissão em porcentagens anuais.Ъ

  7. Foi corrigido o recálculo e a exibição do saldo no gráfico formado durante o teste.

MQL5

  1. Foi alterado o comportamento da função OrderSend, durante a colocação da ordem, modificação e cancelamento das ordens. As alterações apenas afetam as ordens enviadas para sistemas de negociação externos. Anteriormente, o controle da função OrderSend era devolvido após a colocação (processamento) bem sucedida da ordem no servidor da corretora. Agora o controle é retornado apenas depois que o servidor da corretora recebe uma notificação de um sistema de negociação externo dizendo que a ordem foi colocada com sucesso nesse sistema.

    Abaixo encontra-se uma representação esquemática do (seta vermelha) comportamento anterior e atual da função:




  2. Foi adicionado o campo retcode_external -código de erro no sistema de negociação exterior- para a estrutura do resultado de negociação MqlTradeResult. O uso e os tipos desses erros dependem da corretora e do sistema de negociação externo para o qual as operações são enviadas. Por exemplo, os valores de retcode_external preenchidos pela bosa de Moscou diferem dos retornado pela DGCX.

  3. Foram adicionadas as propriedades CHART_EXPERT_NAME e CHART_SCRIPT_NAME para a enumeração ENUM_CHART_PROPERTY_STRING. Agora, usando a função ChartGetString, é possível calcular os nomes do conselheiro e/ou script, anexados ao gráfico, definidos pelo parâmetro chart_id.

Signals

  1. Foi corrigido o erro, devido ao qual podia falhar a cópia da posição oposta (close by).
  2. Foi melhorada a comparação automática dos pares de moedas contendo RUB e RUR.

Mercado

  1. : Foi corrigida a classificação por categoria do produto.

MetaEditor

  1. Foi corrigida a configuração do foco, no campo do texto de substituição, ao abrir a caixa de diálogo de substituição.
  2. Foi corrigida substituição de texto em massa, ao pesquisar para cima, a partir da posição atual.


Documentação atualizada.


12345678910111213