iCustom function cannot work in backtesting

To add comments, please log in or register
ravibala
20
ravibala  


Iam  facing same problem with iCustom indicators. Iam using super trend indicator and Iam calling using ST2=iCustom(Symbol(),0,"SuperTrend",24,3.0,1,1). It works well in live and demo account when i call them, but does not work well on back testing. Can Anyone help me on this pls. Iam clueless.


I have attached a sample EA which calls the super trend using iCustom(Symbol(),0,"SuperTrend",24,3.0,1,1) or iCustom(Symbol(),0,STnewformat,1440,10,3.0,1,1). I have attached both versions of Super Trend as below. Pls help me.  Thank you.


//+------------------------------------------------------------------+

//|                                              SuperTrend_03.mq4 |

//|                        Copyright 2014, MetaQuotes Software Corp. |

//|                                              http://www.mql5.com |

//+------------------------------------------------------------------+

// Different TimeFrame between chart & Super Trend Lines

// Begin 17 Nov 2014

#property copyright "Jay Ngui"

#property version   "1.1"

#property strict



//+------------------------------------------------------------------+

//| Custom indicator initialization function                         |

//+------------------------------------------------------------------+





#property indicator_chart_window

#property indicator_color1 Green

#property indicator_color2 Red

#property indicator_buffers 2



double TrendUp[], TrendDown[];

//int changeOfTrend;

extern int TimeFrame = 1440;

extern int NumPeriod = 10; //number of period

extern double Multiplier = 3;



//global variables

double UppBand[], LowBand[], SupTrPrice[];

datetime SupTrTime[];

datetime Time_0_Old = 0, Time_0_New;

int OnInit()

  {

//---- indicators

   SetIndexBuffer(0, TrendUp);

   SetIndexStyle(0, DRAW_LINE, STYLE_SOLID);

   SetIndexLabel(0, "Trend Up");

   SetIndexBuffer(1, TrendDown);

   SetIndexStyle(1, DRAW_LINE, STYLE_SOLID);

   SetIndexLabel(1, "Trend Down");

   

//----

   return(INIT_SUCCEEDED);

  }

  

