En esta serie de artículos aprenderemos a programar para MetaTrader4, una de las plataformas más extendidas y con más posibilidades. Para ello explicaremos de forma sencilla lo secretos del lenguaje de programación MQL4.
Cuando leemos un estudio o nos cuentan la bonanza de una estrategia, ¿llegamos a realizar un estudio profundo? o realizamos un acto de fe y nos lanzamos a operar. Es muy importante antes de poner en práctica una estrategia de trading realizar un estudio profundo, sin creernos nada sin antes probarlo. Para el estudio de estrategias o teorías que vemos en los distintos medios uno de los mejores lenguajes por lo extendido, rápido de ejecución y técnico es el mql4 diseñado para la plataforma metatrader.
Cientos de miles de traders usan el terminal MetaTrader 4. Esta plataforma hace uso del lenguaje de programación MQL4 y gracias a este lenguaje muchos traders pueden acceder a un nuevo nivel de operativa, la automatizada. Se pueden poner en práctica ideas con un programa, crear un indicador personal, una script para realizar una operación, o crear un Asesor Experto ó robot. Un Asesor Experto (AE) puede trabajar las 24 horas de todos los días de la semana, sin intervención, hacer un seguimiento del precio, enviar mensajes electrónicos, SMS´s a su teléfono móvil…
Cualquier idea que podamos describir en un lenguaje algorítmico como un cruce medias móviles, un análisis fractal, una red neuronal, patrones, figuras geométricas… podrá ser codificada en una aplicación, probada con datos históricos y luego puesta en práctica en el mercado.
En los próximos artículos se intentará ir completando un manual para crear su propios Asesores Expertos, scripts e indicadores. El manual está destinado a un gran número de lectores sin experiencia en programación que deseen desarrollar aplicaciones para la plataforma MetaTrader 4.
Las características técnicas fundamentales para la operativa utilizando la plataforma MetaTrader es que la gestión de todas las acciones se producen en el ordenador del usuario y luego son enviadas al servidor. Ninguno de los programas (EA, script o indicadores) se instala en el servidor. El servidor sólo ejecuta las órdenes enviadas desde el ordenador del usuario.
En la mayoría de los casos, un sistema automático le permite a un trader un trabajo más fácil, eliminando la necesidad de un constante seguimiento de la situación del mercado y tener que estar sentado ante un ordenador durante un largo periodo de tiempo.
También puede ayudar a aliviar la tensión nerviosa y reducir el número de errores que aparecen en períodos de extrema tensión emocional. Pero lo principal es, que el uso de un sistema automático como método permite desarrollar las propias ideas y probarlas con datos históricos, seleccionando los parámetros óptimos para la aplicación de estas ideas y, por último, permite aplicar y probar las ideas sobre las estrategias comerciales.
Primera Parte. Fundamentos del lenguaje MQL4
Conceptos básicos. Son descritos términos tales como "tick": un cambio de cotización del precio, "control" en los algoritmos, "comentarios" que describen los programas. El principal acontecimiento de las cotizaciones en los mercados financieros es el cambio de precio. Esta es la razón por la que el tick es un acontecimiento importante que hace que los mecanismos básicos de los programas de MQL4 se ejecutan. ¿Qué hacer cuando ocurre un nuevo tick? ¿Qué medidas tomar?. La mayoría de los programas realizan toda su ejecución del código cada nuevo tick producido o enviado desde el bróker. Este es el control que mueve la vanguardia aquí. Pero no se olvide de comentar su código, es fundamental para explicar el código y poder seguir la lógica que encierra.
Constantes y Variables. Como el término sugiere, una constante es algo continuo, un valor fijo. A diferencia de la constante, una variable es un objeto del código de programación que puede modificar su contenido. Es imposible escribir un programa sin usar objetos inalterables (constantes) y/o objetos que puedan ser modificados durante la ejecución del programa (variables).
Tipos de datos. Ciertos tipos de datos se utilizan en cualquier lenguaje de programación. El tipo de una variable se elige de acuerdo a su finalidad.
¿Cómo podemos declarar una variable? , ¿cómo podemos inicializarla? Una elección errónea del tipo de una variable puede frenar el programa o incluso dar lugar a un mal funcionamiento. En metatrader existen los siguientes tipos de datos:
int: para declarar variables de tipo entero.
double: para declarar números reales.
bool: para declarar valores lógicos.
string: valores de tipo cadena de caracteres.
color: valores de tipo color.
datetime: valores de fecha y hora.
Ejemplos declarativos:
int Max = 125; (declaramos la variable Max a 125)
double Min =125,45; (declaramos la variable Min a 125,45)
bool Logico = false; (declaramos la variable a falso)
string texto = "Historial";
color Signal_venta = Red; (declaramos la variable a rojo)
datetime fecha = D ‘20/04/2011 17:30:40';
La Declaración de Variables es lo primero que se debe hacer con cualquier variable dentro de un programa. En la declaración de una variable siempre ha de especificarse su tipo. La inicialización de Variables significa la asignación de un valor acorde con su tipo y que se efectúa en su declaración.
Todas las variables pueden ser inicializadas. Si no hay valor inicial que se establezca explícitamente, la variable se inicializa a cero (0), o si la variable es de tipo string, esta se inicializa como una cadena de caracteres vacía. En MQL4 se acepta que se especifiquen los tipos de variables explícitamente en su declaración.
El tipo de una variable solo declara en la primera mención del nombre de esta variable. Cuando se menciona el resto de las veces su tipo ya no se vuelve especificar más. En el curso de la ejecución del programa, el valor de la variable puede cambiar , pero su tipo y nombre siguen siendo los mismos. El tipo de una variable puede ser declarada en líneas simples o en los operadores.
Operadores. Los operadores pueden ser simples y complejos. Una acción necesaria no siempre pueden ser ejecutadas por un operador simple. Si es necesario que un grupo de operadores se ejecute como un gran operador, este grupo debe incluirse como un operador compuesto. Serán dados los requerimientos necesarios y ejemplos específicos de utilización de los operadores.
Los operadores simples de MQL4 terminan con el carácter ";" (punto y coma). El uso de este separador, es para que el PC pueda detectar cuando un operador termina y otro comienza. El carácter ";" (punto y coma) es tan necesario en un programa como carácter "." (punto) lo es en un texto normal para separar las frases. Un operador puede tener varias líneas. Se pueden colocar varios operadores en una línea.
El operador compuesto consta de varios operadores simples separados por el carácter ";" y se vinculan entre llaves. Con el fin de poder utilizar varios operadores donde se espera que haya solo uno, los programadores utilizar un operador compuesto (también lo llaman "bloque" o "bloque de código"). El conjunto de operadores simples estan ubicados en un recinto separado por llaves. La presencia de una llave de cierre marca el final de un operador compuesto.
Los operadores se ejecutan en el orden, en el que se aparecen en el programa. La dirección de los operadores de ejecución va de izquierda a derecha y de arriba a abajo. Esto significa que tanto los operadores simples como los compuestos y se ejecutan uno a uno (como en las líneas de los poemas: en primer lugar se lee la línea superior, después la siguiente inferior, después la siguiente y así sucesivamente). Si hay varios operadores en una línea, deben ser ejecutadas consecutivamente, uno después de otro, de izquierda a derecha, a continuación, los agentes se ejecutan en la línea inferior más cercana en el mismo orden.
Operaciones y expresiones. Las operaciones se hacen sobre operandos. ¿Qué tipo de operaciones hay? ¿Cuáles son las características especiales de las operaciones sobre enteros? ¿Por qué es importante recordar los diferentes tipos de datos precedentes? .Sin conocer las características de algunas operaciones, pueden aparecer sutiles errores.
Cualquier operador de asignación da literalmente a la máquina la siguiente orden:
Calcula el valor de la expresión que se encuentra a la derecha de la igualdad y asigna el valor obtenido a la variable situada a la izquierda del signo de igualdad. Es decir, en el lado izquierdo de la igualdad solo puede haber una variable y en el lado derecho una expresión con cualquier grado de complejidad. Por esta razón, solo una variable puede estar situada a la izquierda del signo de igualdad de un operador de asignación.
Tipos de de operaciones.
Aritméticas: + (suma), – (resta), * (producto) , / (división), % (resto de la división), ++ incrementa 1 el valor de la variable, — decrementa 1 el valor de la variable.
Asignación: = (asignamos un valor a una variable)
Relacionales: == (es cierto si es igual), != (es cierto si no es igual), < (es cierto si es menor), > (es cierto si es mayor), <= (es cierto si es menor o igual), >= (es cierto si es mayor o igual).
Lógicas: ! (Negación lógica), || ( O, disyunción ), && ( Y, conjunción).
El valor de una expresión se calcula de acuerdo a las prioridades de las operaciones aritméticas y de izquierda a derecha, cada resultado intermedio se calculará de acuerdo a las normas de prioridad, por lo que el orden de las operaciones en un programa es similar a la de matemáticas.
Ejemplo:
int A = 3; // Valor de tipo entero
int B = 5; // Valor de tipo entero
int C = 6; // Valor de tipo entero
int Res_1 = A/B*C; // Result 0 (cero)
int Res_2 = A*C/B; // Resultado 3 (tres).