MQL4 - automated forex trading   /  

Forum

Arrays instead of Indicator Buffers

Back to topics list To post a new topic, please log in or register

avatar
83
AR78 2006.12.18 20:26 

Can you please help me?

for my indicator, I need to store some data Items for each bar, But the number of Items is more than 7. only two of them have to be shown on screen but about 9 others are only for back side calculations. Is it possible to use arrays like indicator buffers with automatic shifting when new bar? any solutions or code samles?

thanks.

article

How to Develop a Reliable and Safe Trade Robot in MQL 4

The article deals with the most common errors that occur in developing and using of an Expert Advisor. An exemplary safe automated trading system is described, as well.


avatar
83
AR78 2006.12.18 22:26 


I myself solved it like this. Hope this is useful to others.

extern int SlowPeriod=21;
 
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
//---- buffers
double U[];
double D[];
 
//Arrays instead of indicator buffers as many as you like
double Price[];
double H[];
 
 
int indexbegin = 0;
static datetime CurrTime;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   SetIndexBuffer(0,U);
   SetIndexLabel(0, "UpTrend");
   SetIndexEmptyValue(0, NULL);
   SetIndexStyle( 0, DRAW_LINE);
 
   SetIndexBuffer(1,D);
   SetIndexLabel(1, "DownTrend");
   SetIndexEmptyValue(0, NULL);
   SetIndexStyle( 1, DRAW_LINE);
 
   //All of the arrays must be initiated:
   ArrayResize(Price,Bars);
   ArraySetAsSeries(Price,true);
 
   ArrayResize(H,Bars);
   ArraySetAsSeries(H,true);
 
   for (int i = Bars-1; i >= 0; i--)
   {    
      Price[i]=Close[i];      
   }
 
   indexbegin = Bars - 20;
   if (indexbegin < 0)
    indexbegin = 0;
    
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int i,j;
   
   //Shifting all arays one cell because of new bar
   if(CurrTime != Time[0])
   {
      for (i = Bars-2; i > 0; i--)
      {    
         Price[i+1]=Price[i];
         H[i+1]=H[i];
      }

      //Initializing values for new bar

      Price[0]=Close[0];
      H[0]=0;
      S[0]=0;
   
   }



   //For every thick these values must be renewed
   Price[0]=Close[0];
   
   CurrTime=Time[0];
 
   //rest of code like an Ordinary indicator. you can use H , S , other arrays the same way as indicator buffers
   int counted_bars = IndicatorCounted();    
   //---- 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--)
   {    
      //Ordinary indicator
 
   }
   return(0);
}






Back to topics list  

To add comments, please log in or register