MQL4 para Novatos III

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”);

(Continuará...)

 

Un saludo,
X-Trader
 

Artículos Relacionados


MQL4 para Novatos I

MQL4 para Novatos I

Con este artículo, iniciamos una serie dedicada a aquellos traders que, aún no sabiendo nada de programación, desean aprender a programar en MQL4, el lenguaje de desarrollo implementado en...

Historicos para MT4 con Dukascopy

Historicos para MT4 con Dukascopy

Normalmente uno de los grandes problemas que tenemos los usuarios de Metatrader es la falta de históricos de calidad, siendo habitual que haya poco histórico o que incluso nos encontremos huecos de...

Importar Ficheros HST en Python y R

Importar Ficheros HST en Python y R

Gracias a Paduel, en este artículo os explicamos cómo leer directamente históricos de Metatrader desde Python y R.

Copiando Operaciones en Metatrader

Copiando Operaciones en Metatrader

Casualmente hoy en mis viajes por la Red me he topado con dos copiadores de operaciones para Metatrader mediante los que es posible replicar la operativa de cualquier Expert Advisor en otro...

Gráficos de Ticks en Metatrader

Gráficos de Ticks en Metatrader

¿Se pueden ver gráficos de tick en Metatrader 4? Afortunadamente la respuesta es sí y además tenemos varias opciones.

Cómo Hacer un Backtest en Gráfico Offline con Metatrader

Cómo Hacer un Backtest en Gráfico Offline con Metatrader

¿Es posible ejecutar backtests sobre gráficos Renko o Punto y Figura en Metatrader? En este artículo os explicamos paso a paso cómo hacerlo, lo que nos abre la puerta a un nuevo mundo por explorar.