//+------------------------------------------------------------------+ //| SimpleEMA.mq4 | //| Programando Forex | //| http://www.programandoforex.com | //+------------------------------------------------------------------+ #property copyright "Programando Forex" #property link "http://www.programandoforex.com" extern int LargaEMA = 200; extern int CortaEMA = 23; extern int Size = 1; int start() { static datetime MarcaTiempo = 0; static int ticket; int señal; datetime NuevaTiempo = Time[0]; // A cada nueva barra if(MarcaTiempo != NuevaTiempo) { // 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. // 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); } // 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. } MarcaTiempo = NuevaTiempo; } return(0); } //+------------------------------------------------------------------+