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:
Como se ve, el EA es bastante simple y en el periodo de tiempo elegido y el par EUR/USD da muy buenos resultados:
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.
[...] 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 [...]
[...] que tenemos un nuevo Expert Advisor para utilizar, el programa viene normalmente en dos ficheros: el de extensión mq4 es el código [...]