неприятный глюк

 
иногда гистограммные индикаторы глючат, как на картинке.
надо бы пофиксить.
 
а как должно быть? нужен эталон для сравнения. как часто проявляется? существуют ли обстоятельства, которые можно отнести к причинам? стандартная просьба - присылайте индикатора на проверку
 
дело в том, что верхняя или нижняя части гистограммы могут произвольно рисоваться полностью до края окна (как на рисунке нижняя половина MACDHistogram - комбинация MACD и OsMA).
глюк проявляется при зменении масштаба либо высоты окна.

код:

//+------------------------------------------------------------------+
//|                                                MACDHistogram.mq4 |
//|                Copyright © 2005, Nick Bilak, beluck[AT]gmail.com |
//|                                    http://metatrader.50webs.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Nick Bilak"
#property link      "http://metatrader.50webs.com/"

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 DarkKhaki
#property indicator_color2 Teal
#property indicator_color3 Lime
#property indicator_color4 Red
#property indicator_level3 0
//---- input parameters
extern int       FastLen=12;
extern int       SlowLen=26;
extern int       AvgLen=9;
//---- buffers
double MACDMain[];
double MACDSignal[];
double MACDHistogramUp[];
double MACDHistogramDn[];
   

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,MACDMain);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,MACDSignal);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexBuffer(2,MACDHistogramUp);
   SetIndexEmptyValue(2,EMPTY_VALUE);
   SetIndexStyle(3,DRAW_HISTOGRAM);
   SetIndexBuffer(3,MACDHistogramDn);
   SetIndexEmptyValue(3,EMPTY_VALUE);
   IndicatorShortName("MACDHistogram("+FastLen+","+SlowLen+","+AvgLen+")");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {

   double h;
   int counted_bars=IndicatorCounted(),limit,shift;
   
   if (counted_bars<0) return(-1);
   if (counted_bars>0) counted_bars--;
   limit=Bars-SlowLen-1;
   if(counted_bars>SlowLen) limit=Bars-counted_bars-1;

   MACDHistogramUp[Bars-SlowLen]=-1;
   for (shift=limit;shift>=0;shift--)   {
      MACDMain[shift]=iMACD(NULL,0,FastLen,SlowLen,AvgLen,PRICE_CLOSE,MODE_MAIN,shift);
      MACDSignal[shift]=iMACD(NULL,0,FastLen,SlowLen,AvgLen,PRICE_CLOSE,MODE_SIGNAL,shift);
      if ((MACDMain[shift]-MACDSignal[shift]>MACDHistogramUp[shift+1]) || (MACDMain[shift]-MACDSignal[shift]>MACDHistogramDn[shift+1])) {
         MACDHistogramUp[shift]=MACDMain[shift]-MACDSignal[shift];
         MACDHistogramDn[shift]=EMPTY_VALUE;
      } else {
         MACDHistogramDn[shift]=MACDMain[shift]-MACDSignal[shift];
         MACDHistogramUp[shift]=EMPTY_VALUE;
      }
   }
   return(0);
  }
 
глюк связан с EMPTY_VALUE. когда заменить EMPTY_VALUE на 0, то он не появляется, но тогда раскраска не будет правильной.