MetaTrader 5 build 2005: Calendario económico, programas MQL5 como servicios y API para el lenguaje R

¿Qué novedades tiene MetaTrader 5?

21 febrero 2019

Terminal

  1. El calendario económico incorporado ha sido completamente actualizado.

    El calendario económico es un desarrollo propio. En él encontrará más de 600 índices e indicadores de las mayores economías del mundo: Estados Unidos, la Unión Europea, Japón, Reino Unido, Canadá, Australia, China, etc. Los datos se recopilan en tiempo real a partir de fuentes públicas.

    Aparte de las actualizaciones del contenido, en el calendario ahora tendrá a su disposición diversos filtros de eventos ampliados: por tiempo, prioridad, divisas y países.

    Asimismo, los datos del calendario pueden ser solicitados desde los programas MQL5. Podrá encontrar información detallada sobre ello más abajo.




  2. Añadido un nuevo tipo de programas MQL5: los Servicios. Estos programas permiten crear nuestros propias fuentes de datos de precios para el terminal y transmitir los precios de sistemas externos en tiempo real igual que los servidores comerciales de los brókeres.

    A diferencia de los asesores, indicadores y scripts, los servicios no están vinculados a un gráfico concreto. Los servicios funcionan en segundo plano, y comienzan a funcionar automáticamente al iniciarse el terminal (si no han sido detenidos forzosamente).

    Para gestionar los servicios, se ha añadido al Navegador una subsección aparte:





    Creación de servicios
    Para crear la plantilla de un servicio, use el punto correspondiente del Wizard MQL5. Los servicios tienen un punto de entrada OnStart, de forma análoga a los scripts. En él usted podrá organizar un ciclo constante de obtención y procesamiento de datos con la ayuda de las funciones de red.

    Inicio de servicios
    Para iniciar varias copias de un asesor o indicador con diferentes parámetros, basta con superponerlo a diferentes gráficos. En este caso, además, se crearán varios ejemplares del programa, que funcionarán independientemente unos de otros. Los servicios no están vinculadas a los gráficos, por eso se ha previsto un mecanismo aparte para crear sus ejemplares.

    Elija un servicio en el navegador y pulse "Añadir servicio" en el menú contextual del mismo. Se abrirá una ventana de diálogo estándar del programa MQL5, donde usted podrá permitir/prohibir el comercio y el acceso a las señales, así como establecer los parámetros necesarios.




    Para iniciar e instalar un ejemplar del servicio, utilice el menú del mismo. Para gestionar todos los ejemplares, utilice el menú del propio servicio.

  3. Añadido sistema de aprendizaje.

    Ahora, los principiantes podrán aprender fácilemnete a trabajar con la plataforma. Hemos añadido más de 100 consejos interactivos sobre sus funciones principales.

    • Los consejos no le distrairán del trabajo de la plataforma, ya que han sido cuidadosamente incorporados en el panel de herramientas en forma de barra de progreso.
    • Los consejos se muestran solo para las acciones que usted no ha ejecutado en la plataforma.
    • En los consejos se incorporan enlaces interactivos para entrar en diferentes elementos de la interfaz de la plataforma. Por ejemplo, desde un consejo es posible abrir directamente una ventana de diálogo o un menú con el comando necesario.

    A medida que transcurra el aprendizaje y se ejecuten acciones en la plataforma, la barra de progreso se irá llenando.




  4. La historia de la cuenta comercial puede mostrarse como posiciones: la plataforma reúne los datos de las trasacciones relacionadas con la posición (apertura, incremento, cierre parcial y total), y agrupa estos datos en una entrada única. Esto le permitirá mirar con facilidad la hora de apertura y cierre de la posición, su volumen, el precio y el resultado total. Ahora esta representación también está disponible en los informes de la historia exportados a los archivos.




  5. Añadida una API para solicitar datos del terminal MetaTrader 5 a través de aplicaciones que usan el lenguaje R.

    Para el trabajo, hemos preparado un paquete MetaTrader especial. En este hay una DLL para la interacción entre R y el terminal MetaTrader 5, así como documentación y archivos r auxiliares. En este momento, el paquete se encuentra en proceso de registro en el repositorio CRAN, y en breve estará disponible para la descarga y la instalación.




    Para instalar el paquete, use el siguiente comando:
    R CMD INSTALL --build MetaTrader

    Actualmente, para solicitar los datos, tiene a su disposición los siguientes comandos:

    • MT5Initialize — iniciar e instalar la conexión con el terminal MetaTrader 5. Al ejecutar el comando, el terminal se inicia en caso necesario.
    • MT5Shutdown — desinicializar e interrumpir la conexión con el terminal MetaTrader 5.
    • MT5Version — obtener la versión del terminal MetaTrader 5.
    • MT5TerminalInfo — obtener el estado y los parámetros de conexión del terminal con servidor del bróker (número de cuenta y dirección del servidor).
    • MT5WaitTerminal — esperar la conexión del terminal MetaTrader 5 con el servidor del bróker.
    • MT5CopyTicksFrom(symbol, from, count, flags) — copiar los ticks con la fecha indicada, en el número establecido. La fecha se indica en milisegundos desde 1970.01.01.
    • MT5CopyTicksRange(symbol, from, to, flags) — copiar los ticks del intervalo de fechas indicado. Las fechas se indican en milisegundos desde 1970.01.01.
    • MT5CopyRatesFrom(symbol, timeframe, from, count) — copiar las barras de minuto con la fecha indicada, en el número establecido. La fecha se indica en segundos desde 1970.01.01.
    • MT5CopyRatesFromPos(symbol, timeframe, start_pos, count) — copiar las barras de minuto con la posición indicada desde la última barra.
    • MT5CopyRatesFromRange(symbol, timeframe, date_from, date_to) — copiar las barras del intervalo de fechas indicado. Las fechas se indican en segundos desde 1970.01.01.

    En el futuro, se ampliará la lista de comandos soportados.

  6. Optimizada la ventana de diálogo de cierre de una posición comercial con otra opuesta. Ahora su funcionamiento no se ralentiza cuando existe un gran número de posiciones abiertas.
  7. Corregido el error de cálculo de los instrumentos sintéticos, que provocaba la formación de omisiones de datos.
  8. Ahora, al eliminar un instrumento personalizado, se eliminan los archivos de su historia de barras y de ticks. Esto permite evitar la acumulación de datos utilizados en el disco duro.
  9. Corregida la representación de los resultados de búsqueda en los monitores High DPI.

MQL5

  1. Añadido el acceso a los datos del calendario económico a través de los programas MQL5.

    Nuevas funciones

    CalendarCountryById — obtener la descripción de un país según el identificador.
    bool CalendarCountryById(
       const long           country_id,    // identificador del país
       MqlCalendarCountry&  country        // descripción del país
       );
    CalendarEventById — obtener la descripción de un evento según el identificador.
    bool CalendarEventById(
       const long           event_id,      // identificador del evento
       MqlCalendarEvent&    event          // descripción del evento
       );
    CalendarValueById — obtener la descripción de un valor según el identificador.
    bool CalendarValueById(
       const long           value_id,      // identificador del valor
       MqlCalendarValue&    value          // descripción del valor
       );
    CalendarEventByCountry — obtener la matriz de noticias disponibles del país.
    bool CalendarEventByCountry(
       string               country_code,  // código del país
       MqlCalendarEvent&    events[]       // matriz de eventos
       );
    CalendarEventByCurrency — obtener la matriz de noticias disponibles sobre la divisa en la que influyen.
    bool CalendarEventByCurrency(
       string               currency,      // divisa
       MqlCalendarEvent&    events[]       // matriz de eventos
       );
    CalendarValueHistoryByEvent — obtener la matriz de valores en el periodo indicado según el identificador de evento.
    bool CalendarValueHistoryByEvent(
       ulong                event_id,      // indicador de evento
       MqlCalendarValue&    values[],      // matriz de valores
       datetime             datetime_from, // fecha inicial
       datetime             datetime_to=0  // fecha final
       );
    CalendarValueHistory — obtener la matriz de valores de todos los eventos en el periodo indicado con filtrado según el país y/o divisa.
    bool CalendarValueHistory(
       MqlCalendarValue&    values[],          // matriz de valores
       datetime             datetime_from,     // comienzo del periodo
       datetime             datetime_to=0,     // final del periodo
       string               country_code=NULL, // código del país
       string               currency=NULL      // divisa
       );
    CalendarValueLastByEvent — obtener la matriz de los últimos valores de un evento según el identificador. Esta función permite solicitar solo aquellos valores que han cambiado desde el momento de la última solicitud. Para ello, se usa su parámetro in/out "change_id".

    Con cada cambio de la base de datos del calendario, se actualiza su propiedad "change_id", el identificador del último cambio. Al solicitar los datos, indique la "change_id" y el terminal le retornará los eventos que han aparecido en el calendario a partir de ese momento, así como el valor actual de "change_id", que se puede usar para la siguiente solicitud. En la primera llamada de la función, indique una "change_id" igual a cero, en este caso, la función no le retornará ningún evento, pero le transmitirá la "change_id" actual para solicitudes posteriores.
    bool CalendarValueHistory(
       ulong                event_id,          // identificador del evento
       ulong&               change_id,         // identificador del último cambio del calendario
       MqlCalendarValue&    values[]           // matriz de valores
       );
    CalendarValueLast — obtener la matriz de los últimos valores de todos los eventos con filtrado según el país y/o divisa. Esta función permite solicitar solo aquellos valores que han cambiado desde el momento de la última solicitud. De forma análoga a CalendarValueLastByEvent, para la solicitud se usa la propiedad "change_id".
    bool CalendarValueHistory(
       ulong                event_id,          // identificador del evento
       ulong&               change_id,         // identificador del último cambio del calendario
       MqlCalendarValue&    values[],          // matriz de valores
       string               country_code=NULL, // código del país
       string currency=NULL                    // divisa
       );

    Nuevas estructuras

    MqlCalendarCountry — descripción del país.
    struct MqlCalendarCountry
      {
       ulong             id;                        // identificador del país ISO 3166-1
       string            name;                      // nombre de texto del país
       string            code;                      // nombre en código del país ISO 3166-1 alpha-2
       string            currency;                  // código de la divisa del país
       string            currency_symbol;           // símbolo/señal de la divisa del país
       string            url_name;                  // nombre del país utilizado en la URL en el sitio web mql5.com
      };
    MqlCalendarEvent — descripción del evento.
    struct MqlCalendarEvent
      {
       ulong                          id;           // identificador del evento
       ENUM_CALENDAR_EVENT_TYPE       type;         // tipo del evento
       ENUM_CALENDAR_EVENT_SECTOR     sector;       // sector con el que se relaciona el evento
       ENUM_CALENDAR_EVENT_FREQUENCY  frequency;    // periodicidad de publicación del evento
       ENUM_CALENDAR_EVENT_TIMEMODE   time_mode;    // modo de publicación del evento por tiempo
       ulong                          country_id;   // indicador del país
       ENUM_CALENDAR_EVENT_UNIT       unit;         // unidad de medición del valor del evento
       ENUM_CALENDAR_EVENT_IMPORTANCE importance;   // importancia del evento
       ENUM_CALENDAR_EVENT_MULTIPLIER multiplier;   // multiplicador del valor del evento
       uint                           digits;       // número de decimales tras la coma en el valor del evento
       string                         source_url;   // URL de la fuente
       string                         event_code;   // código del evento
       string                         name;         // nombre de texto del evento en el lenguaje del terminal
      };
    MqlCalendarValue — descripción del valor del evento.
    struct MqlCalendarValue
      {
       ulong             id;                        // identificador del valor
       ulong             event_id;                  // identificador del evento
       datetime          time;                      // hora y fecha del evento
       datetime          period;                    // periodo de informe del evento
       int               revision;                  // revisión del indicador publicado con respecto al periodo de informe
       long              actual_value;              // valor actual del evento
       long              prev_value;                // valor anterior del evento
       long              revised_prev_value;        // valor anterior revisado del evento
       long              forecast_value;            // valor pronosticado del evento
       ENUM_CALENDAR_EVENT_IMPACRT impact_type;     // influencia potencial en el curso de la divisa
      };

    Nuevas enumeraciones

    enum ENUM_CALENDAR_EVENT_FREQUENCY
      {
       CALENDAR_FREQUENCY_NONE            =0,   // no se usa
       CALENDAR_FREQUENCY_WEEK            =1,   // semana
       CALENDAR_FREQUENCY_MONTH           =2,   // mes
       CALENDAR_FREQUENCY_QUARTER         =3,   // trimestre
       CALENDAR_FREQUENCY_YEAR            =4,   // año
       CALENDAR_FREQUENCY_DAY             =5,   // día
      };
    
    enum ENUM_CALENDAR_EVENT_TYPE
      {
       CALENDAR_TYPE_EVENT                =0,   // evento(reunión, discurso, etc.)
       CALENDAR_TYPE_INDICATOR            =1,   // indicador
       CALENDAR_TYPE_HOLIDAY              =2,   // fiesta
      };
    
    enum ENUM_CALENDAR_EVENT_SECTOR
      {
       CALENDAR_SECTOR_NONE               =0,   // no
       CALENDAR_SECTOR_MARKET             =1,   // mercado
       CALENDAR_SECTOR_GDP                =2,   // PIB
       CALENDAR_SECTOR_JOBS               =3,   // trabajo
       CALENDAR_SECTOR_PRICES             =4,   // precios
       CALENDAR_SECTOR_MONEY              =5,   // dinero
       CALENDAR_SECTOR_TRADE              =6,   // comercio
       CALENDAR_SECTOR_GOVERNMENT         =7,   // gobierno
       CALENDAR_SECTOR_BUSINESS           =8,   // negocios
       CALENDAR_SECTOR_CONSUMER           =9,   // consumidor
       CALENDAR_SECTOR_HOUSING            =10,  // vivienda
       CALENDAR_SECTOR_TAXES              =11,  // impuestos
       CALENDAR_SECTOR_HOLIDAYS           =12,  // fiestas
      };
      
    enum ENUM_CALENDAR_EVENT_IMPORTANCE
      {
       CALENDAR_IMPORTANCE_NONE           =0,   // no
       CALENDAR_IMPORTANCE_LOW            =1,   // baja
       CALENDAR_IMPORTANCE_MODERATE       =2,   // media
       CALENDAR_IMPORTANCE_HIGH           =3,   // alta
      };
    
    enum ENUM_CALENDAR_EVENT_UNIT
      {
       CALENDAR_UNIT_NONE                 =0,   // no
       CALENDAR_UNIT_PERCENT              =1,   // porcentajes
       CALENDAR_UNIT_CURRENCY             =2,   // divisa nacional
       CALENDAR_UNIT_HOUR                 =3,   // número de horas
       CALENDAR_UNIT_JOB                  =4,   // número de puestos laborales
       CALENDAR_UNIT_RIG                  =5,   // número de plataformas petroleras
       CALENDAR_UNIT_USD                  =6,   // dólares USA
       CALENDAR_UNIT_PEOPLE               =7,   // número de personas
       CALENDAR_UNIT_MORTGAGE             =8,   // número de créditos hipotecarios
       CALENDAR_UNIT_VOTE                 =9,   // número de votos
       CALENDAR_UNIT_BARREL               =10,  // número de barriles
       CALENDAR_UNIT_CUBICFEET            =11,  // volumen pies cúbicos
       CALENDAR_UNIT_POSITION             =12,  // número de puestos laborales
       CALENDAR_UNIT_BUILDING             =13   // número de construcciones
      };
      
    enum ENUM_CALENDAR_EVENT_MULTIPLIER
      {
       CALENDAR_MULTIPLIER_NONE           =0,   // no    
       CALENDAR_MULTIPLIER_THOUSANDS      =1,   // miles
       CALENDAR_MULTIPLIER_MILLIONS       =2,   // millones
       CALENDAR_MULTIPLIER_BILLIONS       =3,   // miles de millones
       CALENDAR_MULTIPLIER_TRILLIONS      =4,   // billones
      };
      
    enum ENUM_CALENDAR_EVENT_IMPACRT
      {
       CALENDAR_IMPACT_NA                 =0,   // desconocido
       CALENDAR_IMPACT_POSITIVE           =1,   // positivo
       CALENDAR_IMPACT_NEGATIVE           =2,   // negativo
      };
    
    enum ENUM_CALENDAR_EVENT_TIMEMODE
      {
       CALENDAR_TIMEMODE_DATETIME         =0,   // la fuente publica la hora exacta
       CALENDAR_TIMEMODE_DATE             =1,   // el evento ocupa el día completo
       CALENDAR_TIMEMODE_NOTIME           =2,   // la fuente no publica la hora del evento
       CALENDAR_TIMEMODE_TENTATIVE        =3,   // la fuente no publica la hora del evento de antemano, solo el día, la hora se concreta al darse el evento
      };

    Nuevos códigos de errores

    ERR_CALENDAR_MORE_DATA             =5400,   // la matriz es pequeña para el resultado completo (se han dado los valores que han cabido en la matriz)
    ERR_CALENDAR_TIMEOUT               =5401,   // se ha superado el límite de tiempo de espera para la solicitud de datos del calendario
    ERR_CALENDAR_NO_DATA               =5402,   // no se han detectado datos

  2. Corregido y acelerado significativamente el trabajo con las historias de ticks y de barras.obtener la matriz de noticias disponibles sobre la divisa en la que influyen
  3. Corregidas y significativamente aceleradas las funciones de cambio de la historia de ticks y de barras en los instrumentos comerciales personalizados CustomTicks* y CustomRates*.
  4. Añadidas nuevas funciones de conversión de datos.

    CharArrayToStruct - Copia una matriz de tipo uchar en una estructura POD.
    bool  CharArrayToStruct(
       void&         struct_object,    // estructura
       const uchar&  char_array[],     // matriz
       uint          start_pos=0       // posición inicial en la matriz
       );
    StructToCharArray - Copia una estructura POD en una matriz de tipo uchar.
    bool  StructToCharArray(
       const void&  struct_object,     // estructura
       uchar&       char_array[],      // matriz
       uint         start_pos=0        // posición inicial en la matriz
       );

  5. Añadida la función MathSwap para cambiar el orden del byte en los valores ushort, uint y ulong.
    ushort MathSwap(ushort value);
    uint   MathSwap(uint   value);
    ulong  MathSwap(ulong  value);

  6. Añadidas funciones de red para crear conexiones TCP con hostings remotos a través de sockets de sistema:

    • SocketCreate — crea un socket con las banderas indicadas y retorna su manejador
    • SocketClose — cierre el socket
    • SocketConnect — ejecuta la conexión al servidor, con control de límite de tiempo
    • SocketIsConnected — comprueba si está conectado el socket en el momento actual
    • SocketIsReadable — obtiene el número de bytes que se pueden leer desde el socket
    • SocketIsWritable — comprueba si es posible registrar datos en el socket en el momento actual
    • SocketTimeouts — establece el límite de tiempo para obtener y enviar los datos para el objeto de sistema del socket
    • SocketRead — lee los datos desde el socket
    • SocketSend — registra los datos en el socket
    • SocketTlsHandshake — inicia una conexión TLS (SSL) protegida con el host indicado según el protocolo TLS Handshake
    • SocketTlsCertificate — obtiene los datos sobre el certificado usado para proteger la conexión de red
    • SocketTlsRead — lee los datos de una conexión TLS protegida
    • SocketTlsReadAvailable — lee todos los datos disponibles de una conexión TLS protegida
    • SocketTlsSend — envía los datos a través de una conexión TLS protegida

    La dirección del host al que se realiza la conexión con la ayuda de funciones de red se deberá añadir explícitamente a la lista de permitidas en los ajustes del terminal.

    Para trabajar con las funciones de red se han añadido nuevos códigos de errores:

    • ERR_NETSOCKET_INVALIDHANDLE (5270) — a la función se ha transmitido un puntero incorrecto del socket
    • ERR_NETSOCKET_TOO_MANY_OPENED (5271) — se han abierto demasiados sockets (128 como máximo)
    • ERR_NETSOCKET_CANNOT_CONNECT (5272) — error al conectar con el host remoto
    • ERR_NETSOCKET_IO_ERROR (5273) — error de envío/recepción de datos del socket
    • ERR_NETSOCKET_HANDSHAKE_FAILED (5274) — error al establecer una conexión protegida (TLS Handshake)
    • ERR_NETSOCKET_NO_CERTIFICATE (5275) — no hay datos sobre el certificado con el que se protege la conexión

  7. Añadidas nuevas funciones para trabajar con cadenas:

    StringReserve — reserva en la memoria para la cadena un búfer del tamaño indicado.
    bool  StringReserve(
       string&        string_var,          // cadena
       uint           new_capacity         // tamaño del búfer para guardar la cadena
       );
    StringSetLength — establece para una cadena la longitud indicada en símbolos.
    bool  StringSetLength(
       string&        string_var,          // cadena
       uint           new_length           // nueva longitud de la cadena
       );

  8. Añadidas nuevas funciones para trabajar con matrices:

    ArrayRemove — Elimina de la matriz el número indicado de elementos, comenzando por el índice indicado.
    bool  ArrayRemove(
       void&         array[],              // matriz de cualquier tipo
       uint          start,                // desde qué índice comenzamos a eliminar
       uint          count=WHOLE_ARRAY     // número de elementos
       );
    ArrayInsert — Inserta en la matriz-receptor el número indicado de elementos, comenzando por el índice establecido.
    bool  ArrayInsert(
       void&         dst_array[],          // matriz-receptor
       const void&   src_array[],          // matriz-fuente
       uint          dst_start,            // índice en la matriz-receptor para la inserción
       uint          src_start=0,          // índice en la matriz-fuente para el copiado
       uint          count=WHOLE_ARRAY     // número de elementos insertados
       );
    ArrayReverse — Invierte en la matriz el número indicado de elementos, comenzando por el índice indicado.
    bool  ArrayReverse(
       void&         array[],              // matriz de cualquier tipo
       uint          start=0,              // desde qué índice comenzamos a invertir la matriz
       uint          count=WHOLE_ARRAY     // número de elementos
       );

  9. A las funciones CustomRatesUpdate, CustomRatesReplace, CustomTicksAdd y CustomTicksReplace se añade el parámetro "uint count" para indicar el número de elementos de la matriz transmitida que serán utilizados. Por defecto, para el parámetro se usa el valor WHOLE_ARRAY. Eso significa que se utilizará toda la matriz.
  10. Añadida la función CustomBookAdd — transmite el estado de la profundidad de mercado del instrumento personalizado. La función permite retransmitir la profundidad de mercado como si llegase desde el servidor del bróker.
    int  CustomBookAdd(
       const string        symbol,            // nombre del símbolo
       const MqlBookInfo&  books[]            // matriz con las descripciones de los elementos de la profundidad de mercado
       uint                count=WHOLE_ARRAY  // número de elementos que se usarán
       );
  11. Añadida la sobrecarga de la función CustomSymbolCreate, que permite crear un instrumento comercial personalizado basado en uno ya existente. Después de crearlo, cualquier propiedad del símbolo se puede cambiar por el valor necesario con las funciones correspondientes.
    bool  CustomSymbolCreate(
       const string        symbol_name,       // nombre del símbolo personalizado
       const string        symbol_path="",    // nombre del grupo en el que se creará el símbolo
       const string        symbol_origin=NULL // nombre del símbolo sobre cuya base se creará el símbolo personalizado
       );
    Nombre del símbolo desde el que se copiarán las propiedades del símbolo personalizado creado, se indica en el parámetro "symbol_origin".

  12. Actualizada la función StringToTime, que convierte una cadena con una fecha/hora en un valor del tipo datetime. Ahora da soporte a los siguientes formatos de fecha:

    • 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. Añadida a la enumeración ENUM_TERMINAL_INFO_INTEGER la propiedad TERMINAL_VPS, señal de que el terminal ha sido iniciado en el servidor virtual MetaTrader Virtual Hosting (MetaTrader VPS). Si el programa está iniciado en el hosting, usted podrá desactivar todas sus funciones visuales, puesto que en el servidor virtual no hay interfaz gráfica de usuario.
  14. Añadida a la enumeración ENUM_SYMBOL_INFO_INTEGER la nueva propiedad SYMBOL_EXIST — señal de que existe un símbolo con ese nombre.
  15. Corregida la tipificación al usar la declaración preliminar de una función de plantilla.
  16. Añadida la reinicialización de los indicadores al cambiar la cuenta comercial.
  17. Optimizado el funcionamiento de la función StringSplit.
  18. Corregidos errores en la biblioteca estándar.

Tester

  1. Añadida la función TesterStop, la finalización anticipada estándar del asesor en un agente de simulación. Ahora usted puede interrumpir forzosamente la simulación al alcanzar el número establecido de reducción o de acuerdo con cualquier otro criterio.

    La simulación realizada con la ayuda de esta función, se considera exitosa. Después de llamarla, al terminal se le transmite la historia comercial obtenida como resultado de la simulación, así como todas las estadísticas comerciales.

  2. Desactivada la posibilidad de simular y optimizar expertos a través de MQL5 Cloud Network en el modo de uso de ticks reales. Este modo se puede usar solo en agentes locales y farms en la red local.
  3. Mejorado el trabajo con los indicadores en el modo visual. Ahora el gráfico de precio y las líneas del indicador se dibujan sincrónicamente incluso con la máxima velocidad de visualización.
  4. Optimizadas y aceleradas significativamente la simulación y optimización.
  5. Corregida la depuración de los indicadores con los datos históricos. Ahora las funciones OnInit y OnDeinit de los indicadores se puede depurar correctamente.
  6. Acelerado el acceso a los datos históricos al simular expertos multidivisa.
  7. Corregidos los errores que provocaban el congelamiento del simulador visual al depurar con datos históricos.
  8. Acelerado el inicio de las pasadas de optimización al procesar con un agente un paquete de tareas.
  9. Modificada la política de distribución de paquetes a los agentes de simulación. El tamaño del paquete ha sido aumentado, lo que ha provocado una reducción significativa de los gastos en operaciones de red.
  10. Modificado el comportamiento de la opción de uso de agentes locales, de red y en la nube. Ahora, al desactivar estas opciones, las tareas distribuidas se ejecutan hasta el final, mientras que las nuevas se dejan de distribuir. Anteriormente, estas opciones funcionaban de forma análoga al comando "Desactivar", que interrumpía de inmediato el funcionamiento de los agentes.




MetaEditor

  1. Añadido el soporte para símbolos no-ANSI en el depurador. Ahora, las expresiones observadas se procesan correctamente, incluso si el nombre de la variable se indica en cirílico.
  2. Corregida la representación de los resultados de búsqueda en los monitores High DPI.

Añadida la traducción de la interfaz al croata.

Documentación actualizada.