MetaTrader 5 build 1730: Proyectos en el MetaEditor e instrumentos sintéticos

¿Qué novedades tiene MetaTrader 5?

20 diciembre 2017

Finaliza el soporte de las antiguas versiones de los terminales

La nueva versión de la plataforma no dará soporte a los terminales de escritorio y móviles de las versiones antiguas:

  • Terminal de cliente: versiones inferiores al build 730 del 23 de noviembre de 2012
  • Terminal móvil para iPhone: versiones inferiores al build 1171 del 11 de noviembre de 2015
  • Terminal móvil para Android: versiones inferiores al build 1334 del 5 de agosto de 2016
Dichos terminales no podrán conectarse a los servidores de las nuevas versiones. Le recomendamos encarecidamente que actualice sus terminales de antemano.

Modificado el protocolo de trabajo con MQL5 Storage

Para dar soporte a los nuevos proyectos compartidos se ha modificado el protocolo de trabajo con el repositorio online MQL5 Storage. Por desgracia, después de actualizar a la nueva versión de la plataforma, usted deberá extraer (check-out) de nuevo todos los datos del repositorio. Los propios datos que se guardan en él no se tocarán ni perderán.

Antes de actualizar a la nueva versión de la plataforma, le recomendamos enviar todos los cambios locales al repositorio (ejecutar Commit).

Terminal

  1. Añadida la posibilidad de crear instrumentos financieros sintéticos, es decir, instrumentos basados ​​en uno o más de los disponibles. Solo tiene que especificar la fórmula para el cálculo de las cotizaciones y la plataforma generará los ticks del instrumento sintético en tiempo real, y también creará su historia de minutos.

    Cómo sucede esto

    • Usted crea un instrumento sintético y establece una fórmula para él.
    • La palataforma calculará sus ticks con una frecuencia de 10 veces por segundo (y solo si cambia el precio aunque sea de un instrumento que entre en la fórmula).
    • La plataforma calcula la historia de las barras de minuto (en los dos últimos meses) basándose en las barras de minuto de los instrumentos que entren en su fórmula. Todas las barras nuevas (la actual y la siguiente) se construirán en tiempo real basándose en los ticks generados del instrumento sintético.

    Por ejemplo, usted puede crear un instrumento que muestre el índice del dólar (USDX). Su fórmula tendrá el aspecto siguiente:

    50.14348112 * pow(ask(EURUSD),-0.576) * pow(USDJPY,0.136) * pow(ask(GBPUSD),-0.119) * pow(USDCAD,0.091) * pow(USDSEK,0.042) * pow(USDCHF,0.036)

    Nota: en la fórmula original del índice del dólar se usan las parejas USDEUR y USDGBP. Puesto que en la plataforma solo hay parejas de divisas inversas, en la fórmula del instrumento sintético para ellas se usa la potencia negativa y el precio Ask en lugar de Bid.

    La plataforma calculará en tiempo real el precio del nuevo instrumento basándose en las cotizaciones de los otros seis instrumentos, proporcionados por su bróker. En la Observación del mercado y en el gráfico, podrá ver cómo cambiar su precio:


    Cree un nuevo instrumento personalizado, abra sus especificaciones e indique la fórmula:



    Para mayor comodidad, el editor de fórmulas muestra una lista con las posibles variantes a medida que se introduce el nombre de los instrumentos y funciones.

    El cálculo de los ticks y las barras de minuto del instrumento sintético comienza al añadirlo a la "Observación del mercado". En este caso, a la "Observación del mercado" se añaden todos los símbolos necesarios para su cálculo. Al diario de la plataforma se añadirá una entrada sobre el comienzo del cálculo: Synthetic Symbol USDX: processing started.
    • El cálculo del instrumento sintético terminará al ocultarse de la "Observación del mercado".
    • Los símbolos usados en el momento actual para calcular los instrumentos sintéticos no pueden ser ocultados de la "Observación del mercado".

    Cálculo de las cotizaciones en tiempo real
    Cada 100 ms (diez veces por segundo) se comprueba si ha cambiado el precio de aunque sea uno de los instrumentos que participa en la fórmula. De ser así, tendrá lugar el recálculo del precio del instrumento sintético y se generará un tick. El cálculo se realiza paralelamente en tres flujos para los precios Bid, Ask y Last. Por ejemplo, si en la fórmula se indica EURUSD*GBPUSD, el cálculo de los precios del intrumento sintético será el siguiente:

    • Bid — bid(EURUSD)*bid(GBPUSD)
    • Ask — ask(EURUSD)*ask(GBPUSD)
    • Last — last(EURUSD)*last(GBPUSD)

    La presencia de cambios se comprueba para cada precio por separado. Por ejemplo, si al darse el cálculo cambia solo el precio Bid del instrumento fuente, entonces para el tick del instrumento sintético se calculará solo el precio donde ha habido cambios.

    Construcción de la historia de barras de minuto
    Aparte de recopilar los ticks en tiempo real, la plataforma crea también la historia de minutos del instrumento sintético. De este modo, el tráder puede mirar sus gráficos de una forma análoga a los instrumentos convencionales, para llevar a cabo el análisis técnico con la ayuda de objetos e indicadores.

    En cuanto el tráder añade un instrumento sintético a la Observación del mercado, la plataforma comprueba si existe historia de minutos calculada para él. De no ser así, esta se creará para los últimos 60 días, es decir, unas 50 000 barras. Si, en los ajustes de la plataforma, en el parámetro barras máximas en la ventana se indica un valor menor, se usará precisamente esta limitación.

    Si una parte de las barras de este periodo ya ha sido construida, la plataforma creará las nuevas barras que falten. La historia más profunda se crea solo al intentar visualizar el periodo temporal correspondiente en el gráfico (al pasarlo hacia atrás o solicitar la historia de un programa MQL5).

    La historia de las barras de minuto de los instrumentos sintéticos se calcula usando como base las barras de minuto (no los ticks) de los instrumentos incluidos en la fórmula. Por ejemplo, para calcular el precio Open de la barra de minuto de un instrumento sintético, la plataforma toma el precio de los instrumentos Opеn incluidos en su fórmula. El cálculo de los precio High, Low y Close se realiza de forma análoga.

    Si para algún instrumento de la fórmula no está presente la barra de minuto correspondiente, la plataforma tomará para el cálculo el precio Close de la barra anterior. Por ejemplo, se usan tres instrumentos: EURUSD, USDJPY y GBPUSD. Si al calcular la barra correspondiente al minuto 12:00, para el instrumento USDJPY no está presente esta barra de minuto, al realizar el cálculo se usarán los precios siguientes:

    • Para Open — EURUSD Open 12:00, USDJPY Close 11:59, GBPUSD Open 12:00
    • Para High — EURUSD High 12:00, USDJPY Close 11:59, GBPUSD High 12:00
    • Para Low — EURUSD Low 12:00, USDJPY Close 11:59, GBPUSD Low 12:00
    • Para Close — EURUSD Close 12:00, USDJPY Close 11:59, GBPUSD Close 12:00

    Si la barra de minuto no está presente en ninguno de los instrumentos de la fórmula, no se calculará la barra de minuto correspondiente del instrumento sintético.

    Construcción de las nuevas barras de minuto
    Todas las nuevas barras (la presente y las siguientes) del instrumento sintético se crean usando como base los ticks generados. El precio al que se construyen las barras depende del parámetro "Construcción de gráficos" en las especificaciones:




    Qué operaciones se pueden utilizar en la fórmula del instrumento
    En la fórmula se pueden utilizar los datos de precio, así como ciertas propiedades de los símbolos disponibles (proporcionados por el bróker). Para ello, indique:

    • El nombre del símbolo: dependiendo de qué precio del instrumento sintético se calcule, en la fórmula se usará el precio Bid, Ask o Last del instrumento indicado. Por ejemplo, si indicamos EURUSD*GBPUSD, entonces Вid se calculará como bid(EURUSD)*bid(GBPUSD), y el precio Ask, como ask(EURUSD)*ask(GBPUSD).
    • bid(nombre del símbolo) — para calcular el precio Bid de un instrumento sintético se usará obligatoriamente el precio Bid del símbolo indicado. En la práctica, esta variante se corresponde con la anterior (sin indicar el tipo de precio).
    • ask(nombre del símbolo) — para calcular el precio Bid de un instrumento sintético se usará obligatoriamente el precio Ask del símbolo indicado. Para calcular el precio Ask, al contrario, se usará el precio Bid del instrumento indicado. Para calcular el precio Last se usará el precio Last del instrumento indicado. Por ejemplo, si indicamos ask(EURUSD)*GBPUSD, el cálculo será el siguiente:
      • Вid = ask(EURUSD)*bid(GBPUSD)
      • Ask = bid(EURUSD)*ask(GBPUSD)
      • Last = last(EURUSD)*last(GBPUSD)
    • last(nombre del símbolo) — el precio Last del símbolo indicado se usará al realizarse el cálculo de todos los precios del instrumento sintético (Bid, Ask y Last). Por ejemplo, si indicamos last(EURUSD)*GBPUSD, el cálculo será el siguiente:
      • Вid = last(EURUSD)*bid(GBPUSD)
      • Ask = last(EURUSD)*ask(GBPUSD)
      • Last = last(EURUSD)*last(GBPUSD)
    • volume(nombre del símbolo) — en la fórmula se utilizará el volumen de ticks del instrumento indicado. Asegúrese de que se transmite la información sobre los volúmenes para el instrumento indicado.
    • point(nombre del símbolo) — en la fórmula se colocará el tamaño del cambio mínimo de precio del instrumento indicado.
    • digits(nombre del símbolo) — en la fórmula se colocará el número de dígitos decimales en el precio del instrumento indicado.

    Si el símbolo tiene un nombre complicado (contiene guiones, puntos, etc), deberá estar entre comillas. Por ejemplo, "RTS-6.17".
    En la fórmula se pueden utilizar las operaciones aritméticas: suma (+), resta (-), multiplicación (*), división (/) y resto de la división (%). Por ejemplo, EURUSD+GBPUSD indica que el precio se calcula como la suma de los precios EURUSD y GBPUSD. Asimismo, en la fórmula se puede utilizar un signo menos unario para cambiar el signo: -10*EURUSD.

    Existe cierta prioridad de ejecución para las operaciones aritméticas:

    • Las operaciones de multiplicación, división y resto de la división se realizan en primer lugar; después se ejecutan las operaciones de suma y resta.
    • Las operaciones se realizan de izquierda a derecha. Si en la fórmula se realizan varias operaciones que tenga la misma prioridad (por ejemplo, multiplicación y división), se ejecutará en primer lugar la operación de la izquierda.
    • Para modificar la prioridad de las operaciones se pueden utilizar los paréntesis ( y ). Las expresiones entre paréntesis tienen la mayor prioridad en los cálculos. Para ellas también existe el principio de izquierda a derecha: primero se calculan las expresiones entre paréntesis que se encuentren más a la izquierda en la fórmula.

    Asimismo, en la fórmula se pueden utilizar constantes:

    • Numéricas (enteras y reales con punto). Por ejemplo, EURUSD*2+GBPUSD*0.7.
    • Propiedades de símbolo _Digits y _Point. Estas añaden a la fórmula las propiedades del símbolo personalizado a partir de las especificaciones. _Digits — número de dígitos después de la coma en el precio de un instrumento, _Point — tamaño del cambio mínimo de precio de un instrumento.

    Además, en la fórmula se pueden usar todas las funciones matemáticas utilizables en MQL5, excepto MathSrand, MathRand y MathIsValidNumber. Para todas las funciones se usan solo los nombres cortos: fabs(), acos(), asin(), etcétera.

  2. Añadida la posibilidad de agregar cotizaciones para los instrumentos financieros en tiempo real. Ahora en MQL5 se puede escribir un experto que agregará cualquier cotización del instrumento personalizado indicado. Para ello, se usa la nueva función CustomTicksAdd.
    int  CustomTicksAdd(
       const string           symbol,       // nombre del símbolo
       const MqlTick&         ticks[]       // matriz con los datos de ticks que se deben aplicar al instrumento personalizado
       );
    La función CustomTicksAdd permite retransmitir los ticks como si llegaran del servidor del bróker. Los datos se registran directamente en la base de ticks, y luego se envían a la ventana "Observación del mercado". Y ya desde ella, el terminal guarda los ticks en su base. Si se transmite un gran volumen de datos en una llamada, la función cambia su comportamiento para ahorrar recursos. Si se transmiten más de 256 ticks, los datos se dividen en dos partes. La primera parte (la más grande) se registra directamente en la base de ticks (como hace CustomTicksReplace). La segunda parte, compuesta de los últimos 128 ticks, se transmite a la ventana de "Observación de mercado" y, después de ello, se guarda en la base del terminal.

  3. Añadida la representación de los precios High y Low en la Observación del mercado. Por defecto, estas columnas están desactivadas. Se podrán activar a través del menú contextual:




    Para los instrumentos cuyos gráficos se construyen según los precios Bid (como se indica en las especificaciones), se muestran los precios Bid High y Bid Low. Para los instrumentos cuyos gráficos se construyen según los precios Last, se muestran Last High y Last Low.

    Junto con las columnas High/Low se activará automáticamente la columna Last, si en la Observación del mercado hay aunque sea un solo instrumento cuyos gráficos se construyan con los precios Last.

  4. Añadida la posibilidad de editar la historia de ticks de los instrumentos financieros personalizados. Pulse "Símbolos" en el menú contextual de la Observación del mercado, elija el instrumento personalizado y solicite el intervalo de datos necesario en la pestaña "Ticks".

    • Para cambiar el valor, clique dos veces sobre el mismo.
    • Para añadir o eliminar entradas, use el menú contextual.
    • Para eliminar varias barras/ticks a la vez, selecciónelos con el ratón, manteniendo la tecla Shift o Ctrl+Shift.


    Para mayor comodidad, los cambios de las entradas se iluminan:

    • fondo verde — entrada cambiada
    • fondo gris — entrada eliminada
    • fondo amarillo — entrada añadida

    Para guardar los cambios, pulse "Aplicar cambios" en la parte inferior de la ventana.

  5. Añadida la representación de las cuentas preliminares en el árbol del Navegador.

    Los tráders pueden enviar al bróker solicitudes para la apertura de cuentas reales directamente desde los terminales de escritorio. Para ello, basta con rellenar un sencillo formulario con su información de contacto, de la misma forma que se hace al abrir una cuenta demo. Después se crea para el tráder una cuenta preliminar especial. A continuación, el bróker se pone en contacto con el tráder para formalizar las relaciones, y crea una cuenta real a partir de la preliminar.




  6. Añadida la muestra de la hora en milisegundos en la Ventana de cotizaciones:



  7. Se ha acelerado el escaneo de los servidores disponibles en la ventana de diálogo de la cuenta nueva.
  8. Corregida la representación del objeto gráfico "Línea de tendencia" con las opciones "Rayo a la izquierda" y "Rayo a la derecha" activadas.
  9. Optimizado el trabajo con grandes cantidades de mensajes del correo interno (cientos de miles).
  10. Optimizado el trabajo del terminal con grandes cantidades de instrumentos comerciales (50 mil y más).
  11. Añadida la optimización de la historia de ticks de los instrumentos personalizados ejecutada después de editar la historia.

MetaEditor

  1. En el MetaEditor han aparecido los proyectos completos. Así, desarrollar programas es mucho más cómodo.

    Ahora como proyecto no actúa el principal archivo MQ5 del programa. El proyecto es un archivo "MQPROJ" aparte, en el que se guardan los ajustes del programa, los parámetros de compilación y la información sobre todos los archivos utilizados. El acceso a los ajustes principales del proyecto se organiza a través de una ventana de diálogo aparte, ya no hay necesidad de indicarlos en el código fuente con la ayuda de #property.

    Para trabajar más cómodamente con el proyecto, ahora existe una pestaña aparte en el Navegador. En esta se representan por categorías todos los archivos utilizados: de inclusión, de recursos, de encabezado, etc. Además, los archivos se añaden al navegador del proyecto de forma automática. Por ejemplo, si usted incluye un nuevo archivo MQH en el código, se mostrará automáticamente en el apartado "Dependencies" del navegador.

    Hemos previsto directamente la posibilidad de trabajar con nuevos proyectos en el repositorio online MQL5 Storage. Ahora resulta mucho más cómodo desarrollar grandes proyectos junto a otros miembros de MQL5.community.

    Para trabajar en dichos proyectos compartidos, se ha añadido el nuevo apartado Shared Projects. El proyecto creado en este apartado se envía directamente al repositorio: usted podrá conceder derechos a otros miembros y proceder al desarrollo conjunto rápidamente.




    Al compilar el proyecto en Shared Project, el archivo ejecutable EX5 se copia automáticamente en el catálogo local Experts, Indicators o Scripts, dependiendo del tipo de programa. Usted podrá iniciar directamente el programa en el gráfico, sin copiar los archivos manualmente cada vez.


    Cambios en el trabajo con el repositorio MQL5 Storage

    Para implementar la posibilidad de trabajar con proyectos compartidos, se ha rehecho por completo el protocolo de trabajo con el repositorio MQL5 Storage. Por desgracia, después de actualizar a la nueva versión de la plataforma, usted deberá extraer (check-out) de nuevo todos los datos del repositorio. Los propios datos que se guardan en él no se tocarán ni perderán.

    Antes de actualizar a la nueva versión de la plataforma, le recomendamos enviar todos los cambios locales al repositorio (ejecutar Commit).

    El comando "Extraer datos del repositorio" (Checkout from Storage) ahora no está disponible. Para extraer datos de utilizan los comandos "Activar MQL5 Storage" y "Obtener archivos del repositorio":

    • Si en la copia actual del MetaEditor usted no ha usado aún el repositorio, pulse "Activar MQL5 Storage" en el menú contextual de la ventana "Navegador". Todos los catálogos y archivos existentes en su repositorio se transferirán a la computadora local.
    • Si usted ya trabaja con el repositorio, entonces para extraer todos los datos del mismo, pulse "Obtener archivos del repositorio" en el menú contextual del elemento raíz de MQL5 en la ventana "Navegador".

    Nuevos proyectos: ejemplo de creación y detalles del funcionamiento

    En el MetaEditor ahora existe un nuevo elemento: el proyecto propiamente dicho. Se trata de un archivo con la expansión mqproj, en el que se guardan las propiedades generales del programa, así como información sobre todos los archivos utilizados. Ahora es posible gestionar cómodamente las propiedades del programa en una ventana de diálogo propia del MetaEditor, sin tener que modificarlas manualmente en el código fuente (directivas #property).

    Si usted ya dispone de desarrollos, el método más sencillo de probar los nuevos proyectos es usar el comando "Nuevo proyecto a partir de un Archivo fuente".



    En el mismo catálogo que se encuentra el archivo fuente, se creará un archivo de proyecto homónimo con la expansión mqproj. Al proyecto se añadirán de forma automática las propiedades principales del programa, indicadas como #property en el archivo fuente: el nombre, el copyright, la versión, el enlace al desarrollador y la descripción.

    Las propiedades del programa en el archivo del proyecto tienen prioridad sobre las propiedades indicadas en el código fuente. Si usted indica las propiedades tanto en el proyecto como en el código fuente, se usarán las propiedades del proyecto.




    En las propiedades de los proyectos han aparecido dos nuevas opciones para compilar programas MQL5:

    • Activar optimización adicional: las aplicaciones con la optimización desactivada se compilan más rápido, pero funcionan más despacio.
    • Comprobar los divisores reales: las aplicaciones con la comprobación desactivada funcionan un poco más rápido, puesto que los errores de división por cero no son comprobados al ejecutar el código.

    Para trabajar con un proyecto se ha diseñado la pestaña aparte "Proyecto", en la ventana "Navegador". En esta pestaña se muestran cómodamente todos los archivos usados en el proyecto. Al generar el proyecto a partir de un archivo fuente, se añaden automáticamente al apartado "Dependencies" todos los archivos de inclusión utilizados (indicados con la ayuda de la directiva #include en el archivo MQ5 principal y en todos los archivos incluidos en él).

    Al añadir nuevos archivos de inclusión al código fuente, dichos archivos también aparecerán en el Navegador del proyecto. En el apartado Headers se añadirán los archivos de encabezado utilizados, y en el apartado Resources, las imágenes, sonidos y otros programas MQL5 incluidos en el proyecto en forma de recursos. En el apartado Sources se muestran los archivos MQ5 con el código fuente. Al apartado Settings and files podemos añadir otros archivos, por ejemplo, los ajustes para la simulación y las plantillas para los gráficos.

    Para añadir los archivos existentes al proyecto y eliminar archivos del mismo, use los comandos del menú contextual. Preste mucha atención al eliminar archivos: usted puede quitar un archivo del proyecto (suprimir la vinculación) o eliminarlo completamente del disco duro:




    Crear un nuevo proyecto es igual de fácil que crear un programa MQL5 normal. Pulse "Nuevo proyecto" y, ya en el Wizard de MQL5 en el modo normal, elija el tipo de programa a crear, indicando también sus propiedades (nombre, manejador de eventos, etc).

    Para obtener un archivo ejecutable EX5, usted podrá abrir el proyecto y ejecutar el comando de compilación (F7) o, como antes, abrir el archivo MQ5 principal del programa y compilarlo.


    Proyectos compartidos en MQL5 Storage: detalles del funcionamiento

    Para trabajar con proyectos compartidos, se ha diseñado el apartado Shared Projects. Si usted aún no ha activado el repositorio, ejecute en el menú contextual de esta carpeta el comando Activate MQL5 Storage. El MetaEditor comprobará de inmediato si hay datos guardados en su repositorio, y también si hay disponible para usted algún proyecto compartido. Los datos disponibles se extraerán instantáneamente del repositorio y luego serán cargados en la computadora (Checkout). Los proyectos compartidos disponibles se mostrarán en el apartado Shared Project, para obtenerlos, pulse "Extraer archivos del repositorio" en el menú contextual.

    Para crear un nuevo proyecto compartido, elija la carpeta Shared Projects y pulse "Nuevo proyecto":




    A continuación, siga los pasos estándar del Wizard MQL5: indique el tipo, el nombre y las propiedades del futuro programa. Elija para los proyectos compartidos nombres claros y comprensibles, para que los demás miembros puedan distinguirlos fácilmente. En los nombres solo se permiten letras latinas, no están permitidos los espacios en blanco.

    Una vez creado, el proyecto se añadirá automáticamente al repositorio MQL5 Storage. Los archivos utilizados de la biblioteca estándar no son añadidos al repositorio, podrá añadirlos manualmente en caso necesario.

    Para permitir trabajar en el proyecto a los otros integrantes, abra las propiedades del mismo. Aquí podrá conceder derechos a usuarios concretos (indicando el login de MQL5.community), y también establecer los parámetros generales del trabajo cooperativo:

    • Proyecto privado
    • Cualquiera puede unirse al proyecto
    • Solicitar la participación en el proyecto




    Para trabajar con mayor comodidad, al compilar un proyecto compartido, el archivo ejecutable final (EX5) se copia de forma automática en la carpeta Experts, Indicators o Scripts, dependiendo del tipo de programa. De esta forma, usted podrá iniciar directamente el programa en el terminal, sin copiarlo manualmente al catálogo necesario.


    Proyectos públicos en MQL5 Storage: participación en los desarrollos

    Como ya hemos mencionado anteriormente, cada proyecto compartido en MQL5 Storage dispone de ajustes de privacidad: el proyecto puede ser privado o estár abierto para otros usuarios. Ahora todos los proyectos en los que se puede participar libremente se representan en la pestaña aparte "Proyectos públicos".

    Cualquier usuario puede encontrar un proyecto interesante y participar en su desarrollo. Basta con pulsar "Unirse", y después recibir el proyecto desde el repositorio.



    Al unirse, el usuario solo adquiere el derecho a ver el proyecto. Para tener derecho a enviar al repositorio sus propios cambios, contacte con el autor del proyecto. Para ver el login del autor, abra las propiedades del proyecto a través del menú contextual.

  2. Añadida la posibilidad de insertar fácilmente diferentes propiedades y recursos en el código del programa. Por ejemplo, usted podrá añadir rápidamente al código un archivo de inclusión. Elija el comando "Insertar — MQH en forma de #incude", y después elija el archivo de inclusión necesario en la ventana que se abrirá. A continuación, al código del programa se le añadirá la directiva #include con la ruta correcta indicada al archivo elegido.




    Con la ayuda de este mismo menú, es posible añadir con facilidad archivos en forma de matriz binaria o de texto al código del programa. Usted podrá, por ejemplo, trasladar las plantillas de los gráficos junto con los expertos/indicadores: incluya su plantilla en el código del programa en forma de matriz, a continuación, con la ayuda de la función FileSave, guárdela en el disco. Después de ello, la plantilla se podrá aplicar al gráfico directamente desde el experto con la ayuda de la función ChartApplyTemplate.
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //--- archivo de la plantilla en forma de matriz binaria
       unsigned char my_template[]=
         {
          0xFF,0xFE,0x3C, ... ,0x00 // la matriz de datos ha sido acortada en el ejemplo
         };
    //--- guardamos y aplicamos la plantilla
       if(FileSave("my_template.tpl",my_template))
         {
          Print("Custom template saved in \\MQL5\\Files");
          if(ChartApplyTemplate(0,"\\Files\\my_template.tpl"))
             Print("Custom template applied to the current chart");
          else
             Print("Failed to apply custom template");
         }
       else
          Print("Failed to save custom template");
      }

  3. Añadida la posibilidad de transformar las líneas entre los formatos ASCII, HEX y Base64. Elija una línea en el código fuente, y a continuación pulse el comando necesario en el menú "Editar — Transformar":




  4. Corregida la búsqueda por archivos sin tener en cuenta el registro.
  5. Corregido el error en el depurador al calcular el valor de una expresión del tipo x.y[0][1].z.
  6. Corregido el desplazamiento por el código con la ayuda de los botones "Adelante" y "Atrás".

MQL5:

  1. Añadido un nuevo servicio online para proteger adicionalmente los programas MQL5: MQL5 Cloud Protector. Se trata de una protección análoga a la usada en la mayor tienda de aplicaciones comerciales, MetaTrader Market, donde los archivos de los productos (EX5) enviados por los vendedores son compilados de manera adicional en código nativo.

    Ahora todos pueden disponer de un nivel de protección como el del Mercado. Basta con ejecutar el comando Servicio — MQL5 Cloud Protector en el MetaEditor. La única diferencia de esta protección con respecto a la del Mercado consiste en que no se vincula a la computadora del usuario. Los archivos protegidos con MQL5 Cloud Protector se pueden iniciar en cualquier computadora, como los archivos EX5 normales.
    El servicio MQL5 Cloud Protector funciona de forma segura. La protección adicional se aplica solo al archivo ya compilado. El código fuente no se transmite a ninguna parte. Primero el program se compila en un archivo EX5 en la compuatadora del usuario, después el archivo compilado se envía al servicio por un canal codificado, es protegido y retorna al usuario.



  2. Añadidas varias funciones para trabajar con instrumentos financieros personalizados.

    Función Acción
    CustomSymbolCreate Crea un símbolo personalizado con el nombre indicado en el grupo indicado
    CustomSymbolDelete Elimina el símbolo personalizado con el nombre indicado
    CustomSymbolSetInteger Establece para el símbolo personalizado el valor de propiedad de tipo de número entero
    CustomSymbolSetDouble Establece para el símbolo personalizado el valor de propiedad de tipo real
    CustomSymbolSetString Establece para el símbolo personalizado el valor de propiedad de tipo string
    CustomSymbolSetMarginRate Establece para el símbolo personalizado los coeficientes del margen de carga dependiendo del tipo y la dirección de la orden
    CustomSymbolSetSessionQuote Establece la hora de comienzo y finalización de la sesión de cotizaciones indicada para los símbolos y el día de la semana indicados
    CustomSymbolSetSessionTrade Establece la hora de comienzo y finalización de la sesión de comercial indicada para los símbolos y el día de la semana indicados
    CustomRatesDelete Elimina todas las barras en el intervalo temporal indicado de la historia de precios del instrumento personalizado
    CustomRatesReplace Sustituye totalmente la historia de precios del instrumento personalizado en el intervalo temporal indicado, con los datos de la matriz del tipo MqlRates
    CustomRatesUpdate Añade a la historia del instrumento personalizado las barras ausentes y sustituye las existentes con datos de la matriz del tipo MqlRates
    CustomTicksAdd Añade a la historia de precios del instrumento personalizado los datos de la matriz del tipo MqlTick. El símbolo personalizado debe ser elegido en la ventana de MarketWatch (Observación del mercado)
    CustomTicksDelete Elimina todos los ticks en el intervalo temporal indicado de la historia de precios del instrumento personalizado
    CustomTicksReplace Sustituye totalmente la historia de precios del instrumento personalizado en el intervalo temporal indicado, con los datos de la matriz del tipo MqlTick

  3. Se han añadido a la Biblioteca Estándar Colecciones de datos genéricas, que contienen clases e interfaces para definir las colecciones basadas en plantillas. Las nuevas colecciones estrictamente tipadas hacen más cómodo el desarrollo de programas y aumentan el rendimiento del trabajo con datos.

    La biblioteca se ubica en el catálogo de trabajo del terminal en la carpeta Include\Generic.

  4. Añadido el soporte de plantillas para los datos del tipo union.
  5. Añadida la propiedad del instrumento comercial SYMBOL_VISIBLE. La llamada de SymbolInfoInteger(symbol, SYMBOL_VISIBLE) retornará false si el símbolo indicado no se ve en la Observación del mercado.
  6. Añadido el evento CHARTEVENT_MOUSE_WHEEL. El evento se llama al girar o pulsar la ruleta del ratón en el gráfico (si se ha establecido para él CHART_EVENT_MOUSE_WHEEL=true).
  7. Añadidas nuevas propiedades del gráfico:

    • CHART_EVENT_MOUSE_WHEEL — activar/desactivar la generación del evento de giro y pulsación de la ruleta del ratón en el gráfico CHARTEVENT_MOUSE_WHEEL. . Valores posibles: 0 y 1.
    • CHART_CROSSHAIR_TOOL — activar/desactivar la posibilidad de pasar el cusor al modo "Cursor en cruz" al pulsar el botón central del ratón. Valores posibles: 0 y 1.
    • CHART_CONTEXT_MENU — activar/desactivar la representación del menú contextual al pulsar el botón derecho del ratón en el gráfico. Valores posibles: 0 y 1.

  8. Ahora, al calcular la escala de la ventana del indicador, no se tienen en cuenta los búferes de dibujado con el estilo DRAW_NONE.
  9. Añadida la generación del evento CHARTEVENT_CHART_CHANGE al indicar la propiedad CHART_SCALEFIX (escala fija) para el gráfico.
  10. Añadida la función ArraySwap, que permite intercambiar rápidamente el contenido de las matrices dinámicas.
    bool  ArraySwap(
       void&  array1[],      // primera matriz
       void&  array2[]       // segunda matriz
       );
    La función adopta matrices dinámicas de idéntico tipo e idénticas dimensiones. Para las matrices multidimensionales, deberá coincidir el número de elementos en todas las dimensiones, excepto la primera.

  11. Añadida la nueva propiedad TERMINAL_RETRANSMISSION — el porcentaje de paquetes de red nuevamente enviados (retransmisiones) en el protocolo TCP/IP para todos los servicios y aplicaciones iniciados en una computadora dada. Incluso en la red más rápida y mejor configurada tienen lugar pérdidas de paquetes y, como consecuencia, no se da la confirmación de la entrega de los paquetes entre el receptor y el emisor. En tales casos, el paquete "perdido" es enviado de nuevo.

    El terminal no calcula este índice, el valor del mismo se solicita una vez por minuto desde el sistema operativo. No es un índice de calidad de la conexión de un terminal concreto a un servidor comercial concreto, puesto que se calcula para toda la actividad de la red, incluyendo la actividad sistémica y la actividad de fondo.

    La propiedad TERMINAL_RETRANSMISSION ha sido añadida a la lista ENUM_TERMINAL_INFO_DOUBLE, para obtenerla, hay que utilizar la función TerminalInfoDouble.
  12. Optimizado el trabajo con la historia comercial.
  13. Signals: Corregida la sustitución del tipo de ejecución de la orden según el resto (filling) al darse el cierre forzoso de las posiciones abiertas según la señal. En los ajustes de copiado de señales se contempla la opción "Stop, si la cuenta está por debajo de XXX USD": si el nivel de equidad en la cuenta cae por debajo de lo especificado, entonces el copiado de señales comerciales se detiene automáticamente, y todas las posiciones se cierran de manera forzosa. Anteriormente, al darse el cierre forzoso de las posiciones, en ciertos casos para las órdenes de cierre no se indicaba correctamente el tipo de relleno. Ahora, el terminal comprueba los tipos de relleno permitidos en los ajustes del símbolo e indica en las órdenes la variante permitida.

Tester

  1. El comportamiento de la función HistoryOrderSelect en el simulador de estrategias se ha adaptado de acuerdo con el terminal de cliente.
  2. El comportamiento de las funciones CopyTicks y CopyTicksRange en el simulador de estrategias se ha adaptado de acuerdo con el terminal de cliente.
  3. Optimizada la representación de los objetos gráficos al realizar la simulación en el modo visual.
  4. Corregida la muestra de los resultados de la simulación de los instrumentos bursátiles (con el modelo bursátil de gestión de riesgos). Ahora en el gráfico se representan solo los recursos (equidad), no se representan el balance y la carga sobre el depósito. El estado comercial de estas cuentas se valora según el nivel de los recursos. En sí, el balance solo muestra el propio dinero en la cuenta y no tiene en cuenta los activos y las obligaciones del tráder. La carga sobre el depósito (margin/equity) no se muestra, ya que el margen en el cálculo bursátil constituye el precio actual del activo/obligación teniendo en cuenta el descuento, y suele cambiar junto con la equidad.

  • Añadida la traducción de la interfaz de usuario al holandés.
  • Actualización de la documentación.