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 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. 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. 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. 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. 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. 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. Corrigidos erros de cálculo de instrumentos sintéticos, o que levava à formação de omissão de dados.
  8. 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. Corrigida a exibição de resultados de pesquisa em monitores de alta DPI.

MQL5

  1. 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

  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* e CustomRates*.
  4. 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
       );

  5. 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);

  6. 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

  7. 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
       );

  8. 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
       );

  9. À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.
  10. 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
       );
  11. 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".

  12. 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]

  13. À 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.
  14. À enumeração ENUM_SYMBOL_INFO_INTEGER 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.
  18. Corrigidos erros na biblioteca padrão.

Tester

  1. 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.

  2. 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.
  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.




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.