Llega el nuevo MetaTrader 5 y MQL5

Yuriy Zaytsev | 12 diciembre, 2013

Voy a ofrecer solamente una breve descripción de algunos momentos.


Fig. 1. No es Photoshop -es MQL5.

Lo que más nos interesaba a mí, y a otros, en MQL5 y MT5 es su implementación a un nivel avanzado.

El cambio fundamental en MQL5 es el aspecto de la programación orientada a objetos (POO). No voy a profundizar en la POO; lo que pasa es que los programadores avanzados consiguen más posibilidades. Para aquellos que les gusta MQL4 y no saben nada sobre POO, los desarrolladores dejaron la posibilidad de escribir en MQL5 mediante el estilo de MQL4 y sin programación orientada a objetos. La diferencia está en la funcionalidad que debe aprenderse otra vez.

Tomemos un ejemplo sencillo: ya no existen las variables Ask y Bid. Para obtener los valores de Bid, se debe llamar a la siguiente función:

SymbolInfoDouble(Symbol(),SYMBOL_BID);

Low[0] o iLow ( Symbol(), PERIOD_D1, 0 ) no se usan con frecuencia, pero se pueden reconstruir fácilmente. Las nuevas funciones que trabajan con datos del historial, ofrecen la posibilidad de leer en la memoria los datos del historial, desde un punto hasta el otro, desde una barra hasta otra barra o desde cierto instante hasta otro instante. Se carga en la memoria una primera lectura de unas series de datos de todo el rango visible. Que lo necesites o no, pero hubo una lectura; y si necesitas leer M1, hubo una lectura desde 1999 (en el caso de que el historial esté disponible) hasta la fecha, hora y minuto actuales.

Ahora, se lee sólo el intervalo necesario, lo que permite un ahorro considerable de tiempo y memoria.

MqlRates rates_arrayG[];
Int Bar=30; // read only 30 bars stating from the zero one
iCopBar=CopyRates(Symbol(),PERIOD_M1,0,Bar,rates_arrayG);

Esta función permite ahorrar tiempo y memoria.

Este cambio de funcionalidad no tiene que asustarte. Sólo necesitamos tiempo para aprender nuevas funciones análogas.

Algunas mejoras funcionales que esperaba de MQL:

Comentemos un poco estas funciones.

Se llama a la función OnTimer() cuando el temporizador está inicializado con antelación en la función predefinida OnInit (procesador de inicialización de eventos del Asesor Experto).

Ejemplo:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetTimer(1); //each second we'll refer to OnTimer()
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit()
  {
   EventKillTimer(); // canceling of timer reference must be called at exit
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   MqlDateTime str1;
   TimeGMT(str1); // new function to get GMT time
   Comment(str1.hour
           ,str1.min
           ,str1.sec
           ,str1.day
           ,str1.mon
           ,str1.year
           ,str1.day_of_year
           ,OrdersTotal()
           ,PositionsTotal()
           );
  }

Por lo tanto, puedes conseguir el control no sólo del tick de llegada, como antes, sino también de un temporizador que te permite escribir programas que trabajan en tiempo real. Con esta característica, se pueden crear sistemas más completos.

Me gustó la función OnTrade(). La llamada a esta función se realiza al desencadenarse cualquiera de los siguientes eventos de trading: colocar una orden, activación de StopLoss o TakeProfit, cambio en los niveles de StopLoss o TakeProfit, o colocar/eliminar una orden pendiente.

Supervisar los eventos relacionados con las operaciones de trading es mucho más sencillo ahora. Ya no hacen falta los bucles de comprobación del estado de las ordenes en los ticks o barras. Estos bucles se utilizan en MQL4, lo que reduce considerablemente el rendimiento del programa, muy importante en la optimización.

Comentemos la función OnChartEvent(). La llamada de la función se realiza en varios eventos. No he conseguido probarlos todos, pero la lista es impresionante:

La posibilidad de gestionar el trading y los gráficos a un nuevo nivel funcional -es lo que prometieron los desarrolladores.

Han aparecido nuevos objetos gráficos, botones y campos de entrada. La gestión de los gráficos se ha vuelto increíble, se puede incluso insertar imágenes desde los archivos -esta opción ofrece muchas posibilidades a quienes les gustan los diseños especiales. Esto no es Photoshop, es el resultado de las posibilidades de MQL5 y MetaTrader 5. Con las nuevas características puedes crear tus propios botones y añadir tus propios campos de entrada, por ejemplo, un botón para cerrar todas las ordenes abiertas, o un botón par Comprar y Vender rápidamente con unos parámetros predefinidos Stop y Take.


Fig. 2. Los objetos gráficos permiten crear un panel informativo.

Fig. 2. Los objetos gráficos permiten crear un panel informativo

Hay una cosa negativa: no se pueden crear objetos a partir de los indicadores. Esto se hizo aposta para acelerar el rendimiento de los indicadores. La buena noticia es que son conscientes de ello, y probablemente, van a implementar la posibilidad de iniciar varios Asesores Expertos en un solo gráfico. Por lo tanto, seremos capaces de crear indicadores de Asesores Expertos con objetos y sin trading. Se pueden crear dichos indicadores ahora -funcionarán como indicadores. Asimismo, se puede resolver la tarea empezando un Asesor Experto de trading en un gráfico y un Asesor Experto creando objetos en otro, y luego implementar el intercambio entre ellos.

Por ejemplo, he conseguido migrar mi indicador de breakthrough de MQL4 a MQL5 en unas cuantas horas. He dedicado casi todo el tiempo al aprendizaje de la función y a la depuración. En MQL5, el código es más corto.

En cuanto al terminal en sí, me ha impresionado el número de períodos de tiempo. Me parece hasta excesivo. Sin embargo, la enorme cantidad de períodos de tiempo por minutos puede resultar útil para algunos traders. Pues ahora, falta un sólo paso para la creación de un período de tiempo configurado libremente. Ahora, todos los datos se almacenan únicamente en períodos de tiempo por minutos, con lo cual no hay problemas con la sincronización de los diferentes períodos -se trata de una solución tecnológica importante.

En el catalogo HISTORY ya no hay archivos para diferentes períodos de tiempo.



Fig. 3. Todo el historial se almacena en un único archivo.

Otra grata novedad es que ahora podemos limpiar los registros.


Fig. 4. El uso de una tecla para limpiar el registro del Asesor Experto, borra todos los mensajes innecesarios

Esta es sólo una breve reseña de MetaTrader 5. No puedo describir todas las nuevas funciones del sistema en tan poco tiempo; las pruebas empezaron el 09/09/2009. Esta es una fecha simbólica, y estoy seguro de que será un número afortunado. Han pasado pocos días desde que tengo la versión beta del terminal MetaTrader 5 y MQL5. No he conseguido probar todas sus funciones, pero ya estoy impresionado.

Los magos de MetaQuotes han creado un producto increíble. Soy un desarrollador con 25 años de experiencia, he sido testigo del inicio de muchos proyectos y lo puedo afirmar con toda seguridad!

Saludos cordiales,
Yuriy Zaytsev

Skype: yurazyuraz
yzh@mail.ru