MQL4 para Novatos IV

Continuamos con la serie sobre el lenguaje MQL. En esta ocasión se abordan las principales funciones de indicadores técnicos que trae incorporadas de serie. Todas las funciones que vamos a ver a continuación constan casi siempre de los siguientes argumentos:

  • symbol – define sobre qué par de divisas o valor se aplicar el indicador. Si queremos que pueda usarse en cualquier gráfico daremos valor NULL (o 0) a este parámetro. Si queremos aplicarlo a un producto determinado deberemos escribir su nombre como una cadena ("EURUSD","GBPUSD" etc.).
  • timeframe – en el segundo argumento se define la escala temporal en la que se va a utilizar el indicador. Si queremos que se utilice el periodo del gráfico sobre el que insertamos el indicador simplemetnte daremos valor 0 a este parámetro. Si queremos especificar el periodo, deberemos utilizar una de las siguientes constantes:

 

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 define cuál será el último valor del indicador que se mostrará en pantalla. Normalmente querremos que nos muestre el último valor del indicador por lo que le asignaremos valor 0, pero si queremos que nos muestre valores anteriores del indicador en la última barra (esto es, queremos retardar el indicador) le asignaremos el valor 1 para mostrar el valor del indicador en la barra anterior, 2 para mostrar su valor hace dos barras, etc.


Asimismo en los indicadores es habitual utilizar valores calculados a partir de los campos que definen una barra, para después promediarlos utilizando un método determinado. Para ello se utilizan los siguientes argumentos:

  • applied_price – define el campo que utilizaremos del precio; para ello utilizaremos las siguientes constantes:
PRICE_CLOSE - Cierre
PRICE_OPEN - Apertura
PRICE_HIGH - Máximo
PRICE_LOW - Mínimo
PRICE_MEDIAN – Precio Medio definido como (Máx+Mín)/2
PRICE_TYPICAL – Precio Típico, calculado como (Máx+Mín+Cierre)/3
PRICE_WEIGHTED – Precio ponderado, obtenido a partir de la siguiente fórmula: (Máx+Mín+Cierre+Cierre)/4
  • ma_method – permite definir el método utilizado para calcular una media móvil. Admite los siguientes valores:
MODE_SMA – Media móvil simple
MODE_EMA - Media móvil exponencial
MODE_SMMA - Media móvil suavizada
MODE_LWMA - Media móvil ponderada linealmente
  • period – define cuántas barras se incluiran para calcular la media
  • ma_shift – permite desplazar la media un número definido de barras. Si el valor introducido es positivo desplazará la media a la derecha el número de barras que hayamos indicado; por el contrario, si el valor es negativo, la media es desplazada a la izquierda.



Las funciones de indicadores que vamos a ver a continuación pueden agruparse en dos categorías: simples, cuando sólo constan de una línea, o complejas, cuando constan de varias líneas. En este último caso, se utilizará el parámetro mode como veremos más adelante..

Pasamos a continuación a ver todas las funciones de indicadores técnicos que incorpora este lenguaje, la forma de utilizarlos y un ejemplo:

Aceleración/Deceleración (AC)
Este indicador mide la velocidad a la que varían los precios.

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

Ejemplo:
double ac;
ac=iAC(0,0,0); // AC aplicado a la última barra en cualquier gráfico de cualquier escala temporal. ac=iAC("GBPUSD",PERIOD_M30,0);
// AC aplicado a la última barra del gráfico de 30 min. del GBPUSD.



Acumulación/Distribución (A/D)

Indicador utilizado para confirmar la tendencia de los precios utilizando el volumen. Debe tener en cuenta que, en el caso de las divisas, Metatrader muestra el volumen negociado por el broker en su red de negociación por lo que no tiene porque ser representativo del volumen negociado a nivel mundial.

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

Ejemplo:
double ad;
ad=iAD("GBPUSD",PERIOD_M5,5); // A/D de hace 6 barras en el gráfico de 5 min. del GBPUSD


