Strange Problem with bbsqueeze indicator.

 

I am using the bbsqueeze indicator as part of an EA I am building and yesterday a strange thing happen; at somepoint, while I was writing the EA the indicator, which has been working fine both on its own and as part of the EA stopped working correctly in the H1 time frame but only on the two pairs (EUR/USD and the AUS/USD) I was using it on at the time. When attached to the EUR/USD and the AUD/USD charts in the H1 time frame the indicator (histogram) opens the current bar and the previous bar and continues to work from that point forward but seems to fail to loop back and gives me a Zero Divide Error, but only on those two pair in the H1 timeframe. On all other pairs and time frames the indicator works properly. I've removed the EA from all charts and I've gone so far as to reload the MT4 platform (build 419). Attached are four pictures; the AUDUSD H1, EURUSD H1, AUDUSD M30 and the USDCAD H1, which show the problem. Any Ideas?






 
On the first two charts the indicator has been attached for about 16 hours. Again when first attached the indicator opens the current bar and the previous bar only. Thanks
 
Here's the code for the indicator, thought I'm not really sure it's a problem with the indicator itself as it has been working fine for quit some time:
//+------------------------------------------------------------------+
//|                                                    bbsqueeze.mq4 |
//|                Copyright © 2005, Nick Bilak, beluck[AT]gmail.com |
//|           enhanced a little bit by CJ Rivas, carlos[AT]vealo.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Nick Bilak"
#property link      "http://metatrader.50webs.com/"

#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 DarkBlue
#property indicator_color4 Maroon
#property indicator_color5 Red
#property indicator_color6 Lime

//---- input parameters
extern int       bolPrd=20;
extern double    bolDev=2.0;
extern int       keltPrd=20;
extern double    keltFactor=1.5;
extern int       momPrd=12;
//---- buffers
double upB[];
double upB2[];
double loB[];
double loB2[];
double upK[];
double loK[];

int i,j,slippage=3;
double breakpoint=0.0;
double ema=0.0;
int peakf=0;
int peaks=0;
int valleyf=0;
int valleys=0, limit=0;
double ccis[61],ccif[61];
double delta=0;
double ugol=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM,EMPTY,3);
   SetIndexBuffer(0,upB);
   SetIndexEmptyValue(0,EMPTY_VALUE);
   
   SetIndexStyle(1,DRAW_HISTOGRAM,EMPTY,3);
   SetIndexBuffer(1,loB);
   SetIndexEmptyValue(1,EMPTY_VALUE);

   SetIndexStyle(4,DRAW_ARROW,EMPTY,2);
   SetIndexBuffer(4,upK);
   SetIndexEmptyValue(4,EMPTY_VALUE);
   SetIndexArrow(4,159);
   SetIndexStyle(5,DRAW_ARROW,EMPTY,2);
   SetIndexBuffer(5,loK);
   SetIndexEmptyValue(5,EMPTY_VALUE);
   SetIndexArrow(5,159);
   
   SetIndexStyle(2,DRAW_HISTOGRAM,EMPTY,3);
   SetIndexEmptyValue(2,EMPTY_VALUE);
   SetIndexBuffer(2,upB2);

   SetIndexStyle(3,DRAW_HISTOGRAM,EMPTY,3);
   SetIndexEmptyValue(3,EMPTY_VALUE);
   SetIndexBuffer(3,loB2);
   
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted();
   int shift,limit;
   double diff,d,dPrev, std,bbs;
   
   if (counted_bars<0) return(-1);
   if (counted_bars>0) counted_bars--;
   limit=Bars-31;
   if(counted_bars>=31) limit=Bars-counted_bars-1;

   for (shift=limit;shift>=0;shift--)   {
      //d=iMomentum(NULL,0,momPrd,PRICE_CLOSE,shift);
      d=LinearRegressionValue(bolPrd,shift);
      dPrev=LinearRegressionValue(bolPrd,shift+1);
      if(d>0) {
         if ((dPrev>0) && (dPrev > d)){ upB2[shift]=d; upB[shift] = 0; } else { upB[shift]= d; upB2[shift] = 0; }
         //upB[shift]=0;
         loB[shift]=0;
         loB2[shift]=0;
      } else {
         if ((dPrev<0) && (dPrev < d)){ loB2[shift]=d; loB[shift] = 0; } else { loB[shift]= d; loB2[shift] = 0; }
         upB[shift]=0;
         upB2[shift]=0;
         //loB[shift]=d;
      }
                diff = iATR(NULL,0,keltPrd,shift)*keltFactor;
                std = iStdDev(NULL,0,bolPrd,MODE_SMA,0,PRICE_CLOSE,shift);
                bbs = bolDev * std / diff;
      if(bbs<1) {
         upK[shift]=0;
         loK[shift]=EMPTY_VALUE;
      } else {
         loK[shift]=0;
         upK[shift]=EMPTY_VALUE;
      }
   }
   
   
   
   return(0);
  }
