EA Baseada em Ichimoku

 

Caros, Boa tarde!


Estou tentando criar uma EA baseada em Ichimoku, e estou com problemas na hora de verificar as condições dentro do IF , algumas delas nunca se mostram verdadeiras, mesmo as condições estando claramente atendidas no gráfico durante o backtest

os inputs de timer não estão sendo utilizados nesse código.

Podem me ajudar?

#include <Trade\Trade.mqh>
CTrade trade;
#include <Mql5Book\Timer.mqh>
CTimer Timer;



sinput string TI;       // Timer
input bool UseTimer = false;
input int StartHour = 0;
input int StartMinute = 0;
input int EndHour = 0;
input int EndMinute = 0;
input bool UseLocalTime = false;
input int Contratos = 0;
input int MACDRapida = 0;
input int MACDLenta = 0;
input int MACDSinal = 0;
input int TradeCurto = 0;
input int TradeMedio = 0;
input int TradeLongo = 0;

bool c1;
bool c2;
bool c3;
bool c4;
bool c5;
bool c6;
bool c7;
bool c8;
bool c9;
bool c10;
bool c11;
bool c12;
bool c13;


//c1 = "cruzamento de baixa acima da nuvem";
//c2 = "cruzamento de baixa dentro da nuvem";
//c3 = "cruzamento de baixa abaixo da nuvem";
//c4 = "cruzamento de baixa acima da nuvem";
//c5 = "cruzamento de alta dentro da nuvem";
//c6 = "cruzamento de alta abaixo da nuvem";

void OnTick()
  {
  //Array dos preços
  double Ask =NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
      
      double MACDArray[];
      double SignalArray[];
      
      double Tenkan_sen_Array[]; 
      double Kijun_sen_Array[]; 
      double Senkou_Span_A_Array[]; 
      double Senkou_Span_B_Array[]; 
      double Chinkou_Span_Array[];
   
      
   
   
  // Definição das propriedades das medias moveis
  
  int MACDDeff=iMACD (_Symbol,_Period,MACDRapida,MACDLenta,MACDSinal,PRICE_CLOSE);
  int IchimokuDeff=iIchimoku (_Symbol,_Period,9,26,52);

  int PosDeff =PositionsTotal();
 
   
   ArraySetAsSeries(Kijun_sen_Array,true);
   ArraySetAsSeries(Tenkan_sen_Array,true);
   ArraySetAsSeries(Senkou_Span_A_Array,true);
   ArraySetAsSeries(Senkou_Span_B_Array,true);
   ArraySetAsSeries(Chinkou_Span_Array,true);
   ArraySetAsSeries(MACDArray,true);
   ArraySetAsSeries(SignalArray,true);

    
  
  CopyBuffer (MACDDeff,0,0,6,MACDArray);
  CopyBuffer (MACDDeff,0,0,6,SignalArray);
  
  CopyBuffer (IchimokuDeff,0,0,27,Kijun_sen_Array);
  CopyBuffer (IchimokuDeff,0,0,27,Tenkan_sen_Array);
  CopyBuffer (IchimokuDeff,0,0,27,Senkou_Span_A_Array);
  CopyBuffer (IchimokuDeff,0,0,27,Senkou_Span_B_Array);
  CopyBuffer (IchimokuDeff,0,0,27,Chinkou_Span_Array);
  
  
   

  
  // Timer
        bool timerOn = true;
        if(UseTimer == true)
        {
                timerOn = Timer.DailyTimer(StartHour,StartMinute,EndHour,EndMinute,UseLocalTime);
        }
  
  
  // Adquire a informação de posições abertas no momento
 bool openPosition = PositionSelect(_Symbol);
 long positionType = PositionGetInteger(POSITION_TYPE);

 double currentVolume = 0;
 
 if(
   (Tenkan_sen_Array[0]<Kijun_sen_Array[0])
   )
 {

   c1 = true;
 }
 else {c1 = false;}
 
 if(
   
   (Tenkan_sen_Array[1]>Kijun_sen_Array[1])
   )
 {

   c2 = true;
 }
 else {c2 = false;}
 if(
     (Tenkan_sen_Array[0]>Senkou_Span_A_Array[4])
  

   )
 {

   c3 = true;
 }
 else {c3 = false;}
 if(
     (Tenkan_sen_Array[0]>Senkou_Span_B_Array[4])

   )
 {

   c4 = true;
 }
 else {c4 = false;}
 if(
   
   (Kijun_sen_Array[0]>Senkou_Span_A_Array[4])
  
   )
 {

   c5 = true;
 }
 else {c5 = false;}
 if(
   
   (Kijun_sen_Array[0]>Senkou_Span_B_Array[4])
   )
 {

   c6 = true;
 }
 else {c6 = false;}
 if(
    (Senkou_Span_A_Array[4]<Senkou_Span_B_Array[4])
   )
 {

   c7 = true;
 }
 else {c7 = false;}
 if(
    (Senkou_Span_A_Array[4]>Senkou_Span_B_Array[4])
   )
 {

   c8 = true;
 }
 else {c8 = false;}
 Comment ("Tenkan[0]<Kijun[0]= ",c1,"  " ,"Tenkan[1]>Kijun[1]= ",c2, "  " ,"Tenkan>A= ",c3,
 "  " ,"Tenkan>B= ",c4,"  " ,"Kijun>A= ",c5,"  " ,"Kijun> b= ",c6,"  " ,"A<B= ",c7, "  " ,"A>B= ",c8);
 
 }
Razão: