Calling indicators with iCustom for backtesting

To add comments, please log in or register
Forex Trader
114370
Forex Trader  
I am calling an indicator with iCustom, from an EA.

When I run the EA live on demo, all works fine, and I can print the values for the indicator for testing in the Experts Tab. So far so good.

But when I run backtests, the same printed values are always 0. Does anyone know what is wrong here, and how you can use indicator values through iCustom for backtesting?

p.s. live demo: it actually does only work within the bar in which I started, then the indicator is not updated again in subsequent bars. How can I get the indicator torefresh and draw the current values on the screen?
Forex Trader
114370
Forex Trader  
here is the indicator code:

//+------------------------------------------------------------------+
//|                                              TimeZone Pivots.mq4 |
//|                                 Copyright © 2005, Denis Manigart |
//|                                     mailto:emaildomino@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Denis Manigart"
#property link      "mailto:emaildomino@gmail.com"

#property indicator_chart_window
#property indicator_buffers 8

#property indicator_color1 DarkOrange
#property indicator_color2 Khaki
#property indicator_color3 Khaki
#property indicator_color4 Khaki
#property indicator_color5 Khaki


#property indicator_color6 DarkViolet
#property indicator_color7 Blue
#property indicator_color8 Red
//#property indicator_color4 Gray

//---- input parameters
extern int TimeZoneOfData=2; // by default if time zone of data is at GMT +2
                             // This gives you the Pivot calculations for 0 GMT

//---- buffers
double PivotArray[];
double R1Array[];
double S1Array[];
double R2Array[];
double S2Array[];
double R3Array[];
double S3Array[];

double TodayOpenBuffer[];
double YesterdayCloseBuffer[];
double YesterdayHighBuffer[];
double YesterdayLowBuffer[];


//---- variables
int indexbegin = 0;
double todayopen = 0;
double yesterdayclose = 0;

double barhigh = 0;
double dayhigh = 0;
double yesterdayhigh = 0;

double barlow = 0;
double daylow = 0;
double yesterdaylow = 0;



//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
	
	// Pivot
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,PivotArray);
IndicatorShortName("TDPivot");
SetIndexLabel(0,"Pivot");
SetIndexEmptyValue(0, 0.0);
// Resistance 1
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,R1Array);
SetIndexLabel(1,"R1");
SetIndexEmptyValue(1, 0.0);
// Support 1
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,S1Array);
SetIndexLabel(2,"R1");
SetIndexEmptyValue(2, 0.0);
// Resistance 2
SetIndexStyle(3,DRAW_LINE);
SetIndexBuffer(3,R2Array);
SetIndexLabel(3,"R2");
SetIndexEmptyValue(3, 0.0);
// Support 2
SetIndexStyle(4,DRAW_LINE);
SetIndexBuffer(4,S2Array);
SetIndexLabel(4,"S2");
SetIndexEmptyValue(4, 0.0);

// You may also display the previous day close - high - low

// Daily Close	
//	SetIndexStyle(5, DRAW_LINE);
//	SetIndexBuffer(5, YesterdayCloseBuffer);
//	SetIndexLabel(5, "Daily Close");
//	SetIndexEmptyValue(5, 0.0);

// Daily High	
//	SetIndexStyle(6, DRAW_LINE);
//	SetIndexBuffer(6, YesterdayHighBuffer);
//	SetIndexLabel(6, "YesterDay High");
//	SetIndexEmptyValue(6, 0.0);	
	
// Daily Low	
//	SetIndexStyle(7, DRAW_LINE);
//	SetIndexBuffer(7, YesterdayLowBuffer);
//	SetIndexLabel(7, "YesterDay Low");
//	SetIndexEmptyValue(7, 0.0);
	

//----
	indexbegin = Bars - 20;
	if (indexbegin < 0)
		indexbegin = 0;
return(0);
}

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
 }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int i;
  
	int counted_bars = IndicatorCounted();
	
	
double Pivot;
double R1;
double S1;
double R2;
double S2;
	
	//---- check for possible errors
	if (counted_bars < 0) counted_bars = 0;
	//---- last counted bar will be recounted
	if (counted_bars > 0) counted_bars--;
	if (counted_bars > indexbegin) counted_bars = indexbegin;


		for (i = indexbegin-counted_bars; i >= 0; i--)
		{ 
		
		   if ( i == indexbegin-counted_bars) 
		       {
		        dayhigh = High[i];
		        daylow = Low[i];
		       }
		       
		       barlow = Low[i];	
				 barhigh = High[i];
				 
			if ( barhigh >= dayhigh) 
			    dayhigh = barhigh;	 		
			
			if ( barlow <= daylow) 
			    daylow = barlow;
		
//Cycle through all the bars and fill the indicator bars with the Pivot point values		   
		
			if ((TimeMinute(Time[i]) == 00) && (TimeHour(Time[i]) - TimeZoneOfData == 00))
				{todayopen = Open[i];
				 yesterdayclose = Close[i+1];
				 yesterdaylow = daylow;
				 daylow = Low [i]; // input new day value
				
				 yesterdayhigh = dayhigh;
				 dayhigh = High [i]; // input new day value
				
				Pivot = (yesterdayhigh + yesterdaylow + yesterdayclose)/3;
            R1 = (2*Pivot)-yesterdaylow;
            S1 = (2*Pivot)-yesterdayhigh;
            R2 = Pivot-S1+R1;
            S2 = Pivot-R1+S1;
				
				 }
				
				//These can be used for any calculations 
				TodayOpenBuffer[i] = todayopen;
				YesterdayCloseBuffer[i] = yesterdayclose;
				YesterdayHighBuffer[i] = yesterdayhigh;
				YesterdayLowBuffer[i] = yesterdaylow;
				
				
				
			   PivotArray[i]=Pivot;
            R1Array[i]=R1;
            S1Array[i]=S1;
            R2Array[i]=R2;
            S2Array[i]=S2;
			    

	}

	
	return(0);
}
//+------------------------------------------------------------------+



ravibala
20
ravibala  
Forex Trader:
I am calling an indicator with iCustom, from an EA.

When I run the EA live on demo, all works fine, and I can print the values for the indicator for testing in the Experts Tab. So far so good.

But when I run backtests, the same printed values are always 0. Does anyone know what is wrong here, and how you can use indicator values through iCustom for backtesting?

p.s. live demo: it actually does only work within the bar in which I started, then the indicator is not updated again in subsequent bars. How can I get the indicator torefresh and draw the current values on the screen?

Hi Friend,


I have the same problem that icustom indicator works well on my EA, but when I back test is not recognised. Did you receive any solution? 

To add comments, please log in or register