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.
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:
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):
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.
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.
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.
Terminal: Corregida la actualización de los paneles de instrumentos después de ocultar y desplegar la ventana del terminal.
Terminal: Corregida la formación de la historia comercial de las posiciones al cruzarse los tickets de las transacciones y las posiciones.
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.
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 |//+------------------------------------------------------------------+voidOnStart()
{
//---
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
*/
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){returnIntegerToString(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 |//+------------------------------------------------------------------+voidOnStart()
{
//---
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.
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.
MQL5: Ahora la función TimeToStruct retorna un valor booleano, permitiendo comprobar el éxito de la conversión de datetime a MqlDateTime.
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.
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"
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).
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.
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
MQL5: Optimizada la sincronización y el acceso a la historia de ticks.
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.
Signals: Corregida la apertura de una señal desde la página web cuando no hay conexión con la cuenta comercial.
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.
Tester: Corregido el cálculo del tiempo de mantenimiento de la posición en el informe de simulación.
MetaEditor: En el depurador se ha corregido la representación del contenido de las matrices-miembros estáticas de la clase.
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.
Actualización de la documentación.
La actualización estará disponible a través del sistema LiveUpdate.
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
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.
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".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:El archivo con las barras debe tener el formato: Fecha Hora Open High Low Close VolumendeTicks Spread. Ejemplo:
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
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.
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.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.
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 */En el operador implícito se realiza el copiado por miembros de los objetos.
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.
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.
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:

Para pasar a cualquiera de los puntos, pulse dos veces sobre él.La actualización estará disponible a través del sistema LiveUpdate.