Versão beta do MetaTrader 5 build 2005: calendário econômico, programas MQL5 como serviços e APIs para linguagem R

 

Na sexta-feira, 21 de fevereiro de 2019, será lançada uma versão atualizada da plataforma MetaTrader 5. Ela contém as seguintes alterações:

  1. Terminal: calendário econômico embutido totalmente atualizado.

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

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

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




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

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

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





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

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

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




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

  3. Terminal: adicionado sistema de educação.

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

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

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




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




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

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




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

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

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

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

  6. Terminal: otimizado o diálogo fechar posição de negociação usando outra oposta. Agora seu trabalho não diminui com um grande número de posições abertas.
  7. Terminal: corrigidos erros de cálculo de instrumentos sintéticos, o que levava à formação de omissão de dados.
  8. Terminal: agora, ao excluir instrumentos personalizados, são excluídos os arquivos com seu histórico de ticks e de barras. Isso evita o acúmulo de dados não utilizados no disco rígido.
  9. Terminal: corrigida a exibição de resultados de pesquisa em monitores de alta DPI.
  10. MQL5: adicionado acesso a dados do calendário econômico através de programas MQL5.

    Novos recursos

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

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

    Novas estruturas

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

    Novas enumerações

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

    Novos códigos de erro

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

  11. MQL5: corrigido e significativamente acelerado o trabalho com histórico de ticks e de barras.
  12. MQL5: corrigidas e significativamente aceleradas funções para alterar o histórico de ticks e de barras nos instrumentos de negociação personalizados CustomTicks* e CustomRates*.
  13. MQL5: adicionadas novas funções de conversão de dados.

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

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

  15. MQL5: adicionadas funções de rede para criar conexões TCP para hosts remotos por meio de soquetes de sistema:

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

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

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

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

  16. MQL5: adicionadas novas funções para trabalhar com strings:

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

  17. MQL5: adicionadas novas funções para trabalhar com arrays:

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

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

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

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

  22. MQL5: à enumeração ENUM_TERMINAL_INFO_INTEGER adicionada a propriedade TERMINAL_VPS — sinal de que o terminal está sendo executado em um servidor virtual Hospedagem Virtual MetaTrader (VPS MetaTrader). Se o programa estiver sendo executado em um serviço de hospedagem, você poderá desabilitar todas as suas funções visuais, já que o servidor virtual não possui uma interface gráfica de usuário.
  23. MQL5: à enumeração ENUM_SYMBOL_INFO_INTEGER adicionada a nova propriedade SYMBOL_EXIST — sinal de que existe um símbolo com o mesmo nome.
  24. MQL5: corrigida tipificação ao usar declaração preliminar de uma função de template.
  25. MQL5: adicionada a reinicialização de indicadores ao alterar uma conta de negociação.
  26. MQL5: otimizado o trabalho da função StringSplit.
  27. MQL5: corrigidos erros na biblioteca padrão.
  28. Tester: adicionada a função TesterStop — término antecipado do trabalho um EA em um agente de teste. Agora você pode forçar a interrupção do teste quando for atingido um determinado número de negociações perdedoras, um determinado nível de rebaixamento ou qualquer outro critério.

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

  29. Tester: desativado o recurso para testar e otimizar EAs via MQL5 Cloud Network no modo de uso de ticks reais. Este modo pode ser usado somente em agentes locais e farms na rede local.
  30. Tester: aprimorado o trabalho com indicadores para testes visuais. Agora, o gráfico de preços e as linhas de indicadores são desenhados em sincronia, mesmo na velocidade máxima de renderização.
  31. Tester: otimizados e significativamente acelerados teste e otimização.
  32. Tester: corrigida a depuração de indicadores em dados históricos. Agora a função OnInit e OnDeinit dos indicadores podem ser depuradas corretamente.
  33. Tester: acelerado o acesso a dados históricos ao testar EAs em várias moedas.
  34. Tester: corrigidos erros que faziam o testador visual congelar ao depurar dados históricos.
  35. Tester: acelerado início de passagens quando o agente processa o pacote de tarefas.
  36. Tester: alterada a política de distribuição de pacotes de tarefas para agentes de teste. O tamanho do pacote foi aumentado, o que levava a uma redução significativa nos custos indiretos das operações de rede.
  37. Tester: alterado o comportamento da opção de usar agentes locais, de rede e de nuvem. Agora, quando essas opções estão desativadas, as tarefas já emitidas são processadas no final e as novas não são mais emitidas. Anteriormente, essas opções funcionavam de forma semelhante ao comando "Desativar", impedindo o trabalho dos agentes imediatamente.




  38. MetaEditor: adicionado suporte para símbolos não-ANSI no depurador. Agora as expressões observadas são exibidas corretamente, mesmo se o nome da variável for especificado em cirílico.
  39. MetaEditor: corrigida a exibição de resultados de pesquisa em monitores de alta DPI.ç
  40. Adicionada tradução da interface do usuário para o idioma croata.
  41. Documentação atualizada.

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

 
MetaQuotes Software Corp.:

Na sexta-feira, 21 de fevereiro de 2019, será lançada uma versão atualizada da plataforma MetaTrader 5. Ela contém as seguintes alterações:

  1. Terminal: calendário econômico embutido totalmente atualizado.

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

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

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




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

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

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





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

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

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




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

  3. Terminal: adicionado sistema de educação.

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

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

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




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




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

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




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

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

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

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

  6. Terminal: otimizado o diálogo fechar posição de negociação usando outra oposta. Agora seu trabalho não diminui com um grande número de posições abertas.
  7. Terminal: corrigidos erros de cálculo de instrumentos sintéticos, o que levava à formação de omissão de dados.
  8. Terminal: agora, ao excluir instrumentos personalizados, são excluídos os arquivos com seu histórico de ticks e de barras. Isso evita o acúmulo de dados não utilizados no disco rígido.
  9. Terminal: corrigida a exibição de resultados de pesquisa em monitores de alta DPI.
  10. MQL5: adicionado acesso a dados do calendário econômico através de programas MQL5.

    Novos recursos

    CalendarCountryById — obtém a descrição do país por identificador.
    CalendarEventById — obtém a descrição do evento por identificador.
    CalendarValueById — obtém a descrição do valor do evento por identificador.
    CalendarEventByCountry — obtém um array de notícias disponíveis por país.
    CalendarEventByCurrency — obtém um array contendo as notícias disponíveis da moeda, que elas afetam.
    CalendarValueHistoryByEvent — obtém um array de valores para o período especificado de acordo com o identificador do evento.
    CalendarValueHistory — obtém um array de valores de todos os pelo período definido com filtragem por país e/ou moeda.
    CalendarValueLastByEvent — obtém o array dos últimos valores de evento por identificador. Esse recurso permite consultar apenas os valores que foram alterados desde a última consulta. Para fazer isso, é usado seu in/out parâmetro "change_id".

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

    Novas estruturas

    MqlCalendarCountry — descrição do país.
    MqlCalendarEvent — descrição do evento.
    MqlCalendarValue — descrição do valor do evento.

    Novas enumerações


    Novos códigos de erro


  11. MQL5: corrigido e significativamente acelerado o trabalho com histórico de ticks e de barras.
  12. MQL5: corrigidas e significativamente aceleradas funções para alterar o histórico de ticks e de barras nos instrumentos de negociação personalizados CustomTicks* e CustomRates*.
  13. MQL5: adicionadas novas funções de conversão de dados.

    CharArrayToStruct — copia um array de tipo uchar para uma estrutura POD.
    StructToCharArray — copia uma estrutura POD para um array de tipo uchar.

  14. Adicionada a função MathSwap para alterar a ordem dos bytes no valor ushort, uint e ulong.

  15. MQL5: adicionadas funções de rede para criar conexões TCP para hosts remotos por meio de soquetes de sistema:

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

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

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

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

  16. MQL5: adicionadas novas funções para trabalhar com strings:

    StringReserve — reserva na memória para o string o buffer do tamanho especificado.
    StringSetLength — define para a string o comprimento especificado nos símbolos.

  17. MQL5: adicionadas novas funções para trabalhar com arrays:

    ArrayRemove — remove o número especificado de elementos da matriz, iniciando no índice especificado.
    ArrayInsert — insere o número especificado de elementos do array de origem no array de destino, iniciando no índice especificado.
    ArrayReverse — inverte o número especificado de elementos no array, iniciando no índice especificado.

  18. MQL5: às funções CustomRatesUpdate, CustomRatesReplace, CustomTicksAdd e CustomTicksReplace adicionado o parâmetro "uint count" para especificar o número de elementos do array transmitido a ser usado. Por padrão, para o parâmetro, é usado o valor WHOLE_ARRAY. Isso significa que será usado todo o array.
  19. MQL5: adicionada a função CustomBookAdd — transmite o estado do livro de ofertas para o instrumento personalizado. A função permite transmitir um livro de ofertas como se viesse do servidor de uma corretora.
  20. MQL5: adicionada a sobrecarga da função CustomSymbolCreate, permitindo que você crie um instrumento de negociação personalizado com base em um existente. Após a criação, qualquer propriedade de símbolo pode ser alterada para o valor desejado pelas funções correspondentes.
    O nome do símbolo - do qual serão copiadas as propriedades do símbolo personalizado criado - é especificado no parâmetro "symbol_origin".

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

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

  22. MQL5: à enumeração ENUM_TERMINAL_INFO_INTEGER adicionada a propriedade TERMINAL_VPS — sinal de que o terminal está sendo executado em um servidor virtual Hospedagem Virtual MetaTrader (VPS MetaTrader). Se o programa estiver sendo executado em um serviço de hospedagem, você poderá desabilitar todas as suas funções visuais, já que o servidor virtual não possui uma interface gráfica de usuário.
  23. MQL5: à enumeração ENUM_SYMBOL_INFO_INTEGER adicionada a nova propriedade SYMBOL_EXIST — sinal de que existe um símbolo com o mesmo nome.
  24. MQL5: corrigida tipificação ao usar declaração preliminar de uma função de template.
  25. MQL5: adicionada a reinicialização de indicadores ao alterar uma conta de negociação.
  26. MQL5: otimizado o trabalho da função StringSplit.
  27. MQL5: corrigidos erros na biblioteca padrão.
  28. Tester: adicionada a função TesterStop — término antecipado do trabalho um EA em um agente de teste. Agora você pode forçar a interrupção do teste quando for atingido um determinado número de negociações perdedoras, um determinado nível de rebaixamento ou qualquer outro critério.

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

  29. Tester: desativado o recurso para testar e otimizar EAs via MQL5 Cloud Network no modo de uso de ticks reais. Este modo pode ser usado somente em agentes locais e farms na rede local.
  30. Tester: aprimorado o trabalho com indicadores para testes visuais. Agora, o gráfico de preços e as linhas de indicadores são desenhados em sincronia, mesmo na velocidade máxima de renderização.
  31. Tester: otimizados e significativamente acelerados teste e otimização.
  32. Tester: corrigida a depuração de indicadores em dados históricos. Agora a função OnInit e OnDeinit dos indicadores podem ser depuradas corretamente.
  33. Tester: acelerado o acesso a dados históricos ao testar EAs em várias moedas.
  34. Tester: corrigidos erros que faziam o testador visual congelar ao depurar dados históricos.
  35. Tester: acelerado início de passagens quando o agente processa o pacote de tarefas.
  36. Tester: alterada a política de distribuição de pacotes de tarefas para agentes de teste. O tamanho do pacote foi aumentado, o que levava a uma redução significativa nos custos indiretos das operações de rede.
  37. Tester: alterado o comportamento da opção de usar agentes locais, de rede e de nuvem. Agora, quando essas opções estão desativadas, as tarefas já emitidas são processadas no final e as novas não são mais emitidas. Anteriormente, essas opções funcionavam de forma semelhante ao comando "Desativar", impedindo o trabalho dos agentes imediatamente.




  38. MetaEditor: adicionado suporte para símbolos não-ANSI no depurador. Agora as expressões observadas são exibidas corretamente, mesmo se o nome da variável for especificado em cirílico.
  39. MetaEditor: corrigida a exibição de resultados de pesquisa em monitores de alta DPI.ç
  40. Adicionada tradução da interface do usuário para o idioma croata.
  41. Documentação atualizada.

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

Razão: