English

## Need help with EA: how to implement trend filtering via triple EMA of daily level for EA trading in H1?

 54 PomeGranate 2015.05.27 13:06   Hello, I've written an EA which trades Pivot Points, you'll find their calculation inside the EA. It may look more complicated than needed, but I wanted to use a certain hourly Close for indicator calculation. This works fine.What troubles me is the implementation of trend filtering. I'd like to use a simple filter from daily timeframe, i.e. comparison between EMA 9,12,26: buy would be allowed if 9>12>26, sell if 9<12<26, no trades allowed if other combination.The way the EA is written, it seems that the condition is checked only once and not for every bar as intended. I'm clueless, why this is so. Either I get only buys or only sells, which means that some data is provided by the if-conditions in line 164ff, but it doesn't actualize as it should. Where is the mistake? Can anybody provide an example of a solution? Please help! Regards,PomeGranate```//+------------------------------------------------------------------+ //|                                           PivotPoints_for_EA.mq4 | //|                                             2015 (C) PomeGranate | //+------------------------------------------------------------------+ #define MAGIC 20150518 //---- INPUT INDICATOR PARAMETERS int closetime_UTC=20; //---- DECLARING VARIABLES FOR CHOOSING A CHART int timeframe=PERIOD_H1, IndCounted=0; string Symb=Symbol();                        // Symbol extern double Lots=0.05; //--- ARRAYS for PP double PPBuffer[],R1Buffer[],R2Buffer[],R3Buffer[],R4Buffer[], S1Buffer[],S2Buffer[],S3Buffer[],S4Buffer[]; int TrendArray[]; // GETTING THE AMOUNT OF ALL BARS OF THE CHART int IBARS=iBars(Symb,timeframe); double orderlevel[]; //+------------------------------------------------------------------+ //| Expert initialization function                                   | //+------------------------------------------------------------------+ int init()   { //Array ops:    if(ArraySize(orderlevel)<9)       ArrayResize(orderlevel,9);    if(ArraySize(PPBuffer)=0; bar--)      {       int h=0,       f=0,       g=0;       switch(TimeDayOfWeek(Time[bar]))         {          case 0:             h=1;             f=0;             g=3+closetime_UTC;             break;          case 1:             h=2;             f=26;             g=0;             break;          case 2:             h=1;             f=24;             g=0;             break;          case 3:             h=1;             f=24;             g=0;             break;          case 4:             h=1;             f=24;             g=0;             break;          case 5:             h=1;             f=24;             g=0;             break;          case 6:             h=1;             f=24;             g=0;             break;         }       int dshift=iBarShift(NULL,PERIOD_D1,Time[bar],false);       datetime Today=iTime(NULL,PERIOD_D1,dshift); //determine time[i]'s 00:00 bar as anchor       int hshift=iBarShift(NULL,PERIOD_H1,Today,false)+f; //go back f hourly bars                                                           // High, low, close and open       double HIGH=iHigh(NULL,PERIOD_D1,dshift+h),       LOW=iLow(NULL,PERIOD_D1,dshift+h),       CLOSE=iClose(NULL,PERIOD_H1,hshift-closetime_UTC+g),//add the preset number of hours, thereby select 20:00 bar       OPEN=iOpen(NULL,PERIOD_D1,dshift+h);       // Pivot Point       pivotpoint=NormalizeDouble((HIGH+LOW+CLOSE)/3,Digits);       PPBuffer[bar]=pivotpoint;       // Calcuations       R1 = NormalizeDouble(2 * pivotpoint - LOW,Digits);       S1 = NormalizeDouble(2 * pivotpoint - HIGH,Digits);       R2 = NormalizeDouble(pivotpoint + HIGH - LOW,Digits);       S2 = NormalizeDouble(pivotpoint - HIGH + LOW,Digits);       R3 = NormalizeDouble(2 * pivotpoint - 2*LOW + HIGH,Digits);       S3 = NormalizeDouble(2 * pivotpoint - 2*HIGH + LOW,Digits);       R4 = NormalizeDouble(R3 + pivotpoint - LOW,Digits);       S4 = NormalizeDouble(S3 + pivotpoint - HIGH,Digits);       R1Buffer[bar]=R1;R2Buffer[bar]=R2;R3Buffer[bar]=R3;R4Buffer[bar]=R4;       S1Buffer[bar]=S1;S2Buffer[bar]=S2;S3Buffer[bar]=S3;S4Buffer[bar]=S4;       //+------------------------------------------------------------------+       //Trend=iCustom(NULL,PERIOD_D1,"Supertrend",10,4.0,4,1);       //TrendArray[bar]=iCustom(NULL,PERIOD_D1,"Supertrend",10,4.0,4,1);         if(iMA(NULL,PERIOD_D1,9,0,1,0,dshift)>iMA(NULL,PERIOD_D1,12,0,1,0,dshift)>iMA(NULL,PERIOD_D1,26,0,1,0,dshift)) //(Trend>0)          TrendArray[bar]=1;       else if(iMA(NULL,PERIOD_D1,9,0,1,0,dshift)TRADE CONDITIONS<--------------------------+       //+------------------------------------------------------------------+       //   if (iMA(NULL,PERIOD_D1,9,0,1,0,0)>iMA(NULL,PERIOD_D1,12,0,1,0,0)>iMA(NULL,PERIOD_D1,26,0,1,0,0))         //(Trend>0)       if(TrendArray[1]>0)         {          //WORKING BUY CONDITION         }       //+------------------------------------------------------------------+       //|                                                                  |       //+------------------------------------------------------------------+       if(TrendArray[1]<0)          //   if (iMA(NULL,PERIOD_D1,9,0,1,0,0)