English Русский 中文 Deutsch 日本語 Português
Lenguaje MQL4 para principiantes. Los indicadores técnicos y las funciones integradas

Lenguaje MQL4 para principiantes. Los indicadores técnicos y las funciones integradas

MetaTrader 4Ejemplos | 30 marzo 2016, 15:19
11 733 0
Antoniuk Oleg
Antoniuk Oleg

Introducción

Este es el tercer artículo de la serie "El lenguaje MQL4 para principiantes". En los dos primeros artículos hemos aprendido los conceptos básicos de MQL4, las bases para un posterior desarrollo. Vamos a aprender a utilizar las funciones incorporadas en MQL4 y las funciones para trabajar con los indicadores técnicos. Estas últimas serán de vital importancia para el desarrollo posterior de sus Asesores Expertos e indicadores. Además, veremos un ejemplo sencillo sobre cómo hacer el seguimiento de las señales de trading para entrar al mercado, o para que nos entendamos, cómo utilizar correctamente los indicadores. Al final del artículo, aprenderá algo nuevo e interesante sobre el propio lenguaje.


Funciones matemáticas

Vamos a empezar por lo más sencillo, me refiero a las funciones matemáticas todavía útiles y que se siguen utilizando.


MathAbs

Prototipo de la función:

double MathAbs(double value)

Es una función muy sencilla que devuelve el valor absoluto (modular). Es decir que si por ejemplo usa un número negativo, el resultado sería positivo.
Ejemplo de uso:

int a=-10;
double b=-20.0;
double c=7.0;
 
a=MathAbs(a); // now a is equal to 10
b=MathAbs(b); // now b is equal to 20.0
c=MathAbs(c); // the value of c will not change, for it was positive

MathCeil, MathFloor y MathRound

Prototipos de las funciones:

double MathCeil(double x)
double MathFloor(double x)
double MathRound(double value)

Estas tres funciones son muy parecidas: todas devuelven un valor numérico entero. Pero cada una tiene su propia característica:
MathCeil redondea de tal forma que incluso si tenemos una milésima de un número entero (por ejemplo, 1,001), la considera como un número entero. Redondea hacia el número más cercano desde arriba. Por ejemplo:

double a;
a=MathCeil(1.001);  // a=2.0, even one thousandth is rounded off to a whole number
a=MathCeil(1.999);  // a=2.0
a=MathCeil(-1.001); // a=-1.0, it is correct, because -1.0 is more than -1.001
a=MathCeil(-1.999); // a=-1.0, it is correct, -1.0 is more than -1.999

MathFloor hace lo mismo que MathCeil, pero en sentido contrario. Es decir que si redondeamos un número positivo, simplemente perderá su parte decimal:

double a;
a=MathFloor(1.999); // a=1.0, no matter how large the fractional part is, it will be taken away
a=MathFloor(1.001); // a=1.0
a=MathFloor(-1.001); // a=-2.0, correct, because -2.0 is less than -1.001
a=MathFloor(-1.999); // a=-2.0, correct, -2.0 is less than -1.999

MathRound redondea de un modo que nos resulta más familiar. Es decir, si la parte decimal es grande (0,5 y más) la redondeará a 1. Si la parte decimal es pequeña (inferior a 0,5), la redondeará a 0, es decir que se pierde la parte decimal. Ejemplos:

double a;
a=MathRound(1.1);   // a=1.0, the fractional part is too small (0.1)
a=MathRound(1.57);  // a=2.0, the fractional part is enough to be rounded off to 1
a=MathRound(-3.1);  // a=-3.0 not enough
a=MathRound(-6.99); // a=-7.0 enough

MathMax

MathMin

Prototipos de las funciones:

double MathMax(double value1, double value2)
double MathMin(double value1, double value2)

Estas dos funciones son muy similares. Comparan dos números y devuelven el mayor o el menor de los dos respectivamente. Ejemplos:

double a;
a=MathMax(50.0,1.0);  // a=50.0
a=MathMin(10.0,12.0); // a=10.0


MathPow

Prototipo de la función:

double MathPow(double base, double exponent)

Esta función permite elevar la base de un número a la potencia exponent. Ejemplos:

double a;
a=MathPow(5.0,2.0);  // a=25.0, 5 to the power 2
a=MathPow(2.0,8.0);  // a=256.0, 2 to the power 8
a=MathPow(25.0,0.5); // a=5.0, you know, a number to the power 0.5 is its square root


MathSqrt

Prototipo de la función:

double MathSqrt(double x)


Esta función calcula la raíz cuadrada. Pero no intente ponerle un número negativo, ya que devolverá un 0. Ejemplos:

double a;
a=MathSqrt(9.0);    // a=3.0
a=MathSqrt(25.0);   // a=5.0
a=MathSqrt(-256.0); // a=0.0, I explained


MathLog

Prototipo de la función:

double MathLog(double x)

¿Se acuerda alguien de lo que es un logaritmo? El Logaritmo de a en base a b es igual al exponente al cual se debe elevar la base b, para obtener a. Los más utilizados son el logaritmo en la base e (número de Euler), el logaritmo natural o neperiano (lna) y el logaritmo en la base 10 - logaritmo común (lg a). Puede encontrar más información sobre los logaritmos en:
https://en.wikipedia.org/wiki/Logarithm
La función Mathlog está diseñada para calcular el logaritmo natural del número x. No intente calcular el logaritmo de los números negativos o del cero. Se le devolverá -1. Ejemplos de uso de la función:

double a;
a=MathLog(10.0);  // a=2.30258509
a=MathLog(0.0);   // a=-1.0, incorrect
a=MathLog(-10.0); // a=-1.0, incorrect

MathExp

Prototipo de la función:

double MathExp(double d)

Esta función devuelve el número e elevado a la potencia d. Muchos ya no recuerdan este número.
e es una constante matemática y es la base del logaritmo natural, es un número irracional y transcendental. e = 2,718281828459045… El número e es a veces conocido como número de Euler o número neperiano. Juega un papel muy importante en los cálculos diferenciales e integrales. Puede obtener más información acerca del número de Euler en:
http://en.wikipedia.org/wiki/Eulerian_number
Si se proporciona un número muy elevado se producirá un desbordamiento y devolverá cero. ¿A partir de qué potencia tenemos un error? Vamos a averiguarlo haciendo un pequeño experimento:

double exponent=1.0; // here the degree value will be stored
double result=1.0;   // result, returned by the function
int i=0;             // number of cycle iterations
 
while(result!=0.0)   // while the result is not equal to zero (while there is no overflowing)
{
   result=MathExp(exponent); // remember the result
   exponent*=10.0;           // increase the degree
   i++;                      // the next iteration is over
}
MessageBox("i="+i); // result of the experiment

Ocurre lo siguiente: cada vez que tratamos de llamar a la función MathExp y con cada iteración se incrementa la potencia 10 veces hasta que finalmente se desborda y nos devuelve cero. He obtenido el siguiente resultado: i=310. Esto quiere decir que podemos usar números de 1*10 elevados a la potencia 309 (¡imagínese un número de 309 dígitos!). Así que creo que no hay que preocuparse por el desbordamiento.


MathMod

Prototipo de la función:

double MathMod(double value,double value2)

Esta función devuelve el resto entero de una división entre enteros. Por ejemplo, al dividir 5 entre 2 obtenemos 2 y el resto 1. El primer argumento es el dividendo value, el segundo es el divisor value2. Se devuelve el resto. Ejemplos:

double a;
 
a=MathExp(5,2); // a=1.0
a=MathExp(10,3); // a=1.0, correct
a=MathExp(50,10); // a=0.0, divided without residue

MathRand y MathSrand

Prototipos de las funciones:

int MathRand()
void MathSrand(int seed)

MathRand devuelve números enteros pseudoaleatorios entre 0 y 32767. Puede tener algunas preguntas: ¿qué significa "pseudo"? Qué intervalo más extraño, ¿y qué pasa si necesito un intervalo de 5 a 10? ¿Por qué es exactamente 32767? Aquí tiene las respuestas:
"Pseudo" significa que los números no son aleatorios del todo y dependen de algo. Supongamos que hemos escrito un script que devuelve 5 números pseudoaleatorios. Por ejemplo:

int a=0;
 
while(a<5)
{
   MessageBox(“random=”+MathRand());
   a++;
}

Los números son realmente aleatorios, pero si iniciamos el script de nuevo, le secuencia sería siempre la misma. Esto se debe a un número a partir del cual se inicia la función MathRand. Vamos a llamarlo el número inicial. Para cambiarlo, usamos otra función: MathSrand. La función admite un sólo argumento; el número inicial del cual dependerán todos los números pseudoaleatorios. Imagínese que el número inicial es una semilla a partir de la cual va a crecer un árbol (números aleatorios). Por defecto, el número inicial es 1. Así que para obtener una verdadera secuencia aleatoria, debemos primero asignar un valor único al número inicial. ¿Cómo podemos hacerlo? Existe una función más, es TimeLocal que no tiene argumentos y devuelve el número de segundos transcurridos a partir de las 00:00 del 1 de enero 1970. Esta función es la idónea ya que vamos a recibir un número único en la mayoría de los casos. ¿Ya estás echo un lío? Este es el código:

int a=0;
MathSrand(TimeLocal()); // assign a unique value to the beginning number
 
while(a<5)
{
   MessageBox(“random=”+MathRand());
   a++;
}

Ahora vamos a obtener un secuencia nueva cada vez. Vamos allá.
De 0 a 32767. ¿Por qué 32767? Fíjese: el máximo valor posible de una variable int es 2 elevado a 16 (debido a que el valor de la variable int ocupa 16 bits en la memoria del ordenador, sin tener en cuenta el signo) y es igual a 32768, pero como empezamos a contar a partir de cero, le restamos 1. De este modo obtenemos 32767.
Para obtener cualquier intervalo, hay que usar el operador %; resto de la división. Por ejemplo, si queremos obtener números aleatorios entre 0 y 5:

int a=0;
MathSrand(TimeLocal());
while(a<5)
{
   MessageBox(“random=”+MathRand()%6);
   a++;
}

