---
title: "MetaTrader 5 build 2005: calendário econômico, programas MQL5 como serviços e APIs para linguagem R - Última atualização"
description: "Calendário econômico embutido totalmente atualizado. O Calendário econômico foi desenvolvido propriamente por nós. - Última atualização"
image: "https://www.metatrader5.com/c/17/0/terminal-4__3.png"
url: "https://www.metatrader5.com/pt/releasenotes/terminal/1920"
---

# MetaTrader 5 build 2005: calendário econômico, programas MQL5 como serviços e APIs para linguagem R

## Calendário econômico embutido totalmente atualizado. O Calendário econômico foi desenvolvido propriamente por nós

21 fevereiro 2019

### Terminal

1. Calendário econômico embutido totalmente atualizado. O [Calendário econômico](https://www.mql5.com/pt/economic-calendar) 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.

   ![](https://www.metatrader5.com/c/17/0/terminal-1__3.png)
2. Adicionado um novo tipo de programa MQL5, Serviços. Eles permitem que você crie suas próprias fontes de preços para o terminal, transferindo preços vindos de sistemas externos em tempo real, como fazem os servidores de negociação das corretoras. Ao contrário de EAs, de indicadores e de scripts, os serviços não estão vinculados a um gráfico específico. Eles correm em segundo plano e começam a trabalhar automaticamente quando é iniciado o terminal (se eles não foram forçados a parar). Para gerenciar serviços, ao Navegador foi adicionada uma subseção:

   ![](https://www.metatrader5.com/c/17/0/terminal-3__3.png)

   **Criação de serviços** Para criar um modelo de serviço, use o item correspondente em [Assistente MQL5](https://www.metatrader5.com/pt/metaeditor/help/mql5_wizard). Serviços têm um ponto de entrada [OnStart](https://www.mql5.com/pt/docs/event_handlers/onstart) semelhante a scripts. Nele, você pode organizar um loop interminável de recebimento e processamento de dados usando [funções de rede](https://www.mql5.com/pt/docs/network). **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.

   ![](https://www.metatrader5.com/c/17/0/terminal-3-1__3.png)

    Para iniciar e parar a instância do serviço, use seu menu. Para gerenciar todas as instâncias, use o menu do próprio serviço.
3. Adicionado sistema de educação. Agora os iniciantes podem aprender facilmente como trabalhar com a plataforma. Nós adicionamos mais de 100 dicas interativas nas principais funções.

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

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

   ![](https://www.metatrader5.com/c/17/0/terminal-2__3.png)
4. O [histórico da conta de negociação](https://www.metatrader5.com/pt/terminal/help/trading/performing_deals#trade_history) 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.

   ![](https://www.metatrader5.com/c/17/0/terminal-4__3.png)
5. Adicionada uma API para solicitar dados do terminal MetaTrader 5 através de aplicativos usando [linguagem R](https://www.r-project.org/). 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](https://cran.r-project.org/mirrors.html) e, em breve, estará disponível para download e instalação.

   ![](https://www.metatrader5.com/c/17/0/terminal-5__3.png)

    Para instalar um pacote, use o seguinte comando:

   R CMD INSTALL --build MetaTrader

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

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

    No futuro, a lista de comandos suportados será expandida.
6. Otimizado o diálogo [fechar posição de negociação usando outra oposta](https://www.metatrader5.com/pt/terminal/help/trading/performing_deals#closeby). Agora seu trabalho não diminui com um grande número de posições abertas.
7. Corrigidos erros de cálculo de [instrumentos sintéticos](https://www.metatrader5.com/pt/terminal/help/trading_advanced/custom_instruments#synthetic), o que levava à formação de omissão de dados.
8. Agora, ao excluir [instrumentos personalizados](https://www.metatrader5.com/pt/terminal/help/trading_advanced/custom_instruments), são excluídos os arquivos com seu histórico de ticks e de barras. Isso evita o acúmulo de dados não utilizados no disco rígido.
9. Corrigida a exibição de resultados de pesquisa em monitores de alta DPI.

### MQL5

1. Adicionado acesso a dados do [calendário econômico](https://www.mql5.com/pt/economic-calendar) através de programas MQL5.**Novos recursos**CalendarCountryById — obtém a descrição do país por identificador.

   ```
   bool CalendarCountryById(    const long           country_id,  // identificador do país    MqlCalendarCountry&  country       // descrição do país    );
   ```

    CalendarEventById — obtém a descrição do evento por identificador.

   ```
   bool CalendarEventById(    const long           event_id,     // identificador do evento    MqlCalendarEvent&    event         // descrição do evento    );
   ```

    CalendarValueById — obtém a descrição do valor do evento por identificador.

   ```
   bool CalendarValueById(    const long           value_id,     // identificador do valor    MqlCalendarValue&    value         // descrição do valor    );
   ```

    CalendarEventByCountry — obtém um array de notícias disponíveis por país.

   ```
   bool CalendarEventByCountry(    string               country_code, // código do país    MqlCalendarEvent&    events[]      // matriz do evento    );
   ```

    CalendarEventByCurrency — obtém um array contendo as notícias disponíveis da moeda, que elas afetam.

   ```
   bool CalendarEventByCurrency(    string               currency,     // moeda    MqlCalendarEvent&    events[]      // matriz de eventos    );
   ```

    CalendarValueHistoryByEvent — obtém um array de valores para o período especificado de acordo com o identificador do evento.

   ```
   bool CalendarValueHistoryByEvent(    ulong                event_id,     // identificador do evento    MqlCalendarValue&    values[],      // matriz de valores    datetime             datetime_from, // data inicial    datetime             datetime_to=0  // data final    );
   ```

    CalendarValueHistory — obtém um array de valores de todos os pelo período definido com filtragem por país e/ou moeda.

   ```
   bool CalendarValueHistory(    MqlCalendarValue&    values[],          // matriz de valores    datetime             datetime_from,     // início do período    datetime             datetime_to=0,     // fim do período    string               country_code=NULL, // código do país    string currency=NULL      // moeda    );
   ```

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

   ```
   bool CalendarValueHistory(    ulong                event_id,          // identificador do evento    ulong&               change_id,         // identificador do último valor do calendário    MqlCalendarValue&    values[]           // matriz de valores    );
   ```

    CalendarValueLast — obtém o array dos últimos valores de todos os eventos com filtragem por país e/ou moeda. Esse recurso permite consultar apenas os valores que foram alterados desde a última consulta. Semelhante a CalendarValueLastByEvent, a propriedade "change_id" é usada para a consulta.

   ```
   bool CalendarValueHistory(    ulong                event_id,          // identificador do evento    ulong&               change_id,         // ID da última alteração do calendário    MqlCalendarValue&    values[],          // matriz de valores    string               country_code=NULL, // código do país    string currency=NULL                    // moeda    );
   ```

   **Novas estruturas** MqlCalendarCountry — descrição do país.

   ```
   struct MqlCalendarCountry   {    ulong             id;                        // identificador do país ISO 3166-1    string            name;                      // nome do país    string            code;                      // código do país ISO 3166-1 alpha-2    string            currency;                  // código da moeda do país    string            currency_symbol;           // símbolo da moeda do país    string            url_name;                  // nome do país usado no URL no site mql5.com   };
   ```

    MqlCalendarEvent — descrição do evento.

   ```
   struct MqlCalendarEvent   {    ulong                          id;           // identificador do evento    ENUM_CALENDAR_EVENT_TYPE       type;         // tipo de evento    ENUM_CALENDAR_EVENT_SECTOR     sector;       // setor ao qual está relacionado o evento    ENUM_CALENDAR_EVENT_FREQUENCY  frequency;    // frequência de publicação de eventos    ENUM_CALENDAR_EVENT_TIMEMODE   time_mode;    // modo de publicação de eventos por horário    ulong                          country_id;   // identificador do país    ENUM_CALENDAR_EVENT_UNIT       unit;         // medida do valor do evento    ENUM_CALENDAR_EVENT_IMPORTANCE importance;   // importância do evento    ENUM_CALENDAR_EVENT_MULTIPLIER multiplier;   // multiplicador do valor do evento    uint                           digits;       // número de casas decimais no valor do evento    string                         source_url;   // URL da fonte    string                         event_code;   // código do evento    string                         name;         // nome do evento na linguagem do terminal   };
   ```

    MqlCalendarValue — descrição do valor do evento.

   ```
   struct MqlCalendarValue   {    ulong             id;                        // identificador do valor    ulong             event_id;                  // identificador do evento    datetime          time;                      // hora e data do evento    datetime          period;                    // período de relatório do evento    int               revision;                  // revisão do indicador publicado em relação ao período de relatório    long              actual_value;              // valor atual do evento    long              prev_value;                // valor anterior do evento    long              revised_prev_value;        // valor anterior revisado para o evento    long              forecast_value;            // valor previsto do evento    ENUM_CALENDAR_EVENT_IMPACRT impact_type;     // impacto potencial na taxa de câmbio    };
   ```

   **Novas enumerações**

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

   **Novos códigos de erro**

   ```
   ERR_CALENDAR_MORE_DATA             =5400,   // matriz é pequena para o resultado inteiro (dados os valores que se ajustam na matriz) ERR_CALENDAR_TIMEOUT               =5401,   // expirado tempo de resposta da consulta de dados a partir do calendário ERR_CALENDAR_NO_DATA               =5402,   // dados não encontrados
   ```
2. Corrigido e significativamente acelerado o trabalho com histórico de ticks e de barras.
3. Corrigidas e significativamente aceleradas funções para alterar o histórico de ticks e de barras nos instrumentos de negociação personalizados [CustomTicks*](https://www.mql5.com/pt/docs/customsymbols/customticksadd) e [CustomRates*](https://www.mql5.com/pt/docs/customsymbols/customratesupdate).
4. Adicionadas novas funções de conversão de dados.[CharArrayToStruct](https://www.mql5.com/pt/docs/convert/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](https://www.mql5.com/pt/docs/convert/structtochararray) — copia uma estrutura POD para um array de tipo uchar.

   ```
   bool  StructToCharArray(    const void&  struct_object,     // estrutura    uchar&       char_array[],      // matriz    uint         start_pos=0        // posição inicial na matriz    );
   ```
5. Adicionada a função [MathSwap](https://www.mql5.com/pt/docs/math/mathswap) para alterar a ordem dos bytes no valor ushort, uint e ulong.

   ```
   ushort MathSwap(ushort value); uint   MathSwap(uint   value); ulong  MathSwap(ulong  value);
   ```
6. Adicionadas [funções de rede](https://www.mql5.com/pt/docs/network) 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](https://www.metatrader5.com/pt/terminal/help/startworking/settings#ea) nas configurações do terminal.

    Para trabalhar com funções de rede, adicionados novos [códigos de erro](https://www.mql5.com/pt/docs/constants/errorswarnings/errorcodes):

     - ERR_NETSOCKET_INVALIDHANDLE (5270) — identificador de soquete inválido passado para a função
     - ERR_NETSOCKET_TOO_MANY_OPENED (5271) — muitos soquetes abertos (máximo de 128)
     - ERR_NETSOCKET_CANNOT_CONNECT (5272) — erro de conexão com host remoto
     - ERR_NETSOCKET_IO_ERROR (5273) — erro ao enviar/receber dados para/de um soquete
     - ERR_NETSOCKET_HANDSHAKE_FAILED (5274) — erro de estabelecimento de conexão segura (handshake TLS)
     - ERR_NETSOCKET_NO_CERTIFICATE (5275) — não há informações sobre o certificado que protege a conexão
7. Adicionadas novas [funções para trabalhar com strings](https://www.mql5.com/pt/docs/strings): StringReserve — reserva na memória para o string o buffer do tamanho especificado.

   ```
   bool  StringReserve(    string&     string_var,        // string    uint      new_capacity       // tamanho do buffer para armazenar a string    );
   ```

    StringSetLength — define para a string o comprimento especificado nos símbolos.

   ```
   bool  StringSetLength(    string&     string_var,      // strings    uint        new_length       // novo comprimento da string    );
   ```
8. Adicionadas novas [funções para trabalhar com arrays](https://www.mql5.com/pt/docs/array): ArrayRemove — remove o número especificado de elementos da matriz, iniciando no índice especificado.

   ```
   bool  ArrayRemove(    void&         array[],             // matriz de qualquer tipo    uint          start,              // índice para começar a excluir    uint          count=WHOLE_ARRAY    // número de elementos    );
   ```

    ArrayInsert — insere o número especificado de elementos do array de origem no array de destino, iniciando no índice especificado.

   ```
   bool  ArrayInsert(    void&         dst_array[],          // array de destino    const void&  src_array[],          // array de origem    uint          dst_start,            // índice no array de destino para inserir    uint          src_start=0,          // índice no array de origem para copiar    uint          count=WHOLE_ARRAY     // número de elementos a serem inseridos    );
   ```

    ArrayReverse — inverte o número especificado de elementos no array, iniciando no índice especificado.

   ```
   bool  ArrayReverse(    void&        array[],             // array de qualquer tipo    uint          start=0,             // índice para começar a inverter o array    uint          count=WHOLE_ARRAY    // número de elementos    );
   ```
9. Às funções [CustomRatesUpdate](https://www.mql5.com/pt/docs/customsymbols/customratesupdate), [CustomRatesReplace](https://www.mql5.com/pt/docs/customsymbols/customratesreplace), [CustomTicksAdd](https://www.mql5.com/pt/docs/customsymbols/customticksadd) e [CustomTicksReplace](https://www.mql5.com/pt/docs/customsymbols/customticksreplace) adicionado o parâmetro "uint count" para especificar o número de elementos do array transmitido a ser usado. Por padrão, para o parâmetro, é usado o valor WHOLE_ARRAY. Isso significa que será usado todo o array.
10. Adicionada a função [CustomBookAdd](https://www.mql5.com/pt/docs/customsymbols/custombookadd) — transmite o estado do livro de ofertas para o instrumento personalizado. A função permite transmitir um livro de ofertas como se viesse do servidor de uma corretora.

    ```
    int  CustomBookAdd(    const string        symbol,            // nome do símbolo    const MqlBookInfo&  books[]            // array com descrições de elementos do livro de ofertas    uint                count=WHOLE_ARRAY  // número de elementos a serem usados    );
    ```
11. Adicionada a sobrecarga da função [CustomSymbolCreate](https://www.mql5.com/pt/docs/customsymbols/customsymbolcreate), permitindo que você crie um instrumento de negociação personalizado com base em um existente. Após a criação, qualquer propriedade de símbolo pode ser alterada para o valor desejado pelas funções correspondentes.

    ```
    bool  CustomSymbolCreate(    const string     symbol_name,       // nome do símbolo personalizado    const string      symbol_path="",    // nome do grupo em que é criado o símbolo    const string      symbol_origin=NULL // nome do símbolo em cuja base é criado o símbolo personalizado    );
    ```

     O nome do símbolo - do qual serão copiadas as propriedades do símbolo personalizado criado - é especificado no parâmetro "symbol_origin".
12. Atualizada a função [StringToTime](https://www.mql5.com/pt/docs/convert/stringtotime) que converte uma string de data/hora em um valor de data e hora. Agora suporta os seguintes formatos de data:

      - yyyy.mm.dd [hh:mi]
      - yyyy.mm.dd [hh:mi:ss]
      - yyyymmdd [hh:mi:ss]
      - yyyymmdd [hhmiss]
      - yyyy/mm/dd [hh:mi:ss]
      - yyyy-mm-dd [hh:mi:ss]
13. À enumeração [ENUM_TERMINAL_INFO_INTEGER](https://www.mql5.com/pt/docs/constants/environment_state/terminalstatus) adicionada a propriedade TERMINAL_VPS — sinal de que o terminal está sendo executado em um servidor virtual [Hospedagem Virtual MetaTrader](https://www.mql5.com/pt/vps) (VPS MetaTrader). Se o programa estiver sendo executado em um serviço de hospedagem, você poderá desabilitar todas as suas funções visuais, já que o servidor virtual não possui uma interface gráfica de usuário.
14. À enumeração [ENUM_SYMBOL_INFO_INTEGER](https://www.mql5.com/pt/docs/constants/environment_state/marketinfoconstants) adicionada a nova propriedade SYMBOL_EXIST — sinal de que existe um símbolo com o mesmo nome.
15. Corrigida tipificação ao usar declaração preliminar de uma função de template.
16. Adicionada a reinicialização de indicadores ao alterar uma conta de negociação.
17. Otimizado o trabalho da função [StringSplit](https://www.mql5.com/pt/docs/strings/stringsplit).
18. Corrigidos erros na biblioteca padrão.

### Tester

1. Adicionada a função [TesterStop](https://www.mql5.com/pt/docs/common/testerstop) — término antecipado do trabalho um EA em um agente de teste. Agora você pode forçar a interrupção do teste quando for atingido um determinado número de negociações perdedoras, um determinado nível de rebaixamento ou qualquer outro critério.  O teste concluído com essa função é considerado bem-sucedido. Depois de ser chamado, o terminal recebe o histórico de negociação obtido como resultado de testes, bem como todas as estatísticas de negociação.
2. Desativado o recurso para testar e otimizar EAs via [MQL5 Cloud Network](https://cloud.mql5.com/) no modo de uso de ticks reais. Este modo pode ser usado somente em agentes locais e farms na rede local.
3. Aprimorado o trabalho com indicadores para testes visuais. Agora, o gráfico de preços e as linhas de indicadores são desenhados em sincronia, mesmo na velocidade máxima de renderização.
4. Otimizados e significativamente acelerados teste e otimização.
5. Corrigida a depuração de indicadores em dados históricos. Agora a função OnInit e OnDeinit dos indicadores podem ser depuradas corretamente.
6. Acelerado o acesso a dados históricos ao testar EAs em várias moedas.
7. Corrigidos erros que faziam o testador visual congelar ao depurar dados históricos.
8. Acelerado início de passagens quando o agente processa o pacote de tarefas.
9. Alterada a política de distribuição de pacotes de tarefas para agentes de teste. O tamanho do pacote foi aumentado, o que levava a uma redução significativa nos custos indiretos das operações de rede.
10. Alterado o comportamento da opção de usar agentes locais, de rede e de nuvem. Agora, quando essas opções estão desativadas, as tarefas já emitidas são processadas no final e as novas não são mais emitidas. Anteriormente, essas opções funcionavam de forma semelhante ao comando "Desativar", impedindo o trabalho dos agentes imediatamente.

    ![](https://www.metatrader5.com/c/17/0/terminal-33__3.png)

### MetaEditor

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

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

Documentação atualizada.

**Veja as notícias anteriores:**

- [MetaTrader 5 build 1930: Gráficos flutuantes e bibliotecas .Net em MQL5](https://www.metatrader5.com/pt/releasenotes/terminal/1898)
- [MetaTrader 5 build 1880: cálculo do histórico completo de instrumentos sintéticos](https://www.metatrader5.com/pt/releasenotes/terminal/1880)
- [MetaTrader 5 build 1870: adição de símbolos à Observação do mercado de acordo com o ISIN](https://www.metatrader5.com/pt/releasenotes/terminal/1870)
- [MetaTrader 5 build 1860: funções para trabalhar com barras em MQL5 e melhorias no testador de estratégias](https://www.metatrader5.com/pt/releasenotes/terminal/1860)
- [MetaTrader 5 build 1755](https://www.metatrader5.com/pt/releasenotes/terminal/1755)
