Versión beta de la plataforma MetaTrader 5 build 1625: Instrumentos financieros personalizados

 

Versión beta de la plataforma MetaTrader 5 build 1625: Instrumentos financieros personalizados

El 30 de junio de 2017 se lanzará la versión actualizada de la plataforma MetaTrader 5 en el modo beta. Vamos a actualizar nuestro servidor demo MetaQuotes-Demo, que se encuentra en la dirección access.metatrader5.com:443. Animamos a todos los traders a unirse a la puesta a prueba de la nueva versión de la plataforma, para chequear todas sus posibilidades de manera independiente y ayudar a los desarrolladores a corregir los posibles errores que se vayan localizando.

Para actualizar al nuevo build 1625 de la plataforma MetaTrader 5, basta con conectarse al servidor access.metatrader5.com:443.

Después de finalizar esta etapa de la puesta a prueba de la beta, se lanzará el build final de la nueva plataforma MetaTrader 5.


  1. Terminal: Añadida la posibilidad de crear instrumentos financieros propios. Ahora usted podrá crear cualquier instrumento, establecer los ajustes necesarios para él, importar al mismo sus datos de precio y visualizar gráficos sobre dicho instrumento.

    Crando un símbolo personalizado
    Abra la ventana de gestión de símbolos a través del menú contextual "Observación del mercado" y pulse "Crear un símbolo":



    Hay multitud de parámetros disponibles para el ajuste. Podrá ver la lista de dichos parámetros en la documentación. Usted tendrá la posibilidad de ajustar su propio instrumento: copie los parámetros de cualquier instrumento semejante y después cambie lo que necesite. Para ello, elija el instrumento del que ya disponga en el campo "Copiar desde".
    El nombre del símbolo personalizado no deberá coincidir con los nombres de los símbolos retransmitidos por los brókeres. Si usted se conecta al servidor y en este resulta haber un símbolo que coincide con el símbolo personalizado, el símbolo personalizado será eliminado.
    Aquí mismo están los comandos de importación y exportación de los ajustes. Podrá compartir fácilmente símbolos personalizados o transferirlos entre sus terminales. Los ajustes se exportan a archivos de texto del formato JSON.

    Gestión de los símbolos personalizados
    Todos los símbolos se representan en el grupo aparte Custom. Para modificar o eliminar un símbolo, use el menú contextual en la lista:




    Importando la historia de precios
    Usted podrá importar los datos de precio a un símbolo propio desde cualquier archivo de texto, así como desde los archivos de la historia de MetaTrader 5: HST y HSC. Elija el símbolo y pase a continuación a la pestaña "Barras". Por el momento, no existe soporte para la importación de ticks.



    En el diálogo de importación, indique la ruta al archivo con los datos y establezca la configuración:

    • Separador — elemento separador en un archivo de texto.
    • Omitir columnas y líneas — número de columnas (de izquierda a derecha) y líneas (de arriba a abajo) que se pueden omitir al realizar la importación.
    • Desplazamiento — desplazamiento temporal por horas. Esta opción se usa al importar los datos guardados en otro huso horario.
    • Usar solo las seleccionadas — esta opción permite importar solo las líneas seleccionadas en la ventana de visualización. Las líneas se pueden destacar con la ayuda del ratón, manteniendo las teclas "Ctrl" o "Shift".

    El archivo con las barras debe tener el formato: Fecha Hora Open High Low Close VolumendeTicks Spread. Ejemplo:
    2016.06.27    00:01:00    1.10024    1.10136    1.10024    1.10070    18    54000000    44
    2016.06.27    00:02:00    1.10070    1.10165    1.10070    1.10165    32    55575000    46
    2016.06.27    00:03:00    1.10166    1.10166    1.10136    1.10163    13    13000000    46
    2016.06.27    00:04:00    1.10163    1.10204    1.10155    1.10160    23    51000000    41
    Para su propio símbolo usted podrá usar los datos de cualquier otro instrumento existente. Expórtelos (esta posibilidad se añadió en la anterior versión de la plataforma), y en caso necesario, modifíquelos e impórtelos de vuelta.
    En MetaTrader 5 la historia de precio se guarda en forma de barras de minuto. El resto de los marcos temporales se crea sobre su base. Al realizar la importación, usted podrá usar los datos de marcos temporales mayores, pero tenga en cuenta que los gráficos de los marcos temporales menores, en este caso, tendrán huecos. Por ejemplo, al importar los datos de horas, en el gráfico de minutos usted podrá ver una barra cada hora.
    Los datos de precio de los símbolos de usuario se guardan en el catálogo aparte Custom (fuera de los catálogos de servidores comerciales concretos):
    C:\Users\[windows account]\AppData\Roaming\MetaQuotes\Terminal\[instance id]\bases\Custom

    Usando símbolos propios
    El uso de símbolos propios prácticamente no se diferencia del uso de aquellos que ofrece el bróker. Estos también se muestran en la ventana de "Observación de mercado", es posible abrir gráficos de ellos, y después colocar indicadores y objetos analíticos sobre los mismos. Además, en este caso, no es posible comerciar con los símbolos personalizados.

    Más posibilidades en las siguientes versiones de la plataforma
    El trabajo con los propios instrumentos aún no ha finalizado, en las próximas versiones de la plataforma aparecerán nuevas funciones. Usted podrá importar la historia a los símbolos personalizados directamente desde los expertos, así como retransmitir datos sobre ellos (añadir cotizaciones) en tiempo real.

  2. Terminal: Añadido el filtrado de la banda de transacciones según el volumen.

    Es posible ocultar de la banda las transacciones con un volumen menor al indicado. De esta forma, en la banda permanecerán solo las transacciones importantes, que influyen en el mercado.

    Pulse dos veces sobre la primera línea de la banda de transacciones, indique el volumen mínimo en lotes, y a continuación pulse sobre cualquier otra zona de la pantalla. Las transacciones serán filtradas, y el valor actual del filtro aparecerá en el encabezamiento de la columna de volumen.



    También es posible indicar el volumen mínimo a través del menú contextual de la banda de transacciones.

  3. Terminal: Añadida la posibilidad de vincular la profundidad de mercado al gráfico activo. Cada vez que usted pase a la visualización del gráfico de algún instrumento financiero, en la profundidad de mercado se activará de forma automática exactamente el mismo instrumento. No tendrá que abrir aparte la profundidad de mercado para cada símbolo.




  4. Terminal: Corregida la actualización de los paneles de instrumentos después de ocultar y desplegar la ventana del terminal.
  5. Terminal: Corregida la formación de la historia comercial de las posiciones al cruzarse los tickets de las transacciones y las posiciones.
  6. MQL5: Añadida la posibilidad de perfilado de programas MQL5 sobre la historia de precios. Esto permitirá comprobar rápidamente la productividad de los programas sin tener que esperar nuevos tickets.

    Al perfilar con datos reales, el programa se inicia en el gráfico habitual en el terminal. Muchos programas, en especial los indicadores, ejecutan ciertos cálculos solo con la llegada de un nuevo tick (OnTick, OnCalculate). De esta forma, para valorar la productividad debemos esperar la llegada de nuevos ticks en tiempo real. Al realizar la simulación con datos históricos, usted podrá indicar de inmediato la carga para el programa. El perfilado se inicia en el simulador de estrategias en el modo visual, después usted recibirá inmediatamente multitud de eventos de llegada de un nuevo tick.




  7. MQL5: Añadido el soporte de Unión (union). Se trata de un tipo especial de datos que consta de varias variables que comparten una misma zona de la memoria. Por consiguiente, la unión proporciona la posibilidad de interpretar una misma secuencia de bits con dos (o más) métodos diferentes. La declaración de una unión comienza con la palabre clave union.
    union LongDouble
    {
      long   long_value;
      double double_value;
    };
    A diferencia de la estructura, los diferentes miembros de una unión se relacionan con una misma zona de la memoria. En este ejemplo se ha declarado la unión LongDouble, en la que el valor del tipo long y el valor del tipo double comparten la misma zona de la memoria. Es importante comprender que no es posible hacer que la unión guarde al mismo tiempo valores de tipo entero long y reales double (como sucedía en la estructura), puesto que las variables long_value y double_value se solapan (en la memoria) una sobre otra. Sin embargo, un programa MQL5 puede en cualquier momento procesar la información que se contiene en esta unión como un valor entero (long) o como uno real (double). Por consiguiente, la unión permite obtener dos (o más) variantes de representación de una misma secuencia de datos.

    Al declarar una unión, el compilador delimita automáticamente una parte de la memoria que sea suficiente para guardar en una unión las variables del tipo de volumen más grande. Para acceder a un elemento de la unión, se usa la misma sintaxis que para las estructuras: el operador "punto".
    union LongDouble
    {
      long   long_value;
      double double_value;
    };
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //---
       LongDouble lb;
    //--- obtenemos el número no válido -nan(ind) y lo mostramos
       lb.double_value=MathArcsin(2.0);
       printf("1.  double=%f                integer=%I64X",lb.double_value,lb.long_value);
    //--- valor mayor normalizado (DBL_MAX)
       lb.long_value=0x7FEFFFFFFFFFFFFF;
       printf("2.  double=%.16e  integer=%I64X",lb.double_value,lb.long_value);
    //--- menor positivo normalizado (DBL_MIN)
       lb.long_value=0x0010000000000000;    
       printf("3.  double=%.16e  integer=%.16I64X",lb.double_value,lb.long_value);
      }
    /*  Resultado de la ejecución
        1.  double=-nan(ind)                integer=FFF8000000000000
        2.  double=1.7976931348623157e+308  integer=7FEFFFFFFFFFFFFF
        3.  double=2.2250738585072014e-308  integer=0010000000000000
    */

  8. MQL5: Añadida la generación automática del operador implícito de copiado para los objetos de estructuras y clases. Ahora el compilador crea de forma automática operadores de copadio, lo que permite escribir para los objetos las entradas sencillas del tipo b=a:
    class Foo
      {
       int               value;
    public:
       string Description(void){return IntegerToString(value);};
       //--- constructor por defecto
                         Foo(void){value=-1;};
       //--- constructor con parámetros   
                         Foo(int v){value=v;};
      };
    //+------------------------------------------------------------------+
    //|  estructura que contiene el objeto del tipo Foo                  |
    //+------------------------------------------------------------------+
    struct MyStruct
      {
       string            s;
       Foo               foo;
      };
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //---
       MyStruct a,b;
       Foo an_foo(5);
       a.s="test";
       a.foo=an_foo;
       Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
       Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
    //---
       Print("b=a");
       b=a;
    //---
       Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
       Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
    /*
       Resultado de la ejecución;
       a.s=test a.foo.Description()=5
       b.s= b.foo.Description()=-1
       b=a
       a.s=test a.foo.Description()=5
       b.s=test b.foo.Description()=5
    */
      }
    En el operador implícito se realiza el copiado por miembros de los objetos.

    • Si el miembro es un objeto de otra estructura o clase, se llama al operador de copiado de esta estructura.
    • Si el miembro es una matriz, para copiar se usa la función ArrayCopy.
    • Si el miembro es una matriz de objeto, antes del copiado, la matriz receptora aumenta hasta el tamaño necesario a través de ArrayResize.
    • Si el miembro es un puntero a un objeto, se copia el propio puntero, y no el objeto al que señala.

    En caso necesario, podemos redefinir el comportamiento, y en lugar de un operador implícito de copiado, crear nuestra propia variedad con la ayuda de la sobrecarga.

  9. MQL5: Optimizada la utilización de la memoria al recurrir a la historia de precios desde los expertos usando la función Copy* y desde el diálogo "Símbolos" en el terminal (solicitud de barras y ticks). Al trabajar con grandes volúmenes de datos, el uso de la memoria se reducirá varias veces.

    Al darse una solicitud, se recurre a la caché de los datos de precio en el disco, además, la propia caché se termina de construir: se le añaden los datos que faltaban desde el servidor. Antes desde el disco se solicitaba toda la caché del símbolo, ahora se solicita solo la cantidad de datos establecida por el usuario + 512 barras.

  10. MQL5: Ahora la función TimeToStruct retorna un valor booleano, permitiendo comprobar el éxito de la conversión de datetime a MqlDateTime.
  11. MQL5: Añadida la prohibición del uso de las funciones FileWriteStruct y FileReadStruct para las estructuras que contengan líneas, matrices dinámicas, objetos y punteros.
  12. MQL5: Añadidos los códigos de respuesta:

    • TRADE_RETCODE_REJECT_CANCEL la solicitud de activación de una orden pendiente ha sido rechezada, y la propia orden ha sido cancelada
    • TRADE_RETCODE_LONG_ONLY — la solicitud ha sido rechazada, puesto que en el símbolo se ha establecido la norma "Solo se permiten posiciones largas"
    • TRADE_RETCODE_SHORT_ONLY — la solicitud ha sido rechazada, puesto que en el símbolo se ha establecido la norma "Solo se permiten posiciones cortas"
    • TRADE_RETCODE_CLOSE_ONLY — la solicitud ha sido rechazada, puesto que en el símbolo se ha establecido la norma "Solo se permite cerrar las posiciones existentes"

  13. MQL5: Añadido un nuevo valor, devuelto por la función SymbolInfoInteger con el parámetro SYMBOL_ORDER_MODE. SYMBOL_ORDER_CLOSEBY — bandera sobre la posibilidad de colocar órdenes de cierre de posición con una opuesta (Close By).
  14. MQL5: A la enumeración ENUM_SYMBOL_INFO_INTEGER se ha añadido la propiedad boleana SYMBOL_CUSTOM. Permite saber si el símbolo es un símbolo personalizado. Para obtener la propiedad, use la función SymbolInfoInteger.
  15. MQL5: Ahora es posible averiguar el motivo de la creación de una orden, transacción y posición.

    Nuevas propiedades


    Motivos de la creación de una orden, transacción y posición
    Para averiguar los motivos de la creación de las operaciones comerciales se han añadido tres enumeraciones:

    ENUM_POSITION_REASON ENUM_DEAL_REASON ENUM_ORDER_REASON Descripción de las causas
    POSITION_REASON_CLIENT DEAL_REASON_CLIENT ORDER_REASON_CLIENT La operación se ha ejecutado como resultado de la activación de una orden colocada desde el terminal de escritorio
    POSITION_REASON_MOBILE DEAL_REASON_MOBILE ORDER_REASON_MOBILE La operación se ha ejecutado como resultado de una orden colocada desde el terminal móvil
    POSITION_REASON_WEB DEAL_REASON_WEB ORDER_REASON_WEB La operación se ha ejecutado como resultado de la activación de una orden colocada desde el terminal web
    POSITION_REASON_EXPERT DEAL_REASON_EXPERT ORDER_REASON_EXPERT La operación se ha ejecutado como resultado de la activación de una orden colocada desde un programa MQL5: un asesor o script
    - DEAL_REASON_SL ORDER_REASON_SL La operación se ha ejecutado como resultado de la activación de un Stop Loss
    - DEAL_REASON_TP ORDER_REASON_TP La operación se ha ejecutado como resultado de la activación de un Take Profit
    - DEAL_REASON_SO ORDER_REASON_SO La operación se ha ejecutado como resultado del evento Stop Out
    - DEAL_REASON_ROLLOVER - La operación se ha ejecutado por la reapertura de la posición (evento ROLLOVER)
    - DEAL_REASON_VMARGIN - La operación se ha ejecutado después de abonarse/retirarse el margen de variación
    - DEAL_REASON_SPLIT - La operación se ha ejecutado a causa del fraccionamiento (reducción del precio) de una acción u otro activo que tenía una posición abierta en el momento del anuncio del fraccionamiento

  16. MQL5: Optimizada la sincronización y el acceso a la historia de ticks.
  17. MQL5: Corregido el retorno de ticks a la matriz estática en la función CopyTicksRange. En este caso, antes simepre se retornaban 0 ticks.
  18. MQL5: Introducidas diferentes correcciones en la biblioteca de lógica difusa Fuzzy.
  19. Signals: Corregida la apertura de una señal desde la página web cuando no hay conexión con la cuenta comercial.
  20. Tester: Se ha optimizado y acelerado considerablemente el funcionamiento de la historia de órdenes y transacciones. Al trabajar con un gran volumen de datos (decenas de miles de entradas en la historia y más), la velocidad del funcionamiento aumenta varias veces.
  21. Tester: Corregido el cálculo del tiempo de mantenimiento de la posición en el informe de simulación.
  22. MetaEditor: En el depurador se ha corregido la representación del contenido de las matrices-miembros estáticas de la clase.
  23. MetaEditor: Añadida la lista de puntos de interrupción en el programa depurado. Para pasar a ella, use el menú contextual de la pestaña "Depuración":



    Para pasar a cualquiera de los puntos, pulse dos veces sobre él.

  24. Actualización de la documentación.

La actualización estará disponible a través del sistema LiveUpdate.

 

Gran actualización! ;)