Одна линия разными цветами. Разрывы, как исправить?

 
Всем привет! Пытаюсь рисовать одну линию разными цветами и вот что получается:



код:
int start()
{
   int limit,
       counted_bars=IndicatorCounted();
 
   if(counted_bars>0) 
      counted_bars--;
 
   limit=Bars-counted_bars;
   
   for(int i=0;i<limit;i++)
   {
      double maFast=iMA(NULL,0,24,0,MODE_SMA,PRICE_MEDIAN,i),
             maSlow=iMA(NULL,0,6,0,MODE_SMA,PRICE_MEDIAN,i);
      
      if(maFast>maSlow)
      {
         ExtMapBuffer1[i]=0.0;
         ExtMapBuffer2[i]=maSlow;      
      }
      else
      {
         ExtMapBuffer1[i]=maSlow;            
         ExtMapBuffer2[i]=0.0;
      }
   }
   return(0);
}
Как исправить?
Файлы:
 
Обычно примерно такая конструкция используется. Хоть и рисование на истории, зато без разрывов.
for(x = e-period; x >= 0; x--)
  {     
   trend[x] = trend[x+1];
   if (ExtMapBuffer[x]> ExtMapBuffer[x+1]) trend[x] =1;
   if (ExtMapBuffer[x]< ExtMapBuffer[x+1]) trend[x] =-1;
    
   if (trend[x]>0)
    {
      Uptrend[x] = ExtMapBuffer[x]; 
      if (trend[x+1]<0) Uptrend[x+1]=ExtMapBuffer[x+1];
      Dntrend[x] = EMPTY_VALUE;
    }
   else              
   if (trend[x]<0)
    { 
      Dntrend[x] = ExtMapBuffer[x]; 
      if (trend[x+1]>0) Dntrend[x+1]=ExtMapBuffer[x+1];
      Uptrend[x] = EMPTY_VALUE;
    }              
  }
 
Непонятно, можете пояснить суть?
 
Непонятно, можете пояснить суть?


Представим, что в буфере ExtMapBuffer у нас некая линия, которую нужно раскрасить в два цвета в зависимости от её направления (вверх/вниз). Для этого нам понадобятся три дополнительных буфера: Uptrend (если линия направлена вверх), Dntrend (если линия направлена вниз), trend (как раз для борьбы с разрывами). Направление определяем, сравнивая текущее значение линии с предыдущим,  и запоминаем в буфере trend (вверх =1, вниз=-1). Если значение  линии не меняется trend[x] = trend[x+1]. Дальше всё просто: если trend[x]>0 и trend[x+1]<0 значит имеет место разворот с нисходящего движения на восходящее и Uptrend[x] = ExtMapBuffer[x], Uptrend[x+1]=ExtMapBuffer[x+1] (чтобы не было разрыва; линия на графике состоит из отрезков, для построения отрезка нужны две точки, а не одна), Dntrend[x] = EMPTY_VALUE (идем вверх, нафик нам Dntrend); если trend[x]<0 и trend[x+1]>0  значит имеет место разворот с восходяшего движения на нисходящее и Dntrend[x] = ExtMapBuffer[x], Dntrend[x+1]=ExtMapBuffer[x+1], Uptrend[x] = EMPTY_VALUE. Недостаток метода состоит в том,  что он иногда вводит в заблуждение некоторых пользователей + ещё один косяк, который становится заметен, если например сделать на основе той же линии гистограмму. 




Был пропущен одиночный синий бар, но не был пропущен одиночный красный.
 
banderass:
Непонятно, можете пояснить суть?

Привет. А суть в том, что последняя точка линии одного цвета, должна быть первой точкой линии другого цвета.
 
Sadhu
Talex

int start()
{
   int limit,
       counted_bars=IndicatorCounted();
 
   if(counted_bars>0) 
      counted_bars--;
 
   limit=Bars-counted_bars-1;
   
   for(int i=0;i<limit;i++)
   {
      double maFast=iMA(NULL,0,24,0,MODE_SMA,PRICE_MEDIAN,i),
             maSlow=iMA(NULL,0,6,0,MODE_SMA,PRICE_MEDIAN,i),
             maSlow2=iMA(NULL,0,6,0,MODE_SMA,PRICE_MEDIAN,i-1);
             
      ExtMapBuffer3[i]=maFast;             
      
      ExtMapBuffer2[i]=maSlow;      
      ExtMapBuffer1[i]=maSlow;            
      
      if(i>0)
      {       
         if(maFast>maSlow)
         {
            ExtMapBuffer1[i]=0.0;
            ExtMapBuffer2[i-1]=maSlow2;      
         }
         else
         {
            ExtMapBuffer1[i-1]=maSlow2;            
            ExtMapBuffer2[i]=0.0;
         }
      }
   }
   return(0);
}
Большое спасибо за ответы, вроде разобрался. ExtMapBuffer3 рисует медленную линию (если кто разбираться будет):