Brokers

MQL4 y MQL5: Diferencias a primera vista

MQL5 es el lenguaje de nueva generación para la nueva plataforma de Metaquotes Software Corp., Metatrader 5. Los desarrolladores de la plataforma de trading más popular en forex han pensado en mantener la máxima compatibilidad entre mql4 y mql5 pero aún así los indicadores, expert advisors y scripts escritos en mql4 tendrán que migrar al nuevo lenguaje mql5 o no funcionarán debido a algunas diferencias importantes entre ambos. En este artículo dejaré algunas de las diferencias más destacadas y generales a tener en cuenta cuándo te prepares a realizar la actualización de tus programas a mql5.

Las diferencias que a primera vista aparecen en el código mql5 son:

  • En mql5 no hay que declarar las funciones start(), init() y deinit() (la función start() era imprescindible para en mql4).
  • La cantidad de buffers en los indicadores no están limitados (en mql4 la cantidad máxima de buffers para un indicador era de 8).
  • Mql5 ofrece conversión automática entre tipos implícitos de variables, incluso de un string en numérico.
  • Las variables locales no son inicializadas excepto las tipo string.
  • Arrays locales se borran automáticamente de la caché tras su uso.
  • Prioridad de operadores como en C++.
  • Comprobación de condiciones lógicas más rápidas y cortas.

Funciones speciales qe reemplazan a init,start y deinit

En mql4 contenía 3 funciones que podían ser usandas indistintamente por un script, un indicador o un Expert Advisor. En mql5 hay muchas más funciones y no todas se pueden usar indistintamente en cualquier tipo de programa.

La función init() de mql4 tiene su análogo en mql5 con la función OnInit(), la función start() tiene su análogo en OnStart() y deinit() en OnDeinit().

La funciones OnInit y OnDeInit tienen las mismas atribuciones que init y deinit en mql4, en ellas se designa el código que deberá ser ejecutado al inicializar o destener un programa escrito en mql5. Por ello al pasar estas funciones de mql4 a mql5 simplemente puedes renombralas o llamar a las antigüas funciones de la siguiente forma:

void OnInit() {
 init();
}
void OnDeinit()
 deinit();
}

No se puede hacer los mismo para la función start() pues en mql5 no hay una función OnStart() que se pueda usar en todos los tipos de programas mql5 sino que hay varias funciones dependiendo del tipo, así por ejemplo OnStart() es análoga a start() en los scripts, OnCalculate() es la función principal en indicadores que podría reemplezar a start() y OnTick() lo es para los expert advisors. Respecto a lo mencionado en este párrafo respecto a la función OnStart() he de mencionar que si un script no contine la función OnStart() el código será compilado como un Expert Advisor. Del mismo modo si un indicador no contiene OnCalculate() su compilación como indicador es imposible.

Variables predefinidas en MQL5

En MQL5 se han peridido variables peredefinidas como Bid, ask y Bars (estos se deberán obtener a través de las correpondientes funciones predefinidas) y otras como Point y Digits tienen una expresión un poco diferente. Las variables predefinidas en MQL5 son:

  • _Digits: devuelve el número dei decimales disponible en el precio de contización del simbolo del gráfico actual.
  • _Point: almacena el tamaño del pip del del simbolo en el gráfico actual.
  • _LastError: contiene el código del último error producido durante la ejecución del programa mql5. Es la única variable predefinida que puede ser cambiada a través de la programación en mql5 ya que puede ser puesta a cero usando ResetLastError().
  • _Period: almacena el periodo actual del gráfico en el que se está ejecutando el programa.
  • _Symbol: contiene el nombre del símbolo del gráfico actual.
  • _StopFlag: esta variable contiene el punto de finalización en la ejecución de un programa mql5. Cuando Metatrder 5 intenta parar un programa mql5 se cambia _StopFlag al valor true.
  • _UninitReason: contiene el código del motivo de parada en la ejecución de un programa mql5.