int deinit()

  {

   

         

   return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function                              |

//+------------------------------------------------------------------+

//int OnCalculate(const int rates_total,

//                const int prev_calculated,

//                const datetime &time[],

//                const double &open[],

//                const double &high[],

//                const double &low[],

//                const double &close[],

//                const long &tick_volume[],

//                const long &volume[],

//                const int &spread[])

//  {

//---

int start()

{



   int i, j, k;

   int wBarLeft, wBarRight, wBarSupTr;

   int wTimeFrame, wTimeFrame_Trend;

   string wSym;

   double wClose_0, wClose_1, wHigh_0, wLow_0;

   datetime wTime;

   

   wBarSupTr=0;

   wSym=Symbol();

   wTimeFrame=Period();

   wBarLeft = Bars;

   wBarRight = 0;

   ArrayResize(UppBand,wBarLeft+2);

   ArrayResize(LowBand,wBarLeft+2);

   ArrayResize(TrendDown,wBarLeft+2);

   ArrayResize(TrendUp,wBarLeft+2);

   ArrayResize(SupTrPrice,wBarLeft+2);

   ArrayResize(SupTrTime,wBarLeft+2);

   

   wTimeFrame_Trend = TimeFrame;

   //if (Trend_Same_As_Chart) wTimeFrame_Trend = wTimeFrame;

   

   Time_0_New = iTime(wSym, wTimeFrame, 0);

   if (Time_0_New != Time_0_Old)

   {

//super trend array    

      fnSuperTrend_Array(wSym, wTimeFrame_Trend, wBarLeft, wBarRight, NumPeriod, Multiplier, SupTrPrice, SupTrTime,

         UppBand, LowBand);



//draw super trend line

      for (i=wBarLeft-1; i>=wBarRight; i--) // i refer chart

      {

         TrendUp[i] = EMPTY_VALUE;

         TrendDown[i] = EMPTY_VALUE;    

         wTime = iTime(wSym, wTimeFrame, i);// time (bar) on chart

         for (j=0; j<2000; j++) //j refer Super Trend data

         { 

            if (wTime > SupTrTime[0]) 

            {

              wBarSupTr = 0;//

              break;//exit j

            }//end if (wTime > SupTrTime[0])

            if ((wTime >= SupTrTime[j+1]) && (wTime < SupTrTime[j]))

            {

               wBarSupTr = j + 1;

               break; //exit j

            }//end if ((wTime < SupTrTime[j]) && (wTime >= SupTrTime[j+1]))

         }//end for (j=0; j<2000; j++)

            

         k = wBarSupTr;//reference Super Trend

         wClose_0 = iClose(wSym,wTimeFrame_Trend,k);//reference Super Trend

         wClose_1 = iClose(wSym,wTimeFrame_Trend,k+1);//reference Super Trend

         wHigh_0 = iHigh(wSym,wTimeFrame_Trend,k);//reference Super Trend

         wLow_0 = iLow(wSym,wTimeFrame_Trend,k);//reference Super Trend

         if (wClose_0 >= SupTrPrice[k]) TrendUp[i] = SupTrPrice[k];

         if (wClose_0 < SupTrPrice[k]) TrendDown[i] = SupTrPrice[k];

//change trend

         if ((wTime == SupTrTime[k]))//first point of Super Trend Bar

         {

            if ((wClose_1 > SupTrPrice[k+1]) && (wClose_0 < SupTrPrice[k])) TrendDown[i+1] = SupTrPrice[k+1];

            if ((wClose_1 < SupTrPrice[k+1]) && (wClose_0 > SupTrPrice[k])) TrendUp[i+1] = SupTrPrice[k+1];

         }//emd if ((wTime % TimeFrame) == 0)

      }//end for (i=wBarLeft; i>=wBarRight; i--)[i-1];



      WindowRedraw();

   }//end if (Time_0_New != Time_0_Old)  

   Time_0_Old = Time_0_New;

   return(0);

//   return(rates_total);

  }

//+------------------------------------------------------------------+

//***********************************************************************************





//******************************************************************

//------------------------------------------------------------------

//******************************************************************

//begin fnSuperTrend_Array()

void fnSuperTrend_Array(string wSym, int wTimeFrame, int wBarLeft, int wBarRight, int wNumPeriod, double wMultiplier, 

      double& wSupTrPrice[], datetime& wSupTrTime[], double& wUppBand[], double& wLowBand[])

{

   int i;      

   double wHigh_t, wLow_t, wClose_t, wClose_tp, wATR;

   double wTR, wUppBandB, wLowBandB;

   datetime wTime_t;

     

   for (i=wBarLeft; i>=wBarRight; i--)

   {

      wHigh_t=iHigh(wSym, wTimeFrame,i);

      wLow_t=iLow(wSym,wTimeFrame,i);

      wClose_t=iClose(wSym,wTimeFrame,i);

      wClose_tp=iClose(wSym,wTimeFrame,i+1);

      wTime_t=iTime(wSym,wTimeFrame,i);



//calculate True Range      

      wTR=(wHigh_t-wLow_t);

      if (wClose_tp>wHigh_t) wTR=wClose_tp-wLow_t;

      if (wClose_tp<wLow_t) wTR=wHigh_t-wClose_tp;     



//calculate Average True Range

      wATR = iATR(wSym, wTimeFrame,wNumPeriod,i);

//calculate Upper/Lower Band Basic

      wUppBandB = (wHigh_t+wLow_t)/2 + wMultiplier*wATR;//Upper Band Basic

      wLowBandB = (wHigh_t+wLow_t)/2 - wMultiplier*wATR;//Lowper Band Basic



//calculate Upper/Lower Band

      wUppBand[i]=wUppBand[i+1];

      if ((wUppBandB<wUppBand[i+1]) || (wUppBand[i+1]<wClose_tp))

         wUppBand[i]=wUppBandB;



      wLowBand[i]=wLowBand[i+1];

      if ((wLowBandB>wLowBand[i+1]) || (wLowBand[i+1]>wClose_tp))

         wLowBand[i]=wLowBandB;

//calculate SuperTrend

      if (wSupTrPrice[i+1]==wUppBand[i+1])//Upper Band

      {

         wSupTrPrice[i]=wLowBand[i];

         if (wClose_t<=wUppBand[i])

            wSupTrPrice[i]=wUppBand[i];

      }

      else //Lower Band

      {

         wSupTrPrice[i]=wUppBand[i];

         if (wClose_t>=wLowBand[i])

            wSupTrPrice[i]=wLowBand[i];

      }//end if (wSupTr[i+1]=wUppBand[i+1])                          

      wSupTrTime[i]=wTime_t;

   }//end for (i=wBarLeft; i>wBarRight; i--)

      

}//end fnSuperTrend_Array()

//end fnSuperTrend_Array()


David Ewing
40
David Ewing  
has this been a recent problem? I am having a few problems in the last couple of days. MT4 updated but the date/time/version didnt change and it has been acting odd ever since. 
ravibala
20
ravibala  
David Ewing:
has this been a recent problem? I am having a few problems in the last couple of days. MT4 updated but the date/time/version didnt change and it has been acting odd ever since. 
No. This problem has been there quite some time. few months.
To add comments, please log in or register