nav-left cat-right
cat-right

Primer Expert Advisor para MetaTrader

cruceemas

En este artículo vamos a ver cómo crear nuestro primer EA. Un Expert Advisor muy muy simple, que utilizará como señal un indicador por cruce de Medias Móviles Exponenciales (EMA’s).

Las EMA’s son una herramienta básica para los sistemas de trading, son medias del precio de las últimas x barras, pero ponderando el peso de cada barra con una función exponencial. Es decir, en la media cuenta mucho más la última barra que la penúltima y a su vez la penúltima barra cuenta mucho más que la antepenúltima.

Si tenemos dos lineas de EMA, una con un periodo de barras mayor que la otra podemos utilizar como señal el cruce de la EMA corta por la larga. Si la EMA corta cruza a la larga de abajo a arriba será señal de compra y si al contrario la cruza de arriba a abajo será señal de venta.

Nuestro EA ejecutará su código a cada nueva apertura de barra, cada vez que detecte un cruce abrimos una única operación, cuando se vuelve a dar el cruce contrario cerramos esa operación y abrimos una nueva en contrario. Simple.

Lo básico es obtener la señal de cruce. Para eso utilizamos la función iMA que nos devuelve el valor de las lineas EMA. Para saber si dos lineas se han cruzado necesitamos saber el valor de cuatro puntos. Por ejemplo podemos tomar el valor de la linea larga hace 3 barras y hace 1 y comprararlos con los valores de la linea corta en las mismas barras:

// Tomamos datos de las dos EMAs (Corta y Larga).
double emaLargaA = iMA(NULL,0,LargaEMA,0,1,4,3);
double emaLargaB = iMA(NULL,0,LargaEMA,0,1,4,1);
double emaCortaA = iMA(NULL,0,CortaEMA,0,1,4,3);
double emaCortaB = iMA(NULL,0,CortaEMA,0,1,4,1);
<
// Calculamos si se han cruzado
if(emaCortaA < emaLargaA && emaCortaB > emaLargaB)
  señal = 0; // ema corta cruza de abajo a arriba.
else if(emaCortaA > emaLargaA && emaCortaB < emaLargaB)
  señal = 1; // ema corta cruza de arriba a abajo.
else
  señal = -1; // no hay cruce.

Una vez hemos obtenido la señal: 0 para compra, 1 para venta, -1 no hay señal. Abriremos una operación si no hay ninguna abierta y si la señal era de compra o venta.

// Si no hay órden abierta y hay señal podemos operar.
if(OrdersTotal() == 0 && señal != -1)
{
  if(señal == 0) // Señal 0 -> COMPRA
    ticket = OrderSend(Symbol(),OP_BUY,Size,Ask,3,0,0,NULL,23,0,Green);
  else if(señal == 1) // Señal 1 -> VENTA
    ticket = OrderSend(Symbol(),OP_SELL,Size,Bid,3,0,0,NULL,23,0,Green);
}

Una vez abierta la orden comprobaremos cuándo ha llegado una señal contraria para cerrarla.

// Si hay una orden abierta y hay señal en contra cerramos
if(OrdersTotal() != 0 && señal != -1)
{
// Seleccionamos la orden.
OrderSelect(ticket,SELECT_BY_TICKET);
 
//Comprobamos si la señal es contraria
if(OrderType() == 0 && señal == 1)
  OrderClose(ticket,Size,Bid,3,Yellow); // Cerramos la compra.
if(OrderType() == 1 && señal == 0)
  OrderClose(ticket,Size,Ask,3,Yellow); // Cerramos la venta.
}

Este código sencillo, que podeis descargar al final del artículo, se ejecutará a cada nueva barra de cotización como vimos en el artículo anterior.

En el código completo hay un par de elementos clave para el funcionamiento del EA. Vamos a detallarlos:

  • static int ticket; Definimos como estática la variable ticket para que no cambie a cada ejecución de la función start (esto es a cada nuevo tick). En esta variable guardamos el ticket de la última operación abierta para poder referenciarla posteriormente a la hora de cerrarla (cuando llegue la señal en contrario).
  • OrderSelect(ticket,SELECT_BY_TICKET); Seleccionamos la orden utilizando el ticket anterior, con esto ya tenemos acceso a varias funciones que nos devuelven datos sobre la orden. Inmediatamente utilizaremos la función OrderType() para conocer si la orden es de compra o venta y compararlo con la señal del cruce de medias.

Como se ve, el EA es bastante simple y en el periodo de tiempo elegido y el par EUR/USD da muy buenos resultados:

simpleemagrafico

Sin embargo probando en cualquier otro par vemos que falla como una escopeta de feria… así que ¡ojo con los falsos positivos! Hacer dinero en Forex no es tan fácil ¿Qué esperabais de un simple cruce de medias?

El código para descargar: simpleEMAS.mq4

Y además: otro EA basado en RSI y MACD.

Artículos Relacionados

  1. Un EA basado en RSI y MACD
  2. Curso de programación MetaTrader MQL4
  3. Utilizar indicadores en un EA con iCustom
  4. El primer indicador

468 ad

4 Responses to “Primer Expert Advisor para MetaTrader”

  1. [...] MagicNumber es un parámetro de las órdenes de MetaTrader que sirve para identificar qué EA la ejecutó. Cuando queremos probar un expert en varios gráficos ya sea en en distintos símbolos [...]

  2. [...] que tenemos un nuevo Expert Advisor para utilizar, el programa viene normalmente en dos ficheros: el de extensión mq4 es el código [...]

Leave a Reply

You must be logged in to post a comment.