Variables exteranas

En MQL4 las variables externas se declaran en la parte inicial del programa mediante la denominación "extern". En MQL5 esto ha cambiado y las variables externas se declaran también al inicio del programa pero con la denominación "input".

Acceso a Timeseries

Un cambio importante en mql5 es que no hay timeseries predefinidos como Open, High, Low, Close, Volume y Time. Para acceder a estos datos es necesario establecer las correspondientes funciones descritas en Access to Timeseries and Indicator Data.

Expert Advisors

En mql4 era obligatorio parq aun EA contener la función start() que se ejecutaba a cada tick recibido en el terminal Metatrader. En mql5 se han introducido nuevos eventos para llamar a la ejecución de un determinado código. De esta forma se puede usar en un EA:

  • OnTick: análoga a la función start de MQL4, se ejecuta cada vez que se recibe un nuevo tick.
  • OnTimer: se ejecuta en base a un "cronómetro" cada cierto cierto tiempo establecido a través de EventSetTimer() que habrá que declarar previamente por ejemplo en OnInit().
  • OnChartEvent: se genera a través de eventos ocurridos cuando el usuario interactua con el terminal como pulsación de teclas, movimientos y clics en el ratón, movimientos de objetos en el gráfico con el ratón o creación/borrado de objetos. También se ejecutará OnChartEvent a través de su llamada en EventChartCustom(), función que será procesada por OnChartEvent.
  • OnBookEvent: no he sido capaz de entender que es este evento, seguiré estudiando para acutalizar este dato.
  • OnTrade: evento generado tras realizarse una operación entre el terminal y el servidor (por ejemplo envío, modificación o cancelación de una orden).
  • OnTester: evento generado cuando se lega al final de la prueba de un EA en el estrategy tester.
  • Recuerda que OnCalculate es sólo para indicadores y OnStart sólo para scripts.

Indicadores Personalizados

La principal novedad en los indicadores en MQL5 es que, a diferencia de MQL4, el número de buffers no está limitado. Esta característica va a aumentar enormemente las posibilidades para los programadores, si bien a medida que aumenta el uso de buffers aumenta la memoria y capacidad del PC necesaria para hacer funcionar el programa.

Otra diferencia a destacar es el aumento de estilos disponibles para la visualización del indicador en la pantalla. Mientras MQL4 ofrecía 6 tipos, MQL5 ofrece hasta 18. Esto se une al gran cambio que ha dado respecto a la representación gráfica de los indicadores y objetos.

También cambia la dirección de indexación de los elementos del buffer del indicador. Debido a que el buffer va a tener el comportamiento de una variable tipo array, nos iremos acercando en el tiempo a medida que aumenta la posición del elmento indexado. Por ejemplo en MQL4 la posición cero devolvía el valor actual del indicador mientras que en MQL5  la posición cero será el valor del primer cálculo realizado, el dato más antigüo. En MQL5, por tanto, se deberá especificar el tipo de datos a guardar en un array y enlazar este array a un determinado buffer y utilizar el acceso a timeseries descrito unos cuántos párrafos más arriba.

Todos estos cambios hacen que el algoritmo de cálculo de los indicdores en MQL5 tenga que ser recostruído casi en su totalidad si provienen de un programa escrito en MQL4.

Conclusión

En mi opinión el lenguaje ha mejorado muchísimo y van aumentar enormemente las posibilidades de los indicadores, Experts Adviors y scripts para Metatrader 5 respecto a Metatrader 4 aunque para los usuarios en general sin muchos o ningún conocimiento en programación va a ser mucho difícil manejarse con el nuevo lenguaje, MQL5 es más sofisticado, más potente y, por tanto, más complicado.

 

Fuentes: MQL5 Reference

Comentarios

No hay comentarios para este listado.

Asignar una puntuación (mienstras más alta mejor es)
Valoración del artículo
Comentarios*

    Por favor introduzca el código de seguridad.