Retomamos la serie sobre programación en MQL4. En esta tercera entrega pasamos a ver las principales funciones matemáticas de que disponemos en este lenguaje, así como algunas funciones adicionales para mostrar información en pantalla.
FUNCIONES MATEMÁTICAS
MathAbs (Valor Absoluto)
Esquema: double MathAbs(double value)
Ejemplo:
int a=-10;
a=MathAbs(a); // ahora a vale 10
MathCeil (Redondeo por exceso)
Esquema: double MathCeil(double x)
Ejemplo:
double a;
a=MathCeil(1.001); // dado que se redondea por exceso, a valdrá 2.0
MathFloor (Redondeo por defecto)
Esquema: double MathFloor(double x)
Ejemplo:
double a;
a=MathFloor(1.999); // dado que se redondea por defecto, a valdrá 1.0
MathRound (Redondeo normal: si la parte decimal es superior a 0.5, se redondea por exceso, en caso contrario por defecto)
Esquema: double MathRound(double x)
Ejemplo:
double a;
a=MathFloor(1.1); // al ser 0.1 menor que 0.5, a valdrá 1.0
double b;
b=MathFloor(1.8); // al ser 0.8 mayor que 0.5, a valdrá 2.0
MathMax (Máximo de una serie)
Esquema: double MathMax(double valor1, double valor2)
Ejemplo:
double a;
a=MathMax(50.0,1.0); // a toma el valor 50.0
MathMin (Mínimo de una serie)
Esquema: double MathMin(double valor1, double valor2)
Ejemplo:
double a;
a=MathMin(10.0,12.0); // a toma el valor 10.0
MathPow (Potencia de un número)
Esquema: double MathPow(double base, double exponente)
Ejemplo:
double a;
a=MathPow(5.0,2.0); // a toma el valor 25, es decir, 5 elevado a 2
MathSqrt (Raíz cuadrada de un número)
Esquema: double MathSqrt(double x)
Ejemplo:
double a;
a=MathSqrt(9.0); // a es igual a 3, raíz cuadrada de 9
MathLog (Logaritmo neperiano de un número)
Esquema: double MathLog(double x)
Ejemplo:
double a;
a=MathLog(10.0); // El valor de a es 2.30258509
MathExp (Potencia del número e)
Esquema: double MathExp(double d)
Ejemplo:
double a;
a=MathExp(1); // El valor de a es 2.7182818
MathMod (Resto de una división)
Esquema: double MathMod(double Numerador, double Denominador)
Ejemplo:
double a;
a=MathMod(5,2); // Si dividimos 5 entre 2, el resto que queda es a=1.0
MathRand (Generación de números aleatorios)
Esquema: int MathRand() (esta función no tiene argumentos)
Ejemplo: si bien por defecto utiliza el rango de enteros comprendidos entre 0 y 32767, podemos fijar el intervalo en el que queremos obtener los números de la siguiente forma:
MathRand()%6 // Devuelve enteros aleatoriamente entre 0 (valor 1) y 5 (valor 6).
MathRand()%6+5 // Devuelve enteros aleatoriamente entre 5 (valor 6) y 10 (valor 11)
(MathRand()%11+10)*(-1) // Obtenemos enteros aleatorios entre -10 y -20
(MathRand()%1001/1000.0) // Obtenemos valores entre 0 y 1 con tres decimales
MathSrand (Generación de números enteros aleatorios iniciando la secuencia en un valor determinado o semilla)
Esquema: void MathSrand(int semilla)
Ejemplo: Esta función puede combinarse de forma muy efectiva con la función TimeLocal, que devuelve el número de segundos transcurridos desde el 1 de Enero de 1970 tal que:
MathSrand(TimeLocal());
Con ello, conseguimos dar un valor único a la semilla de partida.
Funciones Trigonométricas
En MQL tenemos disponibles las funciones de seno, coseno y tangente así como sus inversas, esto es, arcoseno, arcocoseno y arcotangente. El esquema de utilización para cada una de ellas es, respectivamente:
double MathSin(double x)
double MathCos(double x)
double MathTan(double x)
double MathArcsin(double x)
double MathArccos(double x)
double MathArctan(double x)
Todas ellas funcionan en base a radianes por lo que conviene convertir cualquier número en grados a radianes antes de introducirlo en estas funciones, de la forma:
Radianes = (Grados * Pi)/180
Suele ser conveniente declarar el número Pi como una variable al comienzo de cualquier código con estas funciones. Para ello escribiremos:
#define PI 3.1415926535897
OTRAS FUNCIONES PARA MOSTRAR MENSAJES
Hasta ahora sólo habíamos visto la función MessageBox para mostrar información en pantalla. Veamos algunas funciones más.
Alert (Emitir una alerta)
Esquema: void Alert(…)
Ejemplo:
Alert(“Signal Type:”+signaltype);
Recordemos que el sonido de las alertas puede configurarse desde el menú Tools->Options dentro de la pestaña Events.
Comment (Muestra un mensaje en la esquina superior izquierda del gráfico)
Esquema: void Comment(…)
Ejemplo: si escribimos por ejemplo:
Comment(“Recuerda que tiene soporte en 1.5300”);
Al ejecutar el código que contiene esta instrucción, nos aparecerá ese comentario en la parte superior izquierda del gráfico.
Print (Permite mostrar mensajes en el registro de un Expert Advisor)
Esquema: void Print( …)
Ejemplo: si queremos que cuando carguemos un Expert Advisor se nos muestre alguna información en pantalla, utilizaremos esta función; por ejemplo:
Print(“EA cargado correctamente”);
X-Trader