Alligator
Indicador desarrollado por Bill Williams que combina 3 medias móviles

Esquema:

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)

Obsérvese que aparte de los habituales symbol, timeframe y shift esta función para controlar el periodo y el desplazamiento de cada una de las tres líneas - mandíbula (jaw), dientes (teeth) y labios (lips) - de que se compone el Alligator.

Asimismo incorpora los parámetros para seleccionar el tipo de media aplicada (ma_method) y el campo del precio sobre el que se aplicará (applied_price).

Finalmente si miramos la estructura tenemos un parámetro adicional del que por ahora sólo habíamos hecho mención: mode. Las constantes que admite este parámetro varían dependiendo de la función que la utilice y sirve generalmente para seleccionar, en el caso de los indicadores de tipo complejo, la línea con la que queremos trabajar. En el caso del Alligator admite los siguientes valores:

MODE_GATORJAW - Mandíbula del Alligator (línea azul)
MODE_GATORTEETH - Dientes del Alligator (línea roja)
MODE_GATORLIPS - Labios del Alligator (línea verde)

Ejemplo:
double teeth;  
teeth=iAlligator(“EURUSD”,PERIOD_H1,128,96,64,0,0,0,MODE_EMA,
PRICE_TYPICAL,MODE_GATORTEETH,0);
// Calcula los "dientes" línea roja) en un gráfici horario del EURUSD.  
// Para ell utiliza una media móvil exponencial aplicada a precio típico
// Los periodos utilizados para el indicador son 128, 96 y 64. No se aplica desplazamiento.  


Average Directional Movement Index (ADX)
Este indicador se utiliza para detectar si hay o no tendencia.

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

En este indicador, el parámetro mode admite los siguientes valores:

MODE_MAIN - Línea principal del indicador
MODE_PLUSDI - Línea +DI
MODE_MINUSDI - Línea –DI

Ejemplo:
double plusDi;
plusDi=iADX(“USDCAD”,PERIOD_M1,6,PRICE_OPEN,MODE_PLUSDI,0);
// Calcula el valor de la línea +DI en el gráfico de 1 min del USDCAD utilizando
// un periodo de 6 barras y tomando las aperturas de cada barra.


Average True Range (ATR)
Este indicador permite medir la volatilidad del mercado

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

Ejemplo:
double atr;
atr=iATR(0,0,15,0); // ATR de 15 periodos del gráfico y escala temporal que deseemos.


Awesome Oscillator (AO)
Desarrollado por Bill Williams, permite determinar el momentum del mercado

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

Ejemplo:
double ao;
ao=iAO(“EURAUD”,PERIOD_W1,1);
// AO de la penúltima barra calculado en el gráfico semanal del EURAUD.


Bears Power
Este indicador trata de estimar el potencial bajista del mercado

Esquema: double iBearsPower(string symbol,int timeframe,int period,int applied_price,int shift

Ejemplo:
double bep;
bep=iBearsPower("EURUSD",PERIOD_M5,32,PRICE_CLOSE,1);
// Bears Power de la penúltima barra calculado sobre 32 cierres
// en un gráfico de 5 min. del EURUSD


Bollinger Bands (BB)
Se trata del conocido indicador de John Bollinger, con el que se pretende establecer un rango de movimiento probable para el precio

Esquema:

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

Como puede apreciarse tenemos dos parámetros adicionales: deviation, con el que se controla la amplitud de las bandas y bands_shift, con el que es posible desplazar las bandas. Por supuesto, también contamos con el parámetro mode, que admite los siguientes valores:

MODE_UPPER - Línea superior
MODE_LOWER - Línea inferior

Ejemplo:
double bb;
bb=iBands(0,0,20,2,0,PRICE_LOW,MODE_LOWER,0);

// Banda inferior de Bollinger calculada hasta la última barra
// de cualquier periodo y escala. Utiliza 20 barras para la media
// que se calcula sobre los mínimos y la desviación utilizada es 2


Bulls Power
Este indicador trata de estimar el potencial alcista del mercado

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

Ejemplo:
double bup;
bup=iBullsPower(0,0,10,PRICE_CLOSE,1);
// Bears Power de la penúltima barra calculado sobre 10 cierres
// en un gráfico y escala cualesquiera.


Commodity Channel Index (CCI)
El CCI se utiliza para medir la desviación del precio con respecto a su media

Esquema: double iCCI( string symbol, int timeframe, int period, int applied_price, int shift

Ejemplo:
double cci;
cci=iCCI(0,0,14,PRICE_TYPICAL,0);
// CCI de 14 periodos calculado sobre el precio típico
// para cualquier gráfico y escala.


DeMarker (DeM)
Creado por Tom DeMark, este indicador intenta predecir un giro de mercado basándose en la diferencia del precio con respecto a barras anteriores.

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

Ejemplo:
double dm;
dm=iDeMarker("EURJPY",PERIOD_H4,51,1);
// Calcula el DeMarker hasta la penúltima barra en un gráfico de 4 horas
// del EURJPY utilizando un 51 barras.


Envelopes
Con este oscilador es posible crear envolventes del precio en base a una media móvil.

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

Aquí aparece el parámetro deviation con el que se controla la amplitud de la envolvente en términos porcentuales (por ejemplo, si asignamos el valor 0.25 diremos que sume y reste el 25% del precio a la media móvil).

Asimismo, dado que el indicador consta de dos líneas, disponemos del parámetro mode para seleccionar la línea que deseemos, utilizando par ello los siguientes valores:

MODE_UPPER - Línea superior
MODE_LOWER - Línea inferior

Ejemplo:
double envel;
envel=iEnvelopes(0,0,21,MODE_SMA,0,PRICE_CLOSE,0.05,MODE_LOWER,0);
// Banda inferior de la envolvente calculada usando una media simple de 21 periodos
// y una desviación del 5% para cualquier gráfico y escala


Force Index (FRC)
Este indicador trata de medir la fuerza de la tendencia.

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

Ejemplo:
double force;
force=iForce("EURGBP",PERIOD_M5,21,MODE_LWMA,PRICE_HIGH,1);
// FRC de 21 periodos calculado hasta la penúltima barra usando una media
// linealmente ponderada de los máximos del gráfico del EURGBP en 5 min.



Fractals
Se trata de otro de los indicadores de Bill Williams, utilizado para detectar suelos y techos. Dado que el fractal no se da en todas las barras, esta función devuelve el valor cero mientras no se produzca el patrón.

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

Esta función dispone del parámetro mode para seleccionar el tipo de fractal:

MODE_UPPER - Fractales bajistas (techo de mercado)
MODE_LOWER - Fractales alcistas (suelo de mercado)

Ejemplo:
double frac;
frac=iFractals("USDJPY",PERIOD_D1,MODE_UPPER,0);
// Fractales bajistas en la última barra de un gráfico diario del USDJPY.


Gator Oscillator
El Gator Oscillator se utiliza para mediar el grado de convergencia o divergencia entre las líneas que componen el Alligator.

Esquema:

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)

Dado que se basa en el Alligator, aparecen los parámetros para modificar sus mandíbulas, dientes y labios. Asimismo cuenta con el parámetro mode para seleccionar la parte del histograma que nos interese:

MODE_UPPER - Histograma positivo (verde)
MODE_LOWER - Histograma negativo (rojo)


Ejemplo:
double gator;
gator=iGator(0,0,13,8,8,0,0,0,MODE_SMA,PRICE_CLOSE,MODE_UPPER,0);
// Histograma positivo calculado sobre el Alligator de periodos 13,8,8
// utilizando una media móvil simple de los cierres.

 
Ichimoku Kinko Hyo
Se trata del conocido conjunto de líneas japonés

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

Como puede observarse cuenta con los parámetros para controlar el periodo de cada una de las líneas que compone el indicador y un parámetro mode para seleccionar la línea que nos interese:

MODE_TENKANSEN - Tenkan-sen
MODE_KIJUNSEN - Kijun-sen
MODE_SENKOUSPANA - Senkou Span A
MODE_SENKOUSPANB - Senkou Span B
MODE_CHINKOUSPAN - Chinkou Span

Ejemplo:
double ichi;
ichi=iIchimoku(0,0,13,21,53,MODE_KIJUNSEN,0);
// Valor del Kijun-sen tomando periodos 13, 21, 53.



Market Facilitation Index (BW MFI)
Creado por Bill Williams, este indicador muestra el cociente entre el rango de la barra y el volumen negociado en dicha barra.

Esquema: double iBWMFI( string symbol, int timeframe, int shift

Ejemplo:
double bwmfi;
bwmfi=iBWMFI(0,0,0); // BWMFI calculado para la última barra del chart que tenemos en pantalla.


Momentum
El Momentum permite calcular la variación entre dos cierres separados x barras

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

Ejemplo:
double mom;
mom=iMomentum(0,0,12,PRICE_CLOSE,1);
// Momentum de 12 periodos calculado hasta la penúltima barra.


Money Flow Index (MFI)
Este indicador mide la entrada y salida de dinero en el mercado

Esquema: double iMFI( string symbol, int timeframe, int period, int shift

Ejemplo:
double mfi;
mfi = iMFI(0,0,14,0);
// Calcula un MFI de 14 periodos para el gráfico actual.


Moving Average (MA)
Calcula una media móvil utilizando el método indicado sobre el campo del precio que deseemos.

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

Ejemplo:
double ma;
ma=iMA("EURCHF",PERIOD_M15,21,6,MODE_LWMA,PRICE_LOW,1);
// Calcula la media móvil linealmente ponderada de 21 periodos en el gráfico de 15 min.
// del EURCHF hasta la penúltima barra y la desplaza 6 barras hacia la derecha.


Moving Average Convergence/Divergence (MACD)
El MACD es un indicador que trata de determinar la tendencia en base a dos medias exponenciales.

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

En este esquema los parámetros fast_ema_period, slow_ema_period y signal_period controlan el valor de las medias moviles utilizadas en el indicador. Asimismo el parámetro mode permite seleccionar la línea que nos interese asignando uno de estos valores:

MODE_MAIN - Línea principal
MODE_SIGNAL - Línea Signal

Ejemplo:
double ma;
ma=iMACD(0,0,9,21,9,PRICE_CLOSE,MODE_MAIN,0);
// Valor de la línea principal del MACD en el gráfico actual, utilizando parámetros, 9, 21 y 9.


Moving Average of Oscillator (OsMA)
El OsMA permite calcular la diferencia entre la línea principal y la línea signal del MACD

Esquema:

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

Ejemplo:
double osma;
osma=iOsMA(0,0,12,26,9,PRICE_CLOSE,0);
// OsMA de un MACD de periodos 12,26,9


On Balance Volume (OBV)
Indicador que relaciona el comportamiento del precio con el volumen

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

Ejemplo:

double obv;
obv=iOBV(0,0,PRICE_OPEN,0);
// OBV calculado hasta la última barra utilizando la apertura.


Parabolic Stop and Reverse system (Parabolic SAR)
El Parabolic SAR es un indicador que permite definir la tendencia y puntos de entrada y salida.

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

Incorpora los parámetros habituales en este indicador: step para definir la aceleración y maximum para fijar el tope de la aceleración.

Ejemplo:
double sar;
sar=iSAR(0,0,0.02,0.2,0);
// Parabolic SAR con aceleración 0.02 y tope 0.2.


Relative Strength Index (RSI)
Se trata del conocido indicador de Welles Wilder para detectar puntos de giro en el mercado.

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

Ejemplo:
double rsi; 
rsi=iRSI("USDCAD",PERIOD_M1,9,PRICE_OPEN,0);
// Calcula un RSI de 9 periodos en el gráfico de 1 min. del USDCAD utilizando
// datos de apertura.



Relative Vigor Index (RVI)
EL RVI es un indicador muy similar al Estocástico que trata de detectar giros de mercado.

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

El indicador consta de dos líneas por lo que requiere del parámetro mode, que admite los siguientes valores:

MODE_MAIN - Línea principal
MODE_SIGNAL - Línea signal

Ejemplo:
double rvi;
rvi=iRVI(0,0,12,MODE_MAIN,1);
// Calcula la línea principal de un RVI de 12 periodos hasta la penúltima barra.


Standard Deviation
Con este indicador se calcula la desviación típica del mercado, con objeto de medir su volatilidad.

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

Ejemplo:
double sd;
sd=iStdDev(0,0,10,0,MODE_SMA,PRICE_CLOSE,0);
// Calcula la desviación típica de 10 periodos utilizando una media movil simple.


Stochastic Oscillator
El Estocástico es un indicador con el que se intenta detectar puntos de giro del mercado.

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

Aquí aparecen algunos parámetros que controlan el comportamiento del Estocástico: así %Kperiod es el periodo de la línea %K, %Dperiod es el de la línea %D y slowing es el periodo de la media móvil que suaviza la línea %D.

Por su parte, el parámetro price_field admite dos valores: 0, para tomar mínimos y máximos en el cálculo, ó 1 si queremos que sólo utilice los cierres.

Finalmente dado que el Estocástico consta de dos líneas contamos con el parámetro mode que admite los siguientes valores:

MODE_MAIN - Línea principal
MODE_SIGNAL - Línea Signal

Ejemplo:
double s;
s=iStochastic(0,0,10,6,6,MODE_SMA,0,MODE_MAIN,0);
// Calcula el valor de la línea principal del Estocástico de parámetros 10,6,6
// Para ello, utiliza una media simple y máximos y mínimos


Williams’ Percent Range (%R)
Indicador que funciona de manera similar al Estocástico desarrollado por Larry Williams

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

Ejemplo:
double wpr;
wpr=iWPR("USDCHF",PERIOD_D1,9,0);
// Calcula un WPR de 9 periodos en el gráfico diario del USDCHF.

 

(Continuará...)

Un saludo,
X-Trader 


Artículos Relacionados


Backtesting y Optimización en Metatrader

Backtesting y Optimización en Metatrader

¿Cómo pongo a prueba mi estrategia en Metatrader? ¿Cómo optimizo los parámetros de una estrategia con esta plataforma? Posiblemente son algunas de las preguntas que más lectores me hacen. Las...

Metatrader en Modo Multipantalla II

Metatrader en Modo Multipantalla II

En este artículo, os damos la solución definitiva para “sacar” los gráficos fuera de la ventana de Metatrader 4.

Mostrar Histórico de Operaciones en Metatrader

Mostrar Histórico de Operaciones en Metatrader

En este artículo os explicamos los pasos a seguir en Metatrader para mostrar todas las operaciones realizadas en el histórico sobre el gráfico.

Redes Neuronales en Metatrader II

Redes Neuronales en Metatrader II

Seguramente recuerden un artículo que publiqué hace unos años sobre la librería FANN para Metatrader que permitía entrenar redes neuronales para filtrar señales de Expert Advisors y para reconocer...

MT4 Floating Charts

MT4 Floating Charts

Hace unos años Mans nos explicaba cómo poner Metatrader en modo Multipantalla pero gracias a un amigo acabo de encontrar un software aún más potente para estos menesteres y que se integra...

Fijar Spread en MT4

Fijar Spread en MT4

Muy interesante y práctica la herramienta que han desarrollado en el blog de VabRusFX: se trata de un script que permite fijar el spread a la hora de hacer backtests para no llevarnos sorpresas...