Tenga en cuenta que hemos escrito MathRand()%6, no MathRand()%5; puesto que nuestro intervalo empieza a partir de cero, tenemos que añadir 1. Supongamos ahora que necesitamos números aleatorios entre 5 y 10:

MessageBox(“random=”+MathRand()%6+5); // just add the necessary shift

Los mismo si necesitamos un intervalo con números negativos, por ejemplo de -5 a 5:

MessageBox(“random=”+MathRand()%11-5);

Si necesitamos únicamente números negativos, multiplicamos el resultado por -1. Por ejemplo, necesitamos números entre -10 y -20:

MessageBox(“random=”+(MathRand()%11+10)*(-1));

Si necesitamos números con decimales, por ejemplo entre 0,0 y 1,0 y con una precisión de milésimas, usaremos el siguiente código:

MessageBox(“random=”+MathRand()%1001/1000.0);

Primero creamos los números aleatorios entre 0 y 1000 y luego dividimos el resultado entre 1000.0. Tenga en cuenta que tenemos que dividir entre 1000.0 (con coma flotante), no entre 1000 (entero). De lo contrario, obtendremos cero, ya que se redondea.


Funciones trigonométricas y trigonométricas inversas

Las funciones trigonométricas son funciones matemáticos relacionadas con los ángulos. Son muy importantes en el análisis de los fenómenos periódicos. Están estrechamente relacionadas con las funciones trigonométricas inversas. Puede obtener más información aquí:
https://en.wikipedia.org/wiki/Trigonometric_function
https://en.wikipedia.org/wiki/ArcSin
En MQL4, todas estas funciones requieren argumentos en radianes, no en grados. Es decir, si necesita encontrar el seno de 20 grados, primero tiene que convertir los 20 grados a radianes. Por ejemplo:

MathSin(20.0*3.14159/180.0);

Es decir que 1 grado = pi / 180. Es conveniente declarar y utilizar la constante al inicio del programa si usa las funciones trigonométricas con frecuencia:

#define PI 3.1415926535897

MathSin, MathCos, MathTan, MathArcsin, MathArccos y MathArctan

Prototipos de las funciones:

double MathSin(double value)
double MathCos(double value)
double MathTan(double x)
double MathArcsin(double x)
double MathArccos(double x)
double MathArctan(double x)

Veamos las características de algunas funciones. MathTan admite valores entre -263 y 263, si se superan los límites el número será indefinido. MathArcsin y MathArccos admiten valores entre -1 to 1, de lo contrario, obtendremos un cero y el mensaje correspondiente en el diario del Asesor Experto. MathArctan si el argumento es igual a 0, la función devuelve 0.


Nuevas funciones para mostrar los mensajes

Hasta el momento, sólo conoce una función para mostrar la información: MessageBox. Vas a conocer otras tres funciones muy parecida, pero tienen sus propias características.


Alert

Prototipo de la función:

void Alert(...)

Muestra la ventana de diálogo que contiene las señales del usuario (informaciones). Al llamar esta función se oye una señal especial que se puede modificar o desactivar en los ajustes del sistema: Herramientas -> Opciones -> pestaña Eventos. La ventana será parecida a esto:

Puede cambiar el tamaño de la ventana para ver más información de manera más cómoda. Además, puede ver siempre las últimas llamadas de la función ya que no se eliminan. Puede también realizar varias llamadas sucesivas, obtendrá una ventana con la última señal activa y no tiene que hacer clic en "OK" cada vez. Por otra parte, puede usar la función de forma similar a MessageBox:

Alert(“signal type:”+signalType);
Alert(“random=”+MathRand()%1001);

Aunque su propósito es distinto. Se supone que sólo tiene que enumerar los parámetros de entrada separados por comas. Al igual que en el ejemplo anterior, pero usando "," en lugar de "+". Recomiendo usar la segunda opción:

Alert(“signal type:”,signalType);
Alert(“random=”,MathRand()%1001);

Comment

Prototipo de la función:

void Comment(...)

Es una función parecida y de uso idéntico que muestra un mensaje en la esquina superior izquierda del gráfico. No hay que pulsar nada para que se ejecute el código. Por ejemplo, usamos esta función para mostrar el estado actual. Ejemplo:

Comment(“some usefull information”);




Print

Prototipo de la función:

void Print( ...)

Otra función similar para mostrar mensajes en el diario del Asesor Experto:

Print(“processing...”);



Además, el diario guarda todos los mensajes en el archivo correspondiente (el nombre del archivo se corresponde con la fecha) en su ordenador en la carpeta MetaTrader 4\experts\logs:



Hay que tener en cuenta ciertos aspectos relacionados con las tres funciones. No pueden mostrar matrices, simplemente apuntan hacia ellas, como un parámetro. Se tiene que mostrar elemento por elemento, por ejemplo, así:

for(int a=0;a<100;a++)
Alert("Close[",a,"]=",Close[a]);

Podemos mostrar un máximo de 64 parámetros en cada función. Cada llamada a la función Alert se escribe también en el diario del Asesor Experto. El tipo double se mostrará con una precisión de 4 dígitos después del punto decimal.


Indicadores técnicos

Casi todos los Asesores Expertos usan indicadores. Si se fija en algún Asesor Experto sencillo que incluye la instalación (MACD Sample), verá que usa indicadores técnicos. Ahora vamos a aprender cómo se obtienen los valores de los indicadores técnicos disponibles. A cada indicador le corresponde un función que puede calcular el valor en cualquier instrumento financiero disponible y en cualquier período de tiempo. No hay que preocuparse de si el indicador está abierto ahora en el gráfico o no. No importa.

Vamos a ver con más detalle los parámetros de las funciones de los indicadores técnicos. En realidad, se repiten casi todos.
Por ejemplo, todas las funciones que vamos a abordar disponen de 2 primeros argumentos y 1 último para calcular los valores de los indicadores técnicos:

  • symbol – el primer argumento establece cuál es el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores de los indicadores técnicos. Es decir, con qué gráfico hay que utilizar el indicador técnico. Para utilizar el indicador en el gráfico actual, usamos la constante NULL (o 0). El gráfico actual aquí es el gráfico en el cual hemos iniciado nuestro script (Asesor Experto, indicador). Si necesitamos otro instrumento financiero, hay que usar su nombre como cadena ("EURUSD","GBPUSD" etc.).
  • timeframe – el segundo argumento establece el periodo de tiempo en el cual hay que utilizar el indicador. Si queremos el período de tiempo del gráfico actual, usamos 0 (cero). Si queremos otro período de tiempo, usamos una de las constantes predefinidas:
    • PERIOD_M1 - 1 minuto
    • PERIOD_M5 - 5 minutos
    • PERIOD_M15 - 15 minutos
    • PERIOD_M30 - 30 minutos
    • PERIOD_H1 - 1 hora
    • PERIOD_H4 - 4 horas
    • PERIOD_D1 - 1 día
    • PERIOD_W1 - 1 semana
    • PERIOD_MN1 - 1 mes
  • shift – el último argumento establece la barra en la cual hay que utilizar el indicador. Recuerde el primer artículo: para averiguar el precio de cierre de la última barra usamos índices empezando desde cero. Es decir, Close [0] es el precio de cierre de la última barra, Close[1] es el precio de cierre de la penúltima, etc. Este argumento funciona igual que los índices en las matrices. Para averiguar el valor del indicador en la última barra, shift tiene que ser igual a 0 en la última barra, -1 en la penúltima y así sucesivamente.

Los indicadores técnicos usan a menudo valores promedios de varias barras para el cálculo. Es decir, toman distintos precios (apertura, cierre, etc.) de varias barras y calculan el valor promedio mediante un método concreto. Se usa también a menudo el desplazamiento. Estos son algunos de los parámetros que podemos encontrar:

  • applied_price – establece el tipo de precio que hay que utilizar para obtener el valor promedio. Se puede elegir el precio entre las siguientes constantes predefinidas:
    • PRICE_CLOSE - precio de cierre
    • PRICE_OPEN - precio de apertura
    • PRICE_HIGH - precio máximo
    • PRICE_LOW - precio mínimo
    • PRICE_MEDIAN - precio medio, (high+low)/2
    • PRICE_TYPICAL - el precio típico, (high+low+close)/3
    • PRICE_WEIGHTED - precio ponderado de cierre, (high+low+close+close)/4
  • ma_method – determina el método para obtener los promedios. Se puede elegir el método entre las siguientes constantes predefinidas:
    • MODE_SMA - promedio móvil simple
    • MODE_EMA - promedio móvil exponencial
    • MODE_SMMA - promedio móvil suavizado
    • MODE_LWMA - promedio móvil lineal suavizado
  • period – establece el número de barras que se van a utilizar para obtener el valor promedio.
  • ma_shift – desplaza la línea media de las barras. Si es positivo, se desplaza la línea hacia la derecha. De lo contrario, se desplaza hacia la izquierda.

Los parámetros anteriores suelen aparecer muy a menudo. De modo que si ve estos parámetros, le tiene que quedar claro que esta función utiliza los valores promedios para sus cálculos. Para averiguar cómo se llevan a cabo estos cálculos y qué parte de los valores promedios se tiene en cuenta, use el enlace que se encuentra después de la breve descripción de cada función.

Otro punto muy importante: se pueden dividir todos estos indicadores (funciones) en dos categorías:

  • sencillas – cuando el indicador tiene un único valor. Por ejemplo: Acceleration/Deceleration (AC), Accumulation/Distribution (A/D), DeMarker (DeM) etc. Es decir que el indicador sólo tiene una línea o histograma, cuyo valor se devuelve al llamar a la función correspondiente. Este es un ejemplo de varios indicadores sencillos en un gráfico:


  • complejas – cuando el indicador tiene varios valores (líneas).. Por ejemplo: Alligator, Average Directional Movement Index (ADX), Bollinger Bands (BB), Average Convergence/Divergence (MACD) etc. En este caso, hay que especificar qué valor (línea) tiene que devolver el indicador. Para ello, se usa el parámetro mode en todas las funciones de los indicadores complejos. Se puede indicar lo que se tiene que devolver usando ciertas constantes. Este es un ejemplo de varios indicadores complejos en un gráfico:



Se acompañará cada función por un gráfico ilustrativo, ejemplos de uso (colores distintos para visualizar mejor que hace cada cosa) y un enlace a la descripción del indicador (cómo usarlo en el trading, su propósito). Se supone que ya está familiarizado con los indicadores y su uso en la práctica. Recomiendo leer las descripciones de las funciones en este artículo para entender cómo se usan, además de ver los ejemplos. Pero para recordar el propósito de cada argumento en el futuro, puede usar la Ayuda de MetaEditor. Abra la ventana Caja de Herramientas mediante Ctrl+T y diríjase a la pestaña Ayuda. Ahí encontrará la descripción de cada parámetro, además de una lista completa de todas las funciones que le permite encontrar fácilmente lo que necesita. Se puede cambiar el idioma de la Ayuda mediante el menú Ver->Languages. Hay que reiniciar MetaEditor después.


Acceleration/Deceleration (AC)

Se usa el indicador Acceleration/Deceleration (AC) para medir la velocidad de cambios en el precio (aceleración, desaceleración). https://www.metatrader5.com/en/terminal/help/indicators/bw_indicators/ao

Prototipo de la función:

double iAC(string symbol, int timeframe, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • shift – establece la barra en la cual hay que utilizar el indicador.

Ejemplos de uso:



double ac;
 
ac=iAC(0,0,0);
// acceleration of the last bar on the active chart and timeframe 

ac=iAC(0,0,1);
// acceleration of the last but one bar on the active chart and timeframe 

ac=iAC("GBPUSD",PERIOD_M30,0);
// acceleration of the last bar on the chart GBPUSD, timeframe - 30 minutes


Accumulation/Distribution (A/D)

Se usa el indicador Accumulation/Distribution (A/D) para confirmar los cambios en el precio mediante el cálculo del volumen (acumulación, distribución).
https://www.metatrader5.com/en/terminal/help/indicators/volume_indicators/ad

Prototipo de la función:

double iAD(string symbol, int timeframe, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • shift – establece la barra en la cual hay que utilizar el indicador.

Ejemplos de uso:




double ad;
 
ad=iAD(0,0,0);
// accumulation on the last bar on the current chart and period 

ad=iAD(0,0,Bars-1);
// accumulation on the first available bar, active chart and period 

ad=iAD("GBPUSD",PERIOD_M5,5);
// accumulation on the 6th last bar on GBPUSD, period - 5 minutes


Alligator

El indicador Alligator (cocodrilo) es la combinación de 3 promedios móviles que utilizan la geometría fractal y la dinámica no lineal.
https://www.metatrader5.com/en/terminal/help/indicators/bw_indicators/alligator
Prototipo de la función:

double iAlligator( string symbol, int timeframe, int jaw_period, int jaw_shift, int teeth_period, 
                   int teeth_shift, int lips_period, int lips_shift, int ma_method, int applied_price, 
                   int mode, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • jaw_period - el período de promediado de la mandíbula del cocodrilo (línea azul)
  • jaw_shift - desplazamiento de la mandíbula del cocodrilo
  • teeth_period - el período de promediado de la mandíbula de los dientes del cocodrilo (línea roja)
  • teeth_shift - desplazamiento de los dientes del cocodrilo
  • lips_period - el período de promediado de la mandíbula de los labios del cocodrilo (línea verde)
  • lips_shift - desplazamiento de los labios del cocodrilo
  • ma_method – determina el método para obtener los promedios. Se puede elegir el método entre las siguientes constantes predefinidas:
    • MODE_SMA - promedio móvil simple
    • MODE_EMA - promedio móvil exponencial
    • MODE_SMMA - promedio móvil suavizado
    • MODE_LWMA - promedio móvil lineal suavizado
  • applied_price – establece el tipo de precio que hay que utilizar (el que se va a promediar) Se puede elegir el precio entre las siguientes constantes predefinidas:
    • PRICE_CLOSE - precio de cierre
    • PRICE_OPEN - precio de apertura
    • PRICE_HIGH - precio máximo
    • PRICE_LOW - precio mínimo
    • PRICE_MEDIAN - precio medio, (high+low)/2
    • PRICE_TYPICAL - el precio típico, (high+low+close)/3
    • PRICE_WEIGHTED - precio ponderado de cierre, (high+low+close+close)/4
  • mode – establece el valor que queremos averiguar (mandíbula, dientes o labios). Se puede elegir entre las siguientes constantes:
    • MODE_GATORJAW - línea de la mandíbula del cocodrilo (azul)
    • MODE_GATORTEETH - línea de los dientes del cocodrilo (roja)
    • MODE_GATORLIPS - línea de los labios del cocodrilo (verde)
  • shift – establece la barra en la cual hay que utilizar el indicador.

Fíjese en lo que hacen los argumentos de la función al utilizar el cocodrilo en un gráfico. Esta analogía le puede ayudar:



Se establece lo que tiene que devolver la función mediante el parámetro mode:


Ejemplos de uso:

double jaw;
double teeth;
double lips;
 
jaw=iAlligator(0,0,13,8,8,5,5,3,MODE_SMA,PRICE_MEDIAN,MODE_GATORJAW,0);
// find the values of "jaws" (blue line) on the current chart and period.  
// Here simple moving average is used, price – average. Periods 
// of averaging for jaws, teeth and lips – 13, 8 and 8 accordingly. Shift: 
// 5, 5 and 3 accordingly. The value is taken for the last bar.
 
teeth=iAlligator(EURUSD,PERIOD_H1,128,96,64,0,0,0,MODE_EMA,PRICE_TYPICAL,MODE_GATORTEETH,1);
// find the values of "teeth" (red line) on an hour chart EURUSD. 
// Exponential moving average and typical price are used. 
// Periods of averaging: 128, 96 and 64. Shift is not used. The value
// is taken for the last but one bar.
 
lips=iAlligator(GBPUSD,PERIOD_D1,21,18,13,5,3,0,MODE_SMMA,PRICE_WEIGHTED,MODE_GATORLIPS,5);
// find the values of "lips" (green line) on a daily chart GBPUSD. 
// Uses smoothed moving average and weighted close price.
// Periods of averaging: 21, 18 and 13. Shift: 5, 3 and 0. The value 
// is taken for the 5th last bar.


Average Directional Movement Index (ADX)

Se usa el indicador Average Directional Movement Index (ADX) para detectar la presencia de una tendencia en el comportamiento del precio.
https://www.metatrader5.com/en/terminal/help/indicators/trend_indicators/admi
Prototipo de la función:

double iADX(string symbol,int timeframe,int period,int applied_price,int mode,int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • period – el número de barras que se usan para averiguar el valor promedio.
  • mode – elige la línea cuyo valor queremos a obtener. Use las siguientes constantes predefinidas:
    • MODE_MAIN - línea principal
    • MODE_PLUSDI - línea +DI
    • MODE_MINUSDI - línea –DI
  • shift – establece la barra en la cual hay que utilizar el indicador.

Se establece lo que tiene que devolver la función mediante el parámetro mode:


Ejemplos de uso:

double main;    // main line
double plusDi;  // line +DI
double minusDi; // line -DI
 
main=iADX(0,0,3,PRICE_CLOSE,MODE_MAIN,0);
// find the value of the main line on the active chart and period on the last bar. 
// Uses averaging on 3 bars, uses close price.
 
plusDi=iADX(USDCAD,PERIOD_M1,6,PRICE_OPEN,MODE_PLUSDI,1);
// find the value of line +DI on the minute chart USDCAD on the second last bar. 
// Uses averaging on 6 bars, uses open price.
 
minusDi=iADX(AUDUSD,PERIOD_H1,10,PRICE_HIGH,MODE_MINUSDI,5);
// find the value of line -DI on the hour chart AUDUSD on the 6th last bar. 
// Uses averaging on 10 bars, uses maximal price.


Average True Range (ATR)

Se usa el indicador Average True Range (ATR) para determinar la volatilidad del mercado.
https://www.metatrader5.com/en/terminal/help/indicators/oscillators/atr
Prototipo de la función:

double iATR(string symbol,int timeframe,int period,int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • period – el número de barras que se usan para averiguar el valor promedio.
  • shift – establece la barra en la cual hay que utilizar el indicador.

Ejemplos de uso:



double atr;
 
atr=iATR(0,0,15,0);
// volatility of the last bar on the active chart and period. 
// Uses 15 bars to get the mean value. 

atr=iATR(EURUSD,PERIOD_M15,5,1);
// volatility of the last but one bar on a 15 minute chart EURUSD. 
// Uses 5 bars to get the mean value.
 
atr=iATR(USDCAD,PERIOD_H1,32,0);
// volatility of the last bar on an hour chart USDCAD. 
// Uses 32 bars to get the mean value.


Awesome Oscillator (AO) de Bill Williams

Se usa el indicador Awesome Oscillator (AO) de Bill Williams (oscilador asombroso) para determinar las fuerzas que mueven el mercado.
https://www.metatrader5.com/en/terminal/help/indicators/bw_indicators/awesome
Prototipo de la función:

double iAO( string symbol, int timeframe, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • shift – establece la barra en la cual hay que utilizar el indicador.

Ejemplos de uso:


double ao;
 
ao=iAO(0,0,0);
// moving force of the last bar on the active chart and period 

ao=iAO(EURUSD,PERIOD_M5,0);
// moving force of the last bar on 5-minute chart EURUSD 

ao=iAO(EURAUD,PERIOD_W1,1);
// moving force of the last but one bar on a weekly chart EURAUD


Bears Power

Se usa el indicador Bears Power para hacer una estimación del balance de fuerzas de los "osos".
http://www.fibo-forex.ru/pages.php?page=1799
Prototipo de la función:

double iBearsPower(string symbol,int timeframe,int period,int applied_price,int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • period – el número de barras que se usan para averiguar el valor promedio.
  • applied_price – establece el tipo de precio que hay que utilizar (el que se va a promediar) Se puede elegir el precio entre las siguientes constantes predefinidas:
    • PRICE_CLOSE - precio de cierre
    • PRICE_OPEN - precio de apertura
    • PRICE_HIGH - precio máximo
    • PRICE_LOW - precio mínimo
    • PRICE_MEDIAN - precio medio, (high+low)/2
    • PRICE_TYPICAL - el precio típico, (high+low+close)/3
    • PRICE_WEIGHTED - precio ponderado de cierre, (high+low+close+close)/4
  • shift – establece la barra en la cual hay que utilizar el indicador.

Ejemplos de uso:

double bp;
 
bp=iBearsPower(0,0,5,PRICE_OPEN,0);
// balance of the last bar on the active chart and period. Use 5 bars for averaging and opening prpice. 

bp=iBearsPower("EURUSD",PERIOD_M5,32,PRICE_CLOSE,1);
// balance of the last but one bar on 5-minute chart EURUSD. Use 32 bars for averaging and close price. 

bp=iBearsPower("EURGBP",PERIOD_D1,51,PRICE_MEDIAN,0);
// balance of the last bar on a daily chart EURGBP. Use 51 bars for averaging and average price.


Bollinger Bands (BB)

Se usa el indicador Bollinger Bands (BB) (bandas de Bollinger) para determinar el límite superior e inferior en el rango normal de fluctuaciones del precio.
https://www.metatrader5.com/en/terminal/help/indicators/trend_indicators/bb
Prototipo de la función:

double iBands( string symbol, int timeframe, int period, int deviation, int bands_shift,
               int applied_price, int mode, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • period – el número de barras que se usan para averiguar el valor promedio.
  • deviation – desviación desde la línea principal.
  • bands_shift - desplazamiento de los precios.
  • applied_price – establece el tipo de precio que hay que utilizar (el que se va a promediar) Se puede elegir el precio entre las siguientes constantes predefinidas:
    • PRICE_CLOSE - precio de cierre
    • PRICE_OPEN - precio de apertura
    • PRICE_HIGH - precio máximo
    • PRICE_LOW - precio mínimo
    • PRICE_MEDIAN - precio medio, (high+low)/2
    • PRICE_TYPICAL - el precio típico, (high+low+close)/3
    • PRICE_WEIGHTED - precio ponderado de cierre, (high+low+close+close)/4
  • mode – elige la línea cuyo valor queremos a averiguar. Use las siguientes constantes predefinidas:
    • MODE_UPPER - línea superior
    • MODE_LOWER - línea inferior
  • shift – establece la barra en la cual hay que utilizar el indicador.

Se establece lo que tiene que devolver la función mediante el parámetro mode:

Ejemplos de uso:

double bb;
 
bb=iBands
(0,0,20,2,0,PRICE_LOW,MODE_LOWER,0);
// lower limit of the last bar on the active chart and period. 
// Use 20 bars for averaging, and the minimal price.
// Deviation from the main line is 2, shift is not used.
 
bb=iBands("EURUSD",PERIOD_H1,13,2,3,PRICE_HIGH,MODE_UPPER,1);
// upper limit of the last but one bar on an hour chart EURUSD. 
// Use 13 bars for averaging, and the maximal price.
// Deviation from the main line is 2, shift is 3 bars. 

bb=iBands("EURGBP",PERIOD_D1,21,3,4,PRICE_HIGH,MODE_UPPER,0);
// upper limit of the last bar on a daily chart EURGBP. 
// Use 21 bars for averaging, and the maximal price.
// Deviation from the main line is 2, shift is 4 bars.


Bulls Power

Se usa el indicador Bulls Power para hacer una estimación del balance de fuerzas de los "toros".
http://www.forexdealer.net/help/bul_hlp.htm
Prototipo de la función:

double iBullsPower(string symbol, int timeframe, int period, int applied_price, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • period – el número de barras que se usan para averiguar el valor promedio.
  • applied_price – establece el tipo de precio que hay que utilizar (el que se va a promediar) Se puede elegir el precio entre las siguientes constantes predefinidas:
    • PRICE_CLOSE - precio de cierre
    • PRICE_OPEN - precio de apertura
    • PRICE_HIGH - precio máximo
    • PRICE_LOW - precio mínimo
    • PRICE_MEDIAN - precio medio, (high+low)/2
    • PRICE_TYPICAL - el precio típico, (high+low+close)/3
    • PRICE_WEIGHTED - precio ponderado de cierre, (high+low+close+close)/4
  • shift – establece la barra en la cual hay que utilizar el indicador.

Ejemplos de uso:


double bp;
 
bp=iBullsPower(0,0,10,PRICE_CLOSE,1);
// balance of the last but one bar on the active chart and period. Use 10 bars for averaging
// and close price. 

bp=iBullsPower("EURGBP",PERIOD_M1,21,PRICE_HIGH,1);
// balance of the last bar on a minute chart EURGBP. Use 21 bars for averaging and the maximal price. 

bp=iBullsPower("EURUSD",PERIOD_H1,33,PRICE_MEDIAN,0);
// balance of the last bar on an hour chart EURUSD. Use 33 bars for averaging and the average price.


Commodity Channel Index (CCI)

Se usa el indicador Commodity Channel Index (CCI) para medir la desviación del precio de su valor promedio estadístico.
https://www.metatrader5.com/en/terminal/help/indicators/oscillators/cci
Prototipo de la función:

double iCCI( string symbol, int timeframe, int period, int applied_price, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • period – el número de barras que se usan para averiguar el valor promedio.
  • applied_price – establece el tipo de precio que hay que utilizar (el que se va a promediar) Se puede elegir el precio entre las siguientes constantes predefinidas:
    • PRICE_CLOSE - precio de cierre
    • PRICE_OPEN - precio de apertura
    • PRICE_HIGH - precio máximo
    • PRICE_LOW - precio mínimo
    • PRICE_MEDIAN - precio medio, (high+low)/2
    • PRICE_TYPICAL - el precio típico, (high+low+close)/3
    • PRICE_WEIGHTED - precio ponderado de cierre, (high+low+close+close)/4
  • shift – establece la barra en la cual hay que utilizar el indicador.

Ejemplos de uso:

double cci;
   
cci=iCCI(0,0,14,PRICE_TYPICAL,0);
// index of the last bar on the active chart and period.
// Use 14 bars for finding the mean value and
// typical price. 

cci=("EURUSD",PERIOD_M1,21,PRICE_HIGH,1);
// index of the last but one bar on a minute chart EURUSD.
// Use 21 bars for finding the mean value and
// maximal price.
 
cci=iCCI("EURGBP",PERIOD_D1,7,PRICE_CLOSE,0);
// index of the last bar on a daily chart EURGBP.
// Use 7 bars for finding the mean value and
// close price.


DeMarker (DeM)

Se usa el indicador DeMarker (DeM) para predecir una reversión del precio en base a la diferencia entre los precios de las barras anteriores.
https://www.metatrader5.com/en/terminal/help/indicators/oscillators/demarker
Prototipo de la función:

double iDeMarker( string symbol, int timeframe, int period, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • period – el número de barras que se usan para averiguar el valor promedio.
  • shift – establece la barra en la cual hay que utilizar el indicador.

Ejemplos de uso:

double dm;
   
dm=iDeMarker(0,0,13,0);
// DeMarker value of the last bar on the current chart and period.
// Use 13 bars to find the mean value. 

dm=iDeMarker("EURJPY",PERIOD_H4,51,1);
// DeMarker value of the last but one bar on 4-hour chart EURJPY.
// Use 51 bars to find the mean value. 

dm=iDeMarker("USDCAD",PERIOD_M30,21,0);
// DeMarker value of the last bar on 30-minutes chart USDCAD.
// Use 21 bars to find the mean value.


Envelopes

Se usa el indicador Envelopes (envolventes) para determinar los límites de las fluctuaciones del precio en base a dos promedios móviles.
https://www.metatrader5.com/en/terminal/help/indicators/trend_indicators/envelopes
Prototipo de la función:

double iEnvelopes( string symbol, int timeframe, int ma_period, int ma_method, int ma_shift, 
                   int applied_price, double deviation, int mode, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • ma_period - el número de barras que se van a utilizar para encontrar la línea principal.
  • ma_method – determina el método para obtener los promedios. Se puede elegir el método entre las siguientes constantes predefinidas:
    • MODE_SMA - promedio móvil simple
    • MODE_EMA - promedio móvil exponencial
    • MODE_SMMA - promedio móvil suavizado
    • MODE_LWMA - promedio móvil ponderado linealmente
  • ma_shift – desplaza las líneas del indicador en las barras. Si es positivo, se desplazan las líneas del indicador hacia la derecha. De lo contrario, se desplazan las líneas hacia la izquierda.
  • applied_price – establece el tipo de precio que hay que utilizar (el que se va a promediar) Se puede elegir el precio entre las siguientes constantes predefinidas:
    • PRICE_CLOSE - precio de cierre
    • PRICE_OPEN - precio de apertura
    • PRICE_HIGH - precio máximo
    • PRICE_LOW - precio mínimo
    • PRICE_MEDIAN - precio medio, (high+low)/2
    • PRICE_TYPICAL - el precio típico, (high+low+close)/3
    • PRICE_WEIGHTED - precio ponderado de cierre, (high+low+close+close)/4
  • deviation – desviación desde la línea principal en porcentaje. Por ejemplo, es decir, 0.1 es 10%, 0.25 es 25%, etc.
  • mode – elige la línea cuyo valor queremos averiguar. Use las siguientes constantes predefinidas:
    • MODE_UPPER - línea superior
    • MODE_LOWER - línea inferior
  • shift – establece la barra en la cual hay que utilizar el indicador.

Se establece lo que tiene que devolver la función mediante el parámetro mode:

Ejemplos de uso:

double e;
   
e=iEnvelopes(0,0,21,MODE_SMA,0,PRICE_CLOSE,0.05,MODE_LOWER,0);
// lower limit of the last bar on the active chart and period.
// Use 21 bars and close price for finding the value of simple moving 
// average. Shift is not used. Deviation from the main 
// line: 5%.
 
e=iEnvelopes("EURUSD",PERIOD_H1,13,MODE_SMMA,3,PRICE_MEDIAN,0.15,MODE_UPPER,1);
// upper limit of the last but one bar on an hour chart EURUSD.
// Use 13 bars and average price for finding the value of smoothed moving 
// average. Shift: 3 bars. Deviation from the main line: 15%. 

e=iEnvelopes("EURAUD",PERIOD_D1,7,MODE_EMA,2,PRICE_CLOSE,0.20,MODE_LOWER,0);
// lower limit of the last bar on a daily chart EURAUD.
// Use 7 bars and close price for finding the value of exponential 
// moving average. Shift: 2 bars. Deviation from the main 
// line: 20%.


Force Index (FRC)

Se usa el indicador Force Index (FRC) (índice de fuerza) para medir la fuerza de los "toros" en cada subida y la fuerza de los "osos" en cada caída.
https://www.metatrader5.com/en/terminal/help/indicators/oscillators/fi
Prototipo de la función:

double iForce( string symbol, int timeframe, int period, int ma_method, 
               int applied_price, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • period – el número de barras que se usan para averiguar el valor promedio.
  • ma_period - el número de barras que se van a utilizar para encontrar la línea principal.
  • ma_method – determina el método para obtener los promedios. Se puede elegir el método entre las siguientes constantes predefinidas:
    • MODE_SMA - promedio móvil simple
    • MODE_EMA - promedio móvil exponencial
    • MODE_SMMA - promedio móvil suavizado
    • MODE_LWMA - promedio móvil ponderado linealmente
  • applied_price – establece el tipo de precio que hay que utilizar (el que se va a promediar) Se puede elegir el precio entre las siguientes constantes predefinidas:
    • PRICE_CLOSE - precio de cierre
    • PRICE_OPEN - precio de apertura
    • PRICE_HIGH - precio máximo
    • PRICE_LOW - precio mínimo
    • PRICE_MEDIAN - precio medio, (high+low)/2
    • PRICE_TYPICAL - el precio típico, (high+low+close)/3
    • PRICE_WEIGHTED - precio ponderado de cierre, (high+low+close+close)/4
  • shift – establece la barra en la cual hay que utilizar el indicador.

Ejemplos de uso:


double f;
   
f=iForce(0,0,13,MODE_SMA,PRICE_CLOSE,0);
// force index of the last bar on the active chart and period. Period
// of averaging: 13 bars. Method of averaging: simple moving average.
// Use close price.
 
f=iForce("EURGBP",PERIOD_M5,21,MODE_LWMA,PRICE_HIGH,1);
// force index of the last but one bar on 5-minute chart EURGBP. Period
// of averaging: 21 bars. Method of averaging: linearly-weighted moving average.
// Use maximal price. 

f=iForce("EURUSD",PERIOD_M1,32,MODE_SMMA,PRICE_MEDIAN,0);
// force index of the last bar on a minute chart EURUSD. Period
// of averaging: 32 bars. Method of averaging: smoothed moving average.
// Use average price.


Fractals

Fractals (fractales) es uno de los cinco indicadores del sistema de trading de Bill Williams. Se usa para detectar los valles y los picos de un gráfico de precios. El indicador Fractals no se forma en todas las barras. Por lo tanto, si no se forma un fractal en alguna barra, la función devuelve cero.
https://www.metatrader5.com/en/terminal/help/indicators/bw_indicators/fractals
Prototipo de la función:

double iFractals( string symbol, int timeframe, int mode, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • mode – elige la línea cuyo valor vamos a recibir. Se usan las siguientes constantes predefinidas:
    • MODE_UPPER - fractales superiores
    • MODE_LOWER - fractales inferiores
  • shift – establece la barra en la cual hay que utilizar el indicador.

Se establece lo que tiene que devolver la función mediante el parámetro mode:

Ejemplo de uso:

double f;
 
f=iFractals(0,0,MODE_UPPER,0);
// upper fractal of the last bar on the active chart and
// period.
 
f=iFractals("USDCAD",PERIOD_M5,MODE_LOWER,1);
// lower fractal of the last but one bar on 5-minute chart
// USDCAD. 

f=iFractals("USDJPY",PERIOD_D1,MODE_UPPER,0);
// upper fractal of the last bar on a daily chart USDJPY.


Gator Oscillator

Se construye el indicador Gator Oscillator en base al indicador Alligator y se usa para medir el grado de convergencia o divergencia de las líneas de balance.
https://www.metatrader5.com/en/terminal/help/indicators/bw_indicators/go
Prototipo de la función:

double iGator( string symbol, int timeframe, int jaw_period, int jaw_shift, int teeth_period, 
               int teeth_shift, int lips_period, int lips_shift, int ma_method, 
               int applied_price, int mode, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • jaw_period - el período de promediado de la mandíbula del cocodrilo (línea azul)
  • jaw_shift - desplazamiento de la mandíbula del cocodrilo
  • teeth_period - el período de promediado de la mandíbula de los dientes del cocodrilo (línea roja)
  • teeth_shift - desplazamiento de los dientes del cocodrilo
  • lips_period - el período de promediado de la mandíbula de los labios del cocodrilo (línea verde)
  • lips_shift - desplazamiento de los labios del cocodrilo
  • ma_method – determina el método para obtener los promedios. Se puede elegir el método entre las siguientes constantes predefinidas:
    • MODE_SMA - promedio móvil simple
    • MODE_EMA - promedio móvil exponencial
    • MODE_SMMA - promedio móvil suavizado
    • MODE_LWMA - promedio móvil ponderado linealmente
  • applied_price – establece el tipo de precio que hay que utilizar (el que se va a promediar) Se puede elegir el precio entre las siguientes constantes predefinidas:
    • PRICE_CLOSE - precio de cierre
    • PRICE_OPEN - precio de apertura
    • PRICE_HIGH - precio máximo
    • PRICE_LOW - precio mínimo
    • PRICE_MEDIAN - precio medio, (high+low)/2
    • PRICE_TYPICAL - el precio típico, (high+low+close)/3
    • PRICE_WEIGHTED - precio ponderado de cierre, (high+low+close+close)/4
  • mode – establece el valor que queremos averiguar (mandíbula, dientes o labios). Se puede elegir entre las siguientes constantes:
    • MODE_UPPER - histograma superior
    • MODE_LOWER - histograma inferior
  • shift – establece la barra en la cual hay que utilizar el indicador.

Se establece lo que tiene que devolver la función mediante el parámetro mode:

Ejemplos de uso:

double g;
 
g=iGator(0,0,13,8,8,0,0,0,MODE_SMA,PRICE_CLOSE,MODE_UPPER,0);
// upper histogram of the last bar on the active chart and period. Periods of 
// averaging for jaw, teeth and lips accordingly: 13,8,8. Shift is not used. 
// For averaging use close price and the method of a simple moving average. 

g=iGator("EURGBP",PERIOD_M1,21,13,9,4,3,2,MODE_SMMA,PRICE_OPEN,MODE_LOWER,1);
// lower histogram of the last but one bar on a minute chart EURGBP. Periods of 
// averaging for jaw, teeth and lips accordingly: 21,13,9. Shifts accordingly:
// 4,3 and 2. For averaging use open price and the method of smoothed 
// moving average.
 
g=iGator("USDCAD",PERIOD_D1,51,21,13,8,5,4,MODE_EMA,PRICE_MEDIAN,MODE_UPPER,0);
// upper histogram of the last bar on a daily chart USDCAD. Periods of
// averaging for jaw, teeth and lips accordingly: 51,21,13. Shifts accordingly: 8,5 and 4.
// For averaging use average price and the method of exponential moving average.


Ichimoku Kinko Hyo

Se usa el indicador Ichimoku Kinko Hyo para determinar la tendencia y los niveles de soporte y resistencia, así como las señales para comprar y vender.
https://www.metatrader5.com/en/terminal/help/indicators/trend_indicators/ikh
Prototipo de la función:

double iIchimoku( string symbol, int timeframe, int tenkan_sen, int kijun_sen, 
                  int senkou_span_b, int mode, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • tenkan_sen - periodo de promediado de Tenkan Sen.
  • kijun_sen - periodo de promediado de Kijun Sen.
  • senkou_span_b - periodo de promediado de Senkou Span B.
  • mode - establece el valor de lo que queremos averiguar. Se puede elegir entre las siguientes constantes:
    • MODE_TENKANSEN - Tenkan-sen
    • MODE_KIJUNSEN - Kijun-sen
    • MODE_SENKOUSPANA - Senkou Span A
    • MODE_SENKOUSPANB - Senkou Span B
    • MODE_CHINKOUSPAN - Chinkou Span
  • shift – establece la barra en la cual hay que utilizar el indicador.

Se establece lo que tiene que devolver la función mediante el parámetro mode:

Ejemplos de uso:

double i;
 
i=iIchimoku(0,0,13,21,53,MODE_KIJUNSEN,0);
// the value of the line Kijun-sen on the last bar on the current security and period.
// Periods for finding mean values for Tenkan Sen, Kijun Sen and Senkou Span B
// accordingly: 13,21 and 53.
 
i=iIchimoku("EURUSD",PERIOD_M5,21,53,96,MODE_TENKANSEN,1);
// the value of the line Tenkan-sen on the last but one bar on 5-minute chart EURUSD.
// Periods for finding mean values for Tenkan Sen, Kijun Sen and Senkou Span B
// accordingly: 21,53 and 96.

i=iIchimoku("USDCAD",PERIOD_D1,3,5,9,MODE_CHINKOUSPAN,0);
// the value of the line Chinkou Span on the last bar on a daily chart USDCAD.
// Periods for finding mean values for Tenkan Sen, Kijun Sen and Senkou Span B
// accordingly: 3,5 and 9.


Market Facilitation Index (BW MFI)

Se usa el indicador Market Facilitation Index (BW MFI) (índice de facilitación del mercado) para medir el precio de un tick.
https://www.metatrader5.com/en/terminal/help/indicators/bw_indicators/market_facilitation
Prototipo de la función:

double iBWMFI( string symbol, int timeframe, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • shift – establece la barra en la cual hay que utilizar el indicador.

Ejemplos de uso:


double mfi;
 
mfi=iBWMFI(0,0,0);
// index of market facilitation of the last bar on the active chart and period. 

mfi=iBWMFI("EURUSD",PERIOD_H1,1);
// index of market facilitation of the last but one bar on an hour chart EURUSD. 

mfi=iBWMFI("EURGBP",PERIOD_D1,0);
// index of market facilitation of the last bar on a daily chart EURGBP.


Momentum

Se usa el indicador Momentum para medir la magnitud del cambio en el precio en un intervalo de tiempo.
https://www.metatrader5.com/en/terminal/help/indicators/oscillators/momentum
Prototipo de la función:

double iMomentum( string symbol, int timeframe, int period, int applied_price, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • period – el número de barras que se usan para averiguar el valor promedio.
  • applied_price – establece el tipo de precio que hay que utilizar (el que se va a promediar) Se puede elegir el precio entre las siguientes constantes predefinidas:
    • PRICE_CLOSE - precio de cierre
    • PRICE_OPEN - precio de apertura
    • PRICE_HIGH - precio máximo
    • PRICE_LOW - precio mínimo
    • PRICE_MEDIAN - precio medio, (high+low)/2
    • PRICE_TYPICAL - el precio típico, (high+low+close)/3
    • PRICE_WEIGHTED - precio ponderado de cierre, (high+low+close+close)/4
  • shift – establece la barra en la cual hay que utilizar el indicador.

Ejemplos de uso:



double m;
 
m=iMomentum(0,0,12,PRICE_CLOSE,1);
// momentum of the last but one bar on the active chart and period. Use 
// 12 bars and close price for finding a mean value. 

m=iMomentum("EURUSD",PERIOD_D1,21,PRICE_OPEN,0);
// momentum of the last bar on a daily chart EURUSD. Use 
// 21 bars and open price for finding a mean value. 

m=iMomentum("USDCAD",PERIOD_H1,7,PRICE_MEDIAN,1);
// momentum of the last but one bar on an hour chart USDCAD. Use 
// 7 bars and average price for finding a mean value.


Money Flow Index (MFI)

Se usa el indicador Money Flow Index (MFI) (índice del flujo monetario) para medir la intensidad de las inversiones.
https://www.metatrader5.com/en/terminal/help/indicators/volume_indicators/mfi
Prototipo de la función:

double iMFI( string symbol, int timeframe, int period, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • period – el número de barras que se usan para averiguar el valor promedio.
  • shift – establece la barra en la cual hay que utilizar el indicador.

Ejemplos de uso:


double mfi;
 
iMFI(0,0,14,1);
// intensity of investments of the last but one bar on the current chart and period.
// Use 14 bars to find the mean value. 

iMFI("EURGBP",PERIOD_H4,32,0);
// intensity of investments of the last bar on 4-hour chart EURGBP.
// Use 32 bars to find the mean value. 

iMFI("EURUSD",PERIOD_W1,9,1);
// intensity of investments of the last but one bar on a weekly chart EURUSD.
// Use 9 bars to find the mean value.


Moving Average (MA)

El indicador Moving Average (MA) (promedio móvil) muestra el precio promedio en un intervalo de tiempo determinado.
https://www.metatrader5.com/en/terminal/help/indicators/trend_indicators/ma
Prototipo de la función:

double iMA( string symbol, int timeframe, int period, int ma_shift, 
            int ma_method, int applied_price, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • period – el número de barras que se usan para averiguar el valor promedio.
  • ma_shift – desplaza las líneas del indicador. Si es positivo, se desplaza la línea hacia la derecha. De lo contrario, se desplaza hacia la izquierda.
  • ma_method – determina el método para obtener los promedios. Se puede elegir el método entre las siguientes constantes predefinidas:
    • MODE_SMA - promedio móvil simple
    • MODE_EMA - promedio móvil exponencial
    • MODE_SMMA - promedio móvil suavizado
    • MODE_LWMA - promedio móvil ponderado linealmente
  • applied_price – establece el tipo de precio que hay que utilizar (el que se va a promediar) Se puede elegir el precio entre las siguientes constantes predefinidas:
    • PRICE_CLOSE - precio de cierre
    • PRICE_OPEN - precio de apertura
    • PRICE_HIGH - precio máximo
    • PRICE_LOW - precio mínimo
    • PRICE_MEDIAN - precio medio, (high+low)/2
    • PRICE_TYPICAL - el precio típico, (high+low+close)/3
    • PRICE_WEIGHTED - precio ponderado de cierre, (high+low+close+close)/4
  • shift – establece la barra en la cual hay que utilizar el indicador.

Ejemplos de uso:


double ma;
 
ma=iMA(
0,0,13,0,MODE_SMA,PRICE_CLOSE,0);
// moving average of the last bar on the active chart and period.
// Use 13 bars and close price for finding simple moving average.
// Shift is not used. 

ma=iMA("GOLD",PERIOD_M15,21,6,MODE_LWMA,PRICE_LOW,1);
// moving average of the last but one bar on 15-minute chart GOLD.
// Use 21 bars and minimal price for finding linearly-weighted moving average.
// Shift: 6 bars.

ma=iMA("EURCHF",PERIOD_D1,18,4,MODE_SMMA,PRICE_TYPICAL,0);
// moving average of the last bar on a daily chart EURCHF.
// Use 18 bars and typical price for finding smoothed moving average.
// Shift: 4 bars.


Average Convergence/Divergence (MACD)

Se usa el indicador Average Convergence/Divergence (MACD) (convergencia/divergencia del promedio móvil) para hacer un seguimiento de las tendencias en base a la correlación entre dos promedios móviles.
https://www.metatrader5.com/en/terminal/help/indicators/oscillators/macd
Prototipo de la función:

double iMACD( string symbol, int timeframe, int fast_ema_period, 
              int slow_ema_period, int signal_period, int applied_price,
              int mode, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • fast_ema_period - el número de barras que se usan para calcular el promedio móvil rápido.
  • slow_ema_period - el número de barras que se usan para calcular el promedio móvil lento.
  • signal_period - el número de barras que se usan para calcular la línea de una señal.
  • applied_price – establece el tipo de precio que hay que utilizar (el que se va a promediar) Se puede elegir el precio entre las siguientes constantes predefinidas:
    • PRICE_CLOSE - precio de cierre
    • PRICE_OPEN - precio de apertura
    • PRICE_HIGH - precio máximo
    • PRICE_LOW - precio mínimo
    • PRICE_MEDIAN - precio medio, (high+low)/2
    • PRICE_TYPICAL - el precio típico, (high+low+close)/3
    • PRICE_WEIGHTED - precio ponderado de cierre, (high+low+close+close)/4
  • mode - establece el valor de lo que queremos averiguar. Se puede elegir entre las siguientes constantes:
    • MODE_MAIN - línea principal
    • MODE_SIGNAL - línea de la señal
  • shift – establece la barra en la cual hay que utilizar el indicador.

Se establece lo que tiene que devolver la función mediante el parámetro mode:

Ejemplos de uso:

double ma;
 
ma=iMACD(0,0,9,21,9,PRICE_CLOSE,MODE_MAIN,0);
// value of the main line for the last bar on the active chart and period.
// Bars, used to find mean values of a fast, slow and signal 
// moving average accordingly: 9,21 and 9. Use close price. 

ma=iMACD("EURUSD",PERIOD_H1,21,52,18,PRICE_HIGH,MODE_SIGNAL,1);
// value of the signal line for the last but one bar on an hour chart EURUSD.
// Bars, used to find mean values of a fast, slow and signal 
// moving average accordingly: 21,52 and 18. Use maximal price. 

ma=iMACD("USDCAD",PERIOD_D1,7,13,7,PRICE_MEDIAN,MODE_MAIN,1);
// value of the main line for the last but one bar on a daily chart USDCAD.
// Bars, used to find mean values of a fast, slow and signal 
// moving average accordingly: 7,13 and 7. Use average price.


Moving Average of Oscillator (OsMA)

Se usa el indicador Moving Average of Oscillator (OsMA) (promedio móvil del oscilador) para medir la diferencia entre la línea principal y la línea de la señal del indicador Average Convergence/Divergence (MACD).
https://www.metatrader5.com/en/terminal/help/indicators/oscillators/macd
Prototipo de la función:

double iOsMA( string symbol, int timeframe, int fast_ema_period, int slow_ema_period,
              int signal_period, int applied_price, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • fast_ema_period - el número de barras que se usan para calcular el promedio móvil rápido.
  • slow_ema_period - el número de barras que se usan para calcular el promedio móvil lento.
  • signal_period - el número de barras que se usan para calcular la línea de una señal.
  • applied_price – establece el tipo de precio que hay que utilizar (el que se va a promediar) Se puede elegir el precio entre las siguientes constantes predefinidas:
    • PRICE_CLOSE - precio de cierre
    • PRICE_OPEN - precio de apertura
    • PRICE_HIGH - precio máximo
    • PRICE_LOW - precio mínimo
    • PRICE_MEDIAN - precio medio, (high+low)/2
    • PRICE_TYPICAL - el precio típico, (high+low+close)/3
    • PRICE_WEIGHTED - precio ponderado de cierre, (high+low+close+close)/4
  • shift – establece la barra en la cual hay que utilizar el indicador.

Ejemplos de uso:


double osma;
 
osma=iOsMA(0,0,12,26,9,PRICE_CLOSE,0);
// difference of the last bar on the active chart and period. Bars, used 
// to find mean values for the fast, slow and signal 
// moving average accordingly: 12,26 and 9. Use close price. 

osma=iOsMA("EURUSD",PERIOD_M1,7,13,6,PRICE_OPEN,1);
// difference of the last but one bar on a minute chart EURUSD. Bars, used 
// to find mean values for the fast, slow and signal 
// moving average accordingly: 7,13 and 6. Use open price. 

osma=iOsMA("EURAUD",PERIOD_H1,21,48,18,PRICE_TYPICAL,0);
// difference of the last bar on an hour chart EURAUD. Bars, used 
// to find mean values for the fast, slow and signal 
// moving average accordingly: 21,48 and 18. Use typical price.


On Balance Volume (OBV)

El indicador On Balance Volume (OBV) (balance de volúmenes) relaciona el volumen los cambios de precio de este volumen.
https://www.metatrader5.com/en/terminal/help/indicators/volume_indicators/obv
Prototipo de la función:

double iOBV( string symbol, int timeframe, int applied_price, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • applied_price – establece el tipo de precio que hay que utilizar (el que se va a promediar) Se puede elegir el precio entre las siguientes constantes predefinidas:
    • PRICE_CLOSE - precio de cierre
    • PRICE_OPEN - precio de apertura
    • PRICE_HIGH - precio máximo
    • PRICE_LOW - precio mínimo
    • PRICE_MEDIAN - precio medio, (high+low)/2
    • PRICE_TYPICAL - el precio típico, (high+low+close)/3
    • PRICE_WEIGHTED - precio ponderado de cierre, (high+low+close+close)/4
  • shift – establece la barra en la cual hay que utilizar el indicador.

Ejemplos de uso:


double obv;
 
obv=iOBV(0,0,PRICE_OPEN,0);
// Balance volume of the last bar on the current chart and period. Use open price 

obv=iOBV("GBPCHF",PERIOD_M30,PRICE_CLOSE,1);
// Balance volume of the last but one bar on 30-minutes chart GBPCHF. Use close price. 

obv=iOBV("GBPJPY",PERIOD_H4,PRICE_MEDIAN,0);
// Balance volume of the last bar on 4-hour chart GBPJPY. Use average price.


Parabolic Stop and Reverse system (Parabolic SAR)

Se usa el indicador Parabolic Stop and Reverse system (Parabolic SAR) para analizar las tendencias del mercado e indicar puntos de salida.
https://www.metatrader5.com/en/terminal/help/indicators/trend_indicators/psar
Prototipo de la función:

double iSAR( string symbol, int timeframe, double step, double maximum, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • step - incremento del nivel de parada (stop level), por lo general 0.02.
  • maximum - máximo nivel de parada (stop level), por lo general 0.02.
  • shift – establece la barra en la cual hay que utilizar el indicador.

Ejemplos de uso:


double sar;
 
sar=iSAR(0,0,0.02,0.2,0);
// indicator value for the last bar on the current chart and period.
// Step of stop level increment: 0.02. Maximal stop level: 0.2. 

sar=iSAR("EURUSD",PERIOD_M1,0.03,0.18,1);
// indicator value for the last but one bar on a minute chart EURUSD.
// Step of stop level increment: 0.03. Maximal stop level: 0.18. 

sar=iSAR("EURCHF",PERIOD_H1,0.01,0.15,0);
// indicator value for the last bar on an hour chart EURCHF.
// Step of stop level increment: 0.01. Maximal stop level: 0.15.


Relative Strength Index (RSI)

Se usa el indicador Relative Strength Index (RSI) (índice de fuerza relativa) para predecir una reversión del precio.
https://www.metatrader5.com/en/terminal/help/indicators/oscillators/rsi
Prototipo de la función:

double iRSI( string symbol, int timeframe, int period, int applied_price, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • period – el número de barras que se usan para averiguar el valor promedio.
  • applied_price – establece el tipo de precio que hay que utilizar (el que se va a promediar) Se puede elegir el precio entre las siguientes constantes predefinidas:
    • PRICE_CLOSE - precio de cierre
    • PRICE_OPEN - precio de apertura
    • PRICE_HIGH - precio máximo
    • PRICE_LOW - precio mínimo
    • PRICE_MEDIAN - precio medio, (high+low)/2
    • PRICE_TYPICAL - el precio típico, (high+low+close)/3
    • PRICE_WEIGHTED - precio ponderado de cierre, (high+low+close+close)/4
  • shift – establece la barra en la cual hay que utilizar el indicador.

Ejemplos de uso:



double rsi;
 
rsi=iRSI(0,0,14,PRICE_CLOSE,0);
// indicator value for the last bar on the active chart and period. 
// Use 14 bars and close price to find the mean value. 

rsi=iRSI("USDCAD",PERIOD_M1,9,PRICE_OPEN,1);
// indicator value for the last but one bar on a minute chart USDCAD. 
// Use 9 bars and close price to find the mean value. 

rsi=iRSI("EURAUD",PERIOD_H1,25,PRICE_TYPICAL,0);
// indicator value for the last bar on an hour chart EURAUD. 
// Use 25 bars and typical price to find the mean value.


Relative Vigor Index (RVI)

Se usa el indicador Relative Vigor Index (RVI) (índice de vigor relativo) para definir las señales para comprar y vender. Se recomienda utilizar este indicador con los anteriores par eliminar toda ambigüedad.
https://www.metatrader5.com/en/terminal/help/indicators/oscillators/rvi
Prototipo de la función:

double iRVI( string symbol, int timeframe, int period, int mode, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • period – el número de barras que se usan para averiguar el valor promedio.
  • mode - establece el valor de lo que queremos averiguar. Se puede elegir entre las siguientes constantes:
    • MODE_MAIN - línea principal
    • MODE_SIGNAL - línea de la señal
  • shift – establece la barra en la cual hay que utilizar el indicador.

Se establece lo que tiene que devolver la función mediante el parámetro mode:

Ejemplos de uso:

double rvi;
 
rvi=iRVI(0,0,12,MODE_MAIN,1);
// value of the main line of the last but one bar on the active chart and period. 
// Use 12 bars to find the mean value.
 
rvi=iRVI("EURUSD",PERIOD_D1,21,MODE_SIGNAL,0);
// value of the signal line on the last bar on a daily chart EURUSD. 
// Use 21 bars to find the mean value.
 
rvi=iRVI("GBPJPY",PERIOD_H1,19,MODE_MAIN,1);
// value of the main line on the last but one bar on an hour chart GBPJPY. 
// Use 19 bars to find the mean value.


Standard Deviation

Se usa el indicador Standard Deviation (desviación estándar) para medir la volatilidad del mercado.
https://ta.mql4.com/indicators/trends/standard_deviation
Prototipo de la función:

double iStdDev( string symbol, int timeframe, int ma_period, int ma_shift,
                int ma_method, int applied_price, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • ma_period - el número de barras que se van a utilizar para encontrar las líneas del indicador.
  • ma_shift – desplaza las líneas del indicador en las barras. Si es positivo, se desplaza la línea hacia la derecha. De lo contrario, se desplaza hacia la izquierda.
  • ma_method – determina el método para obtener los promedios. Se puede elegir el método entre las siguientes constantes predefinidas:
    • MODE_SMA - promedio móvil simple
    • MODE_EMA - promedio móvil exponencial
    • MODE_SMMA - promedio móvil suavizado
    • MODE_LWMA - promedio móvil ponderado linealmente
  • applied_price – establece el tipo de precio que hay que utilizar (el que se va a promediar) Se puede elegir el precio entre las siguientes constantes predefinidas:
    • PRICE_CLOSE - precio de cierre
    • PRICE_OPEN - precio de apertura
    • PRICE_HIGH - precio máximo
    • PRICE_LOW - precio mínimo
    • PRICE_MEDIAN - precio medio, (high+low)/2
    • PRICE_TYPICAL - el precio típico, (high+low+close)/3
    • PRICE_WEIGHTED - precio ponderado de cierre, (high+low+close+close)/4
  • shift – establece la barra en la cual hay que utilizar el indicador.

Ejemplos de uso:



double sd;
 
sd=iStdDev(0,0,10,0,MODE_SMA,PRICE_CLOSE,1);
// deviation of the last but one bar on the active chart and period. 
// Use 10 bars and close price to find simple 
// moving average. Shift is not used.
 
sd=iStdDev("EURUSD",PERIOD_D1,21,3,MODE_SMMA,PRICE_MEDIAN,0);
// deviation of the last bar on a daily chart EURUSD. 
// Use 21 bars and average price to find smoothed 
// moving average. Shift: 3 bars.
 
sd=iStdDev("USDCAD",PERIOD_H4,17,2,MODE_EMA,PRICE_OPEN,1);
// deviation of the last but one bar on 4-hour chart USDCAD. 
// Use 17 bars and open price to find exponential
// moving average. Shift: 2 bars.



Stochastic Oscillator

Se usa el indicador Stochastic Oscillator (oscilador estocástico) para definir las señales para comprar y vender.
https://www.metatrader5.com/en/terminal/help/indicators/oscillators/so
Prototipo de la función:

double iStochastic( string symbol, int timeframe, int %Kperiod, 
                    int %Dperiod, int slowing, int method, 
                    int price_field, int mode, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • %K period - número de barras que se usan para generar la línea %K.
  • %D period - número de barras que se usan para generar la línea %D.
  • slowing - valor de ralentización.
  • ma_method – establece el método utilizado para obtener los valores promedios. Se puede elegir el método entre las siguientes constantes predefinidas:
    • MODE_SMA - promedio móvil simple
    • MODE_EMA - promedio móvil exponencial
    • MODE_SMMA - promedio móvil suavizado
    • MODE_LWMA - promedio móvil ponderado linealmente
  • price_field – determina los precios que hay que usar para el cálculo. Se puede elegir el precio entre los siguientes valores predefinidos:
    • 0 - Low/High
    • 1 - Close/Close
  • mode - establece el valor de lo que queremos averiguar. Se puede elegir entre las siguientes constantes:
    • MODE_MAIN - línea principal
    • MODE_SIGNAL - línea de la señal
  • shift – establece la barra en la cual hay que utilizar el indicador.

Se establece lo que tiene que devolver la función mediante el parámetro mode:

Ejemplos de uso:

double s;
 
s=iStochastic(0,0,10,6,6,MODE_SMA,0,MODE_MAIN,0);
// value of the main line for the last bar on the current chart and period. 
// Bars used to calculate lines %K, %D and slowing 
// accordingly: 10, 6 and 6. Method of averaging: simple moving average. 
// Use prices: Low/High.
 
s=iStochastic("EURUSD",PERIOD_M1,6,3,3,MODE_SMMA,1,MODE_SIGNAL,1);
// value of the signal line for the last but one bar on a minute chart EURUSD.
// Bars used to calculate lines %K, %D and slowing 
// accordingly: 6, 3 and 3. Method of averaging: smoothed moving average. 
// Use prices: Close/Close.
 
s=iStochastic("EURGBP",PERIOD_M5,9,7,7,MODE_EMA,0,MODE_MAIN,0);
// value of the main line for the last bar on 5-minute chart EURGBP.
// Bars used to calculate lines %K, %D and slowing 
// accordingly: 9, 7 and 7. Method of averaging: exponential moving average.
// Use prices: Low/High.


Williams’ Percent Range (%R)

Se usa el indicador Williams’ Percent Range (%R) (variación porcentual Williams (%R)) para determinar si hay hay sobreventa o sobrecompra en el mercado.
https://www.metatrader5.com/en/terminal/help/indicators/oscillators/wpr
Prototipo de la función:

double iWPR( string symbol, int timeframe, int period, int shift)

Parámetros:

  • symbol – establece el instrumento financiero (par de divisas) que hay que utilizar para calcular los valores del indicador técnico. Usamos NULL (o 0) si queremos el instrumento (gráfico) actual (activo).
  • timeframe – establece el periodo de tiempo en el cual hay que utilizar el indicador Usamos 0 para el período actual o alguna de las constantes (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • period – el número de barras que se usan para averiguar el valor promedio.
  • shift – establece la barra en la cual hay que utilizar el indicador.

Ejemplos de uso:


double wpr;
 
wpr=iWPR(0,0,14,1);
// overbought: the last but one bar on the active chart and period.
// Use 14 bars to get the mean value.
 
wpr=iWPR("USDCHF",PERIOD_D1,9,0);
// overbought: The last bar on a daily chart USDCHF.
// Use 9 bars to get the mean value.
 
wpr=iWPR("GBPJPY",PERIOD_H1,23,1);
// overbought: the last but one bar on an hour chart GBPJPY.
// Use 23 bars to get the mean value.


El uso correcto de las funciones de los indicadores técnicos

Para usar correctamente estas funciones hay que saber con exactitud cómo está dispuesto un indicador y cómo utilizarlo. Por supuesto, tiene que utilizarlos en sus propios Asesores Expertos o indicadores. Aún así, como ejercicio, trate de escribir un script que le indique los puntos de entrada al mercado en base a las señales de algún indicador (el que quiera).

Como ejemplo, vamos a escribir un script que nos muestre los puntos de entrada al mercado en base a las señales de trading del indicador Stochastic Oscillator (oscilador estocástico). Usaremos los siguientes criterios para entrar al mercado:
Comprar si la línea principal sube por encima de la línea de la señal. Vender si la línea principal cae por debajo de la línea de la señal.
Los puntos de entrada llevan círculos en la siguiente figura:

Primero vamos a declarar algunas variables en las cuales vamos a almacenar los valores de la línea de la señal y la línea principal de la barra actual y de la siguiente:

double mainLine;
double prevMainLine;
double signalLine;
double prevSignalLine;

Vamos a averiguar los valores para estas variables:

mainLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_MAIN,0);
prevMainLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_MAIN,1);
signalLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0);
prevSignalLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,1);

Como puede observar, nos limitamos a la última y penúltima barra. Ahora vamos a comprobar si hay señales para comprar o vender:

if(prevMainLine<prevSignalLine && mainLine>signalLine)
   Alert("Signal to buy");
// if the main line was under the signal one and rised over it,
// this is a signal to buy
         
if(prevMainLine>prevSignalLine && mainLine<signalLine)
   Alert("Signal to sell");         
// if the main line was over the signal one and fell bellow it,
// this is a signal to sell

Hemos utilizado operadores de comparación y el operador lógico and (&&). Trate de entenderlo correctamente.
Vamos a poner un bucle para recorrer las últimas cien barras:

for(int a=0;a<100;a++)
{
   mainLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_MAIN,a);
   prevMainLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_MAIN,a+1);
   signalLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,a);
   prevSignalLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,a+1);
 
   if(prevMainLine<prevSignalLine && mainLine>signalLine)
      Alert("Signal to buy");
         
   if(prevMainLine>prevSignalLine && mainLine<signalLine)
      Alert("Signal to sell");         
}

¿Lo ve? Simplemente hemos añadido un contador a partir de un bucle lo usamos para recorrer las barras. Para mayor comodidad, en lugar de cien vamos a declarar la constante BARS_TO_ANALYSE, que va a determinar cuántas barras vamos a analizar. Esta es la última versión del script:

//+------------------------------------------------------------------+
//|                                        showStochasticSignals.mq4 |
//|                                    Antonuk Oleg Copyright © 2007 |
//|                                                   banderass@i.ua |
//+------------------------------------------------------------------+
#property copyright "Antonuk Oleg Copyright © 2007"
#property link      "banderass@i.ua"
 
#define BARS_TO_ANALYSE 100
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{
   double mainLine;
   double prevMainLine;
   double signalLine;
   double prevSignalLine;
      
   for(int a=0;a<BARS_TO_ANALYSE;a++)
   {
      mainLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_MAIN,a);
      prevMainLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_MAIN,a+1);
      signalLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,a);
      prevSignalLine=iStochastic(0,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,a+1);
 
      if(prevMainLine<prevSignalLine && mainLine>signalLine)
         Alert("Signal to buy. Time: ",TimeToStr(Time[a]));
         
      if(prevMainLine>prevSignalLine && mainLine<signalLine)
         Alert("Signal to sell. Time: ",TimeToStr(Time[a]));
   }
   return(0);
}

El siguiente fragmento de código del script le tiene que parecer extraño (si es el caso, es usted un alumno aplicado):

TimeToStr(Time[a])

Esta función toma el número de segundos desde el 1 de enero 1970 y devuelve una cadena con la fecha. La matriz predefinida Time [] devuelve el mismo número de segundos que corresponden a la barra seleccionada. Es la pareja ideal.
Como tarea adicional, trate de añadir un promedio móvil pesado (con un periodo de 200-500) y de este modo filtrar las señales innecesarias: si el precio está por encima de la línea del medio, no venda. Si el precio está por debajo de la línea del medio, no compre.
Bueno, ¿lo consiguió? ¿No? Entonces le dejo algo más información.


Algo nuevo sobre las declaraciones de las variables

Normalmente, declaramos las variables de la siguiente manera:

double maxPrice;
double minPrice;
double lastPrices[100];
 
int maxIndex;
int minIndex;
int levels[10];

No lo haga más así. Hágalo de esta manera:

double maxPrice,
       minPrice,
       lastPrices[100];
 
int maxIndex,
    minIndex,
    levels[10];

Es decir, primero indique el tipo y después los nombres de la variables (matrices) separados por comas. No hay ninguna diferencia, aunque se evitan operaciones innecesarias. Lo mismo con la incialización:

int value1=10,
    value2=12,
    matrix[2][2]={1,2,
                  3,4};


Funciones que devuelven varios valores

¿Existen estas funciones? Claro que sí, las puede escribir usted mismo. Veamos lo que puede hacer.
La función más sencilla que devuelve un valor único:

int func()
{
   return(100);
}

¿Qué pasa si necesitamos distintos tipos de valores al mismo tiempo? Mire aquí:

void SuperFunc(int& valueForReturn1,double& valueForReturn2,string& valueForReturn3)
{
   valueForReturn1=100;
   valueForReturn2=300.0;
   valueForReturn3="it works!!";
}

Ahora vamos a tratar de llamar a esta "increíble" función:

int value1=0;
double value2=0.0;
string value3="";
 
SuperFunc(value1,value2,value3);
MessageBox("value1="+value1+" value2="+value2+" value3="+value3);

Este sería el resultado:

Sólo hay una pequeña diferencia entre esta función y las funciones habituales: en la declaración, ponemos el símbolo & después del argumento. Al poner este símbolo después de un argumento, se puede cambiar su valor dentro de la función y después de hacer la llamada el resultado sigue siendo el mismo. Este procedimiento con los argumentos se llama paso de parámetros por referencia. De este modo podemos devolver tantas variables de distintos tipos como queramos. Vamos a intentar de eliminar el símbolo & en el código anterior y veamos el código:



Un nuevo tipo de comentarios

Sabe crear comentarios de una línea:

// it is a one string comment

Pero a veces resulta más útil comentar un bloque determinado del código para inutilizarlo temporalmente. El método anterior no es muy conveniente para comentarios de 20-30 cadenas. En este caso podemos utilizar los comentarios multilínea:

/*
   it is a multi-line comment.
   Very convenient, try it.
*/


Conclusión

Hoy ha aprendido muchas cosas nuevas. Hemos analizado las funciones matemáticas y trigonométricas, así como las funciones para trabajar con los indicadores técnicos. Hemos visto un ejemplo sencillo sobre cómo hacer el seguimiento de las señales de trading correctamente. Aunque no es muy conveniente usarlas en los scripts y que no se hayan diseñado para este propósito, en las siguientes lecciones verá cómo usarlas en sus propios indicadores y Asesores Expertos. Y entonces verá lo útiles que son en realidad.

Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/1496

Archivos adjuntos |
superFunction.mq4 (1.14 KB)
Cómo implementar sus propios criterios de optimización Cómo implementar sus propios criterios de optimización
En este artículo veremos la implementación de los criterios del beneficio/disminución de fondos, con los resultados resumidos en un archivo desarrollado para el Asesor Experto Moving Average (Promedio móvil).
Plantilla universal de Asesor experto Plantilla universal de Asesor experto
Este artículo ayudará a los más inexpertos en trading a crear Asesores expertos flexibles.
El enfoque orientado a objetos en MQL El enfoque orientado a objetos en MQL
Este artículo puede resultar muy interesante para los programadores que sean principiantes o expertos y que trabajan en el entorno MQL. Me gustaría también que lo leyeran los desarrolladores del entorno MQL, ya que las preguntas que se plantean aquí pueden convertirse en proyectos para las futuras implementaciones de MetaTrader y MQL.
Desarrollo del tester de estrategia limit para probar un AE hedge Desarrollo del tester de estrategia limit para probar un AE hedge
Una idea para probar la Asesor experto hedge utilizando el tester de estrategia.