Inquietud sobre un algoritmo de EMAs

 

Buenas tardes!

Llevo poco tiempo en esto del trading algorítmico, en mi proceso de aprendizaje consigo programas diseñados por otros, los estudio y analizo y luego observo su comportamiento haciendo el backtesting en MT5. Estoy estudiando un programa que utiliza 3 EMA, cuando se cumpla la condición que la EMA1>EMA2 y EMA2>EMA3 se introduzca una orden de compra. Pero ocurre algo que no entiendo porque lo hace de esta forma, resulta que apenas corro el programa en el backtesting, la condición de las Emas se cumple, sin embargo la orden de compra se introduce en la tercera vela despues del inicio, ver imagen adjunta, mi pregunta es ?¿porque no se produce la orden de compra en la segunda vela?, será algo de configuración en el algoritmo o en el Backtester de MT5?, como lo corrijo si se puede?


#include <Trade\Trade.mqh>
CTrade trade;

int OnInit()
  {
//---
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

 //CREAR PRECIO BID Y ASK
  
   double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);  

//CREAR UN STRING VARIABLE PARA LA SEÑAL

   string Signal="";

//CREAR 3 ARRAY PARA LOS VALORES DE LAS 3 EMA
   double EMA10Array[],EMA20Array[],EMA40Array[];
   
//DEFINIMOS LAS EMA10, EMA50 Y EMA100
   int EMA10Definition = iMA(_Symbol,_Period,10,0,MODE_EMA,PRICE_CLOSE);
   int EMA20Definition = iMA(_Symbol,_Period,20,0,MODE_EMA,PRICE_CLOSE);
   int EMA40Definition = iMA(_Symbol,_Period,40,0,MODE_EMA,PRICE_CLOSE); 
 
 //CONFIGURAMOS LAS MATRICES EMA PARA QUE SE ORDENEN DESDE LA ELA ACTUAL HACIA ABAJO
   ArraySetAsSeries(EMA10Array,true);  
   ArraySetAsSeries(EMA20Array,true); 
   ArraySetAsSeries(EMA40Array,true);
   
 //LLENAMOS LOS ARRAY CON EL DATO DEL PRECIO
   CopyBuffer(EMA10Definition,0,0,5,EMA10Array);
   CopyBuffer(EMA20Definition,0,0,5,EMA20Array); 
   CopyBuffer(EMA40Definition,0,0,5,EMA40Array);
   
   //SEÑAL DE COMPRA
   if (EMA10Array[0]>EMA20Array[0])
      if(EMA20Array[0]>EMA40Array[0])
            {Signal="Compra";}
   
   
    //COMPRAR 10 MICROLOTES
      if (Signal=="Compra"&&PositionsTotal()==0)
      {
      trade.Buy(0.10,_Symbol,Ask,0,(Ask+150*_Point),NULL);
	comment("The current signal is: ",Signal);
}
}
Documentación para MQL5: Constantes, Enumeraciones y Estruturas / Constantes comerciales / Propiedades de órdenes
Documentación para MQL5: Constantes, Enumeraciones y Estruturas / Constantes comerciales / Propiedades de órdenes
  • www.mql5.com
Ordenaciones de ejecutar las operaciones comerciales se formalizan mediante las órdenes. Cada orden posee una multitud de propiedades para...
Archivos adjuntos:
Testeador.jpg  44 kb