nav-left cat-right
cat-right

El primer indicador

semaforled

En MetaTrader hay tres tipos de programas: Experts Advisors (EA), indicadores y scripts. Cada tipo tiene su propósito y características particulares:

  • Experts Advisors (EA): El proposito principal de un Expert Advisor es ejecutar operaciones automáticamente. La ejecución se realiza tick a tick (a cada actualización de la cotización). Los EA pueden tomar datos de los indicadores y analizarlos para tomar sus decisiones. Múltiples EA pueden ser ejecutados simultaneamente y pueden comunicarse entre sí.
  • Indicadores: Analizan los datos de la cotización y muestran esa información gráficamente o mediante alertas sonoras. Se ejecutan de forma continuada tick a tick como los EA. El indicador es el único de los tres tipos de progama que no puede operar.
  • Scripts: Se ejecutan una única vez. Se utilizan normalmente para ejecutar acciones comunes como cerrar de golpe todas las posiciones abiertas.

Estos son los tres tipos básicos de programas en MQL4 para MetaTrader, hay también otros más avanzados como las librerías, pero éstas las dejaremos por ahora.

En este artículo vamos a programar paso a paso un indicador muy simple, este indicador abrirá una nueva ventana adjunta a la gráfica de cotización en la que mostrará la diferencia en valor absoluto entre el precio de apertura de una barra y el precio de cierre. ¡Manos a la obra!

primerindicador1

Se puede descargar el código del indicador y colocarlo en la carpeta “C:\Archivos de Programa\Metatrader\experts\indicators” o escribirlo desde cero. Para esto abrimos el MetaEditor con F4 y seleccionando “File >> New” creamos un nuevo “Custom indicator”, MetaEditor generará una plantilla de código muy útil pero que de momento podemos vaciar borrando todo el contenido para poder empezar desde cero.

Las primeras lineas de código que escribiremos son:

// Licencia
#property copyright "GNU GPL v3.0 Programando Forex"
#property link      "http://www.programandoforex.com"
 
// Propiedades generales
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
 
// Buffers
double ExtMapBuffer1[];

Veamos qué significan estas lineas de código. Aquí lo importante son las propiedades generales y el buffer.

#property indicator_separate_window

Esta propiedad define si el indicador se va a dibujar sobre la gráfica de cotización o en una ventanita aparte, debajo de la gráfica. En nuestro caso queremos una ventana separada.

#property indicator_buffers 1
#property indicator_color1 Red
 
// Buffers
double ExtMapBuffer1[];

A continuación estas propiedades indican que vamos a utilizar un buffer gráfico para dibujar el indicador y que va a ser de color rojo. La última linea crea ese buffer. En próximos artículos describiremos los buffers gráficos, por ahora sabemos que ahí se va a guardar la información necesaria para dibujar la linea.

Ahora ya tenemos declaradas las variables principales, a continuación tenemos que darles un valor (inicializarlas). Como su nombre indica la función init() se ejecuta una única vez al inicio del programa indicador. Dentro de esta función inicializaremos las variables, como el estilo de dibujo de la linea del indicador. Además esta función tiene su contrapartida en la función deinit(), que se ejecuta cuando eliminamos un indicador de la gráfica, deinit() es el lugar indicado donde colocar código que borre lineas y dibujos de la gráfica, pero en este primer ejemplo no lo vamos a necesitar.

// Esto se ejecuta al cargar el indicador
int init()
  {
   // Propiedades gráficas
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
 
   // Mostrar una linea de texto sobre el indicador
   string nombre = "¡El primer indicador funcionando!";
   IndicatorShortName(nombre);
 
   return(0);
  }

La primera linea especifica que el buffer número 0 (el primero) se va a dibujar como una linea (DRAW_LINE), también se pueden dibujar histogramas y otros símbolos. La segunda símplemente mapeará el indicador 0 en el buffer de nombre ExtMapBuffer1.

Finalmente llegamos a la función start() que se va a ejecutar cada tick.

int start()
  {
   // Variables
   double vOpen, vClose;
 
   // Contar número de barras
   int counted_bars = IndicatorCounted();
   int pos = Bars - counted_bars;
 
   // Para cada barra dar un valor en el buffer
   while(pos>=0)
   {
      vOpen = Open[pos];
      vClose = Close[pos];
      ExtMapBuffer1[pos]= MathAbs(vOpen - vClose);
 
      pos--;
   }
 
   return(0);
  }

Aquí hay dos funciones muy importantes IndicatorCounted() y Bars. La función start() va a ir recorriendo desde la primera barra (la más antigua) hacia adelante, todas las barras que hay en la gráfica. Por eso necesitamos saber mediante Bars cuántas barras se muestran en la gráfica y con IndicatorCounted() cuántas hemos leido ya. Restando los valores de ambas funciones sabremos en qué posición estamos.

En las primeras lineas definimos dos variables en las que guardar los valores de la cotización. Por cada barra queremos saber el precio de apertura: Open[] y de cierre: Close[]. Para cada barra guardaremos esos valores en las variables vOpen y vClose.

ExtMapBuffer1[pos]= MathAbs(vOpen - vClose);

Por último en esta linea asignamos la diferencia del precio de apertura y de cierre (en valor absoluto: MathAbs()) a la posición del buffer correspondiente. MetaTrader se encargará de dibujar la linea leyendo cada valor de este buffer.

Con esto ya tenemos listo nuestro primer indicador, lo compilamos pulsando F5 y si lo hemos hecho todo bien aparecerá un mensaje informando que no ha habido errores. A continuación en nuestra ventana de MetaTrader en “Navigator>>Custom Indicators” aparecerá el indicador. Sólo tenemos que hacer doble click o arrastrarlo hasta un gráfico de cotización para verlo funcionar.

Espero que esta primera introducción haya sido útil, es un indicador muy simple y que aporta poca o nula información… en un próximo artículo lo complicaremos un poco más.

Artículos Relacionados

  1. Utilizar indicadores en un EA con iCustom
  2. Beneficiometro: un indicador para medir el Profit/Loss
  3. Primer Expert Advisor para MetaTrader
  4. Contando velas

468 ad

Leave a Reply

You must be logged in to post a comment.