Что-то не так...а что?

 
Идея в следующем:
Когда повышается EMA (период 22 взят) и одновременно повышается гистограмма, взятая от линий MACD, по отношению к предыдущему бару, над текущим баром рисуется красная точка, свидетельсвующая о повышающемся тренде, если все присходит наоборот, то есть экспоненциальная скользящая средняя и гистограмма вместе падают, рисуется синяя точка. В противном случае ничего не рисуется.
Все вроде так в индикаторе, но только что-то при нанесении его на график изредка встречаются ситуации, когда точки появляются, а скажем растет только EMA, а гистограмма может падать, и типа этого...
Выкладываю весь код ниже.
Люди ,помогите!!!!!!!!!

extern int period = 22;
extern int ma_shift = 0;
extern int ma_method = 1;//0-3
extern int applied_price_ma = 0;//0-6

extern int fast_ema_period = 12;
extern int slow_ema_period = 26;
extern int signal_period = 9;
extern int applied_price_macd = 0;

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
IndicatorShortName("MACD+MA");
//---- indicators
SetIndexStyle(0,DRAW_ARROW,EMPTY,1,Blue);
SetIndexArrow(0,159);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_ARROW,EMPTY,1,Red);
SetIndexArrow(1,159);
SetIndexBuffer(1,ExtMapBuffer2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int i,counted_bars=IndicatorCounted();
//----
i=Bars-counted_bars-1;
while(i>=0)
{
double MA_0 = iMA(NULL,0,period,ma_shift,ma_method,applied_price_ma,i);
double MA_1 = iMA(NULL,0,period,ma_shift,ma_method,applied_price_ma,i+1);
double MACD_0 = iOsMA(NULL,0,fast_ema_period,slow_ema_period,signal_period,applied_price_macd,i);
double MACD_1 = iOsMA(NULL,0,fast_ema_period,slow_ema_period,signal_period,applied_price_macd,i+1);

if(MA_0>MA_1 && MACD_0>MACD_1)
{
ExtMapBuffer2[i]=High[i];
}

if(MA_0<MA_1 && MACD_0<MACD_1)
{
ExtMapBuffer1[i]=Low[i];
}

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