//+------------------------------------------------------------------+


double LinearRegressionValue(int Len,int shift) {
   double SumBars = 0;
   double SumSqrBars = 0;
   double SumY = 0;
   double Sum1 = 0;
   double Sum2 = 0;
   double Slope = 0;

   SumBars = Len * (Len-1) * 0.5;
   SumSqrBars = (Len - 1) * Len * (2 * Len - 1)/6;

  for (int x=0; x<=Len-1;x++) {
   double HH = Low[x+shift];
   double LL = High[x+shift];
   for (int y=x; y<=(x+Len)-1; y++) {
     HH = MathMax(HH, High[y+shift]);
     LL = MathMin(LL, Low[y+shift]);
   }
    Sum1 += x* (Close[x+shift]-((HH+LL)/2 + iMA(NULL,0,Len,0,MODE_EMA,PRICE_CLOSE,x+shift))/2);
    SumY += (Close[x+shift]-((HH+LL)/2 + iMA(NULL,0,Len,0,MODE_EMA,PRICE_CLOSE,x+shift))/2);
  }
  Sum2 = SumBars * SumY;
  double Num1 = Len * Sum1 - Sum2;
  double Num2 = SumBars * SumBars-Len * SumSqrBars;

  if (Num2 != 0.0)  { 
    Slope = Num1/Num2; 
  } else { 
    Slope = 0; 
  }

  double Intercept = (SumY - Slope*SumBars) /Len;
  double LinearRegValue = Intercept+Slope * (Len - 1);

  return (LinearRegValue);

}
 
Can you show your iCustom call please ? on the pairs that don't work . . .
 
These are attached directly to the chart from the custom indicator folder in the Navigator panel. No iCustom calls here, unless I misunderstood your question. Oh and I have rolled back to Build 416 with the same results to eliminate any talk of a bug. Thanks
 
tjeods:
These are attached directly to the chart from the custom indicator folder in the Navigator panel. No iCustom calls here, unless I misunderstood your question. Oh and I have rolled back to Build 416 with the same results to eliminate any talk of a bug. Thanks
You talked about using the Indicator in an EA . . . so I assumed iCustom. I copied the Indicator, compiled it and added it to AUDUSD H1 and I got a full chart width of histogram bars . .
 

Yes, the indicator is used in an EA that was attached to the H1 AUDUSD chart when the problem occured. The EA is hardcoded for the AUDUSD pair. The indicator itself was attached to that chart for visual reference, as well as the H1 EURUSD chart at the time of the problem (the EA was not attached to the H1 EURUSD) and now both charts have a problem displaying the indicator. Here's the iCustom code from the EA. The externals are the same as above:

//----test for bbsqueeze signal----


      double upBLast = iCustom(NULL,0,"bbsqueeze_dark",bolPrd,bolDev,keltPrd,keltFactor,momPrd,0,1);
      double loBLast = iCustom(NULL,0,"bbsqueeze_dark",bolPrd,bolDev,keltPrd,keltFactor,momPrd,1,1);
      double upB2Last = iCustom(NULL,0,"bbsqueeze_dark",bolPrd,bolDev,keltPrd,keltFactor,momPrd,2,1);
      double loB2Last = iCustom(NULL,0,"bbsqueeze_dark",bolPrd,bolDev,keltPrd,keltFactor,momPrd,3,1);
      double upKLast = iCustom(NULL,0,"bbsqueeze_dark",bolPrd,bolDev,keltPrd,keltFactor,momPrd,4,1);
      double loKLast = iCustom(NULL,0,"bbsqueeze_dark",bolPrd,bolDev,keltPrd,keltFactor,momPrd,5,1);
   
      if(loKLast == 0.0) //&& (upKLast == EMPTY_VALUE))
        {   
         if((upBLast > 0.0) || (upB2Last > 0.0)) //
            {
            buySignalBB = True; 
            sellSignalBB = False;
            }
         else if((loBLast < 0.0)  || (loB2Last < 0.0)) //
            {  
            sellSignalBB = True;
            buySignalBB = False;
            }
         }
      else if (upKLast == 0.0) //((loKLast == EMPTY_VALUE) &&
         { 
         buySignalBB = False;
         sellSignalBB = False;
         }
 

This data is pulled from a history file, correct. Is it possible that these two file are damaged? I have a few entries like this in the log file:


14:17:56 HistoryCenter: synchronize 'AUDUSD60'
14:17:57 HistoryCenter: 2 bars imported in 'AUDUSD60'
14:18:42 HistoryCenter: synchronize 'AUDUSD60'
14:18:43 HistoryCenter: 2 bars imported in 'AUDUSD60'

 
Well, RaptorUK, I decided to completely reload MT4 through my broker and that took care of the problem. Don't know how I managed to damage the files from MetaEditor but that seems to be what I did. Anyway, thanks so much for your time. I've only posted here twice but both times you've helped me or at least attempted too help. Thanks very much for your time, it is greatly appreciated.
Reason: