En este artículo veremos cómo poder realizar un estudio rápido a la hora de analizar una estrategia.
Cuando leemos un estudio o nos cuentan la bonanza de una estrategia, ¿llegamos a realizar un estudio profundo? o ¿realizamos un acto de fe? y nos lanzamos a operar. Es muy importante, antes de poner en práctica una estrategia de trading, realizar un estudio profundo y estudiar hasta el más mínimo detalle, sin creernos nada sin antes probarlo. Para el estudio de estrategias o teorías que vemos en los distintos medios uno de los mejores lenguajes, por lo extendido, rápido de ejecución y técnico, es el mql4 diseñado para la plataforma Metatrader.
Voy a intentar mostrar cómo realizar un estudio rápido y muy útil gracias a este lenguaje. Para ello empezaremos a programar una script para Metatrader.
Para poder realizar el estudio hay que instalarse cualquier plataforma Metatrader. Una vez abierta la plataforma correctamente abrir la pestaña de “Herramientas” y seleccionar “Editor MetaQuotes” o Metaeditor. Se abrirá pantalla del editor donde tendremos que desarrollar nuestro programa. Dentro del editor ir a “Archivo” y pinchar sobre “Nuevo”. Nos saltará la pantalla de bienvenida al asistente de Expert Advisor. Seleccionar “Script” y dar a “Siguiente”. (Ver Figura1).
Rellenar el nombre de la script, por ejemplo: “estudio mejor media tendencial” y los demás campos. Le damos a “Finalizar” y nos aparecerá en el editor nuestra script a programar (Ver Figura 2).
El objetivo del estudio será encontrar la media que mejor determina la tendencia de cualquier activo en los diferentes espacios temporales, sin dar por sentado toda la literatura que hay al respecto.
Para ello vamos a realizar un programa que cuenta el número de velas alcistas por encima de la media y el número de velas bajistas por debajo de la media. La mejor media para operar será aquella que sea capaz de separar el mayor numero de velas bajistas por debajo y alcistas por encima. Como parámetros a estudiar más importantes tendremos el periodo de la media y el tipo de media. Por tanto estas variables las pondremos en la script como variables externas:
extern int PERIODO = 200;
extern int TIPO_MEDIA = 0;
Como datos internos al código necesitamos leer del grafico el cierre (CLOSE) y la apertura (OPEN)de la vela en estudio del grafico actual, ese dato lo leemos con las instrucciones:
OPEN=iOpen(Symbol(),0,i); CLOSE=iClose(Symbol(),0,i);
Otro dato a calcular es el valor de la media en la vela correspondiente:
MEDIA=iMA(0,0,PERIODO,0,TIPO_MEDIA,PRICE_WEIGHTED,i);
Si nos colocamos sobre una palabra clave del código (son aquellas que tienen color distinto del negro) y pulsamos F1 el editor nos dará la información necesaria sobre qué argumentos o parámetros requiere esa palabra clave.
Si lo pulsamos F1 sobre iOpen o sobre iClose veremos que Symbol() nos permite leer sobre el gráfico de cualquier activo, 0 sobre el periodo actual que se tenga en el gráfico y el parámetro i nos determina la vela de la que leemos el el cierre y la apertura.
Si nos colocamos sobre iMA nos definirá los argumentos necesarios para calcular la media:
El primer argumento es el símbolo sobre el que calcular la media, 0 nos calcula la media sobre el activo del grafico abierto.
El segundo es el periodo sobre el que hacemos el cálculo, 0 nos la calcula sobre el periodo actual del grafico.
El tercero es el periodo de la media.
El cuarto es el desplazamiento de la media: 0 sin desplazamiento.
El quinto es el tipo de media: simple(0), exponencial(1) , suavizada (2) o de regresión (3).
El sexto es el tipo de precio que vamos utilizar para realizar el cálculo: cierre(0), apertura(1), máximo(2), minimo(3), medio(4), tipico(5): [máx+min+cierre]/3 y ponderado (6):
(máx+min+cierre+cierre]/4
Para realizar la suma de las velas alcistas y bajistas realizaremos un bucle “for” para todas las velas del grafico a partir de las necesarias para calcular el valor de la media que hemos dado como parámetro externo hasta la última vela que tiene el grafico: vela 0.
for ( int i=(Bars-PERIODO); i>=0;i–)
Dentro de este bucle sumaremos las velas alcistas que tengamos por encima de la media con la condición:
if( CLOSE>OPEN && CLOSE>MEDIA) VELAS_ALCISTAS=VELAS_ALCISTAS+1;
Y sumaremos las velas bajistas:
if( CLOSE
Por último sacaremos por pantalla los datos calculados y las barras muestreadas:
Alert(“VELAS_ALCISTAS: “,VELAS_ALCISTAS);
Alert(“VELAS_BAJISTAS: “,VELAS_BAJISTAS);
Alert(“VELAS_analizadas: “,Bars-PERIODO);
Por lo que el código definitivo quedara de la siguiente forma:
//+——————————————————————+ //| estudio mejor media tendencial.mq4 | //| Copyright © 2012, Jose Maria Muñumel | //+——————————————————————+ #property copyright “Copyright © 2012, Jose Maria Muñumel”
#property show_inputs
extern int PERIODO = 200;
extern int TIPO_MEDIA = MODE_SMA;
//+——————————————————————+ //| script program start function | //+——————————————————————+ int start()
{
double OPEN,CLOSE,MEDIA;
int VELAS_ALCISTAS,VELAS_BAJISTAS;
for ( int i=(Bars-PERIODO); i>=0;i–)
{
OPEN=iOpen(Symbol(),0,i);
CLOSE=iClose(Symbol(),0,i);
MEDIA=iMA(0,0,PERIODO,0,TIPO_MEDIA,PRICE_WEIGHTED,i);
if( CLOSE>OPEN && CLOSE>MEDIA) VELAS_ALCISTAS=VELAS_ALCISTAS+1;
if( CLOSE
}
Alert(“ “);
Alert(“ “);
Alert(“ “);
Alert(“VELAS_ALCISTAS: “,VELAS_ALCISTAS);
Alert(“VELAS_BAJISTAS: “,VELAS_BAJISTAS);
Alert(“VELAS_analizadas: “,Bars-PERIODO);
return(0);
}
Ya sólo queda compilar el código. Pinchar sobre “Compilar” en el Metaeditor y si no hemos escrito algún símbolo mal nos aparecerá en la parte inferior del código “0 errores, 0 alertas”. En este momento ya tenemos la script lista para realiza nuestro estudio. (Ver Figura 3).
Para lanzar la script sobre el código ir a la plataforma Metatrader y en el “Explorador” seleccionar “Script”. Arrastrando la script programada sobre el grafico nos abrirá la pantalla de las Figuras 4 y 5.
Una vez lanzada la script aparecerá la siguiente información (Ver Figura 6).
Ahora solo tenemos que ir variando el tipo de media y el periodo para encontrar que media es la que tiene más velas alcistas por encima y bajistas por abajo.
Como variación a ese código se puede contar el número de velas alcistas por debajo y de bajistas por encima de la media y que añade más datos al estudio. Lo muestro en el código siguiente:
//+——————————————————————+ //| estudio mejor media tendencial.mq4 | //| Copyright © 2012, Jose Maria Muñumel | //+——————————————————————+ #property copyright “Copyright © 2012, Jose Maria Muñumel”
#property show_inputs
extern int PERIODO = 200;
extern int TIPO_MEDIA = MODE_SMA;
//+——————————————————————+ //| script program start function | //+——————————————————————+ int start()
{ double OPEN,CLOSE,MEDIA;
int VELAS_ALCISTAS_encima,VELAS_BAJISTAS_encima;
int VELAS_ALCISTAS_debajo,VELAS_BAJISTAS_debajo;
for ( int i=(Bars-PERIODO); i>=0;i–)
{ OPEN=iOpen(Symbol(),0,i);
CLOSE=iClose(Symbol(),0,i);
MEDIA=iMA(0,0,PERIODO,0,TIPO_MEDIA,PRICE_WEIGHTED,i);
if( CLOSE>OPEN && CLOSE>MEDIA) VELAS_ALCISTAS_encima=VELAS_ALCISTAS_encima+1;
if( CLOSE>OPEN && CLOSE<MEDIA) VELAS_ALCISTAS_debajo=VELAS_ALCISTAS_debajo+1;
if( CLOSE
if( CLOSEMEDIA) VELAS_BAJISTAS_encima=VELAS_BAJISTAS_encima+1;
}
Alert(“ “);
Alert(“ “);
Alert(“ “);
Alert(“ “);
Alert(“VELAS_ALCISTAS_encima: “,VELAS_ALCISTAS_encima);
Alert(“VELAS_ALCISTAS_debajo: “,VELAS_ALCISTAS_debajo);
Alert(“VELAS_BAJISTAS_debajo: “,VELAS_BAJISTAS_debajo);
Alert(“VELAS_BAJISTAS_encima: “,VELAS_BAJISTAS_encima);
Alert(“VELAS_analizadas: “,Bars-PERIODO);
return(0);
}
Si lanzamos la script aparecerán los datos que se muestran en la Figura 7.
Ya sólo queda ir probando medias para encontrar la que nos detecte mayor número de alcistas por encima y bajistas por debajo. En el siguiente artículo completaremos el código aquí descrito para buscar la mejor de las medias de forma automática.