Графический объект не прорисовывается при изменении ситуации на рынке

 

Помогите, голову сломал. Почему графические объекты не прорисовывается при изменении ситуации на рынке

 



//+------------------------------------------------------------------+

//| Custom indicator deinitialization function                       |

//+------------------------------------------------------------------+

int deinit(){

 ObjectsDeleteAll(0,OBJ_TREND);

  return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function                              |

//+------------------------------------------------------------------+

int start()

  {

   WindowRedraw();

   SPR=MarketInfo(SMB,MODE_SPREAD);

   

   counted_bars=IndicatorCounted();

   

   if(counted_bars==0){limit=Bars-1;}//подсчитанных баров нет, считаем индикатор с самого начала

   if(counted_bars>0){limit=Bars-counted_bars-1;}//подсчитанные бары есть. Поэтому из числа доступных баров вычитаем

   // количество уже подсчитанных и уменьшаем на 1.

   

   for(int i=limit;i>=0;i--){

       //--- записываем значения временных координат линии поддержки в переменные

   

        

    if(

      (High[i+5]<High[i+3] && High[i+4]<High[i+3] && High[i+2]<High[i+3] && High[i+1]<High[i+3])

      || (High[i+6]<High[i+3] && High[i+5]<=High[i+3] && High[i+4]<=High[i+3] && High[i+2]<High[i+3] && High[i+1]<High[i+3])

      || (High[i+7]<High[i+3] && High[i+6]<=High[i+3] && High[i+5]<=High[i+3] && High[i+4]<=High[i+3] && High[i+2]<High[i+3] && High[i+1]<High[i+3])

      ){

      ExtMapBuffer1[i+3]=High[i+3];

      ExtMapBuffer1[i+3]=NormalizeDouble(ExtMapBuffer1[i+3],Digits);

if(priceUp!=ExtMapBuffer1[i+3]){

        priceUp=ExtMapBuffer1[i+3];

        if(i==0 && UseSound){PlaySound(NameSound);}

      }

    }

    if(

       (Low[i+5]>Low[i+3] && Low[i+4]>Low[i+3] && Low[i+2]>Low[i+3] && Low[i+1]>Low[i+3])

       || (Low[i+6]>Low[i+3] && Low[i+5]>=Low[i+3] && Low[i+4]>=Low[i+3] && Low[i+2]>Low[i+3] && Low[i+1]>Low[i+3])

       || (Low[i+7]>Low[i+3] && Low[i+6]>=Low[i+3] && Low[i+5]>=Low[i+3] && Low[i+4]>=Low[i+3] && Low[i+2]>Low[i+3] && Low[i+1]>Low[i+3])

      ){

      ExtMapBuffer2[i+3]=Low[i+3];

      ExtMapBuffer2[i+3]=NormalizeDouble(ExtMapBuffer2[i+3],Digits);

if(priceDown!=ExtMapBuffer2[i+3]){

        priceDown=ExtMapBuffer2[i+3];

        if(i==0 && UseSound){PlaySound(NameSound);}

      }

    }

    

    // Удаление всех построенных линий 

   

  double buf = 0; // буферной значение наличие фрактала, если 0, то фрактала нет


//---- основной цикл

       

        

        //Если он есть, то заносим его в массив фракталов

        buf =  ExtMapBuffer1[i+3];

        if (buf>0)

        {

            Up++;

            bufUpPrice[Up]= ExtMapBuffer1[i+3];

            bufUpDate[Up]=Time[i+3];

              

        }

              

        

        if (Up>2&&(bufUpPrice[Up-1]>bufUpPrice[Up])&&(bufUpPrice[Up-1]>bufUpPrice[Up-2]))

           

      {

          

       ObjectCreate("ObjLine"+Up,OBJ_TREND,0,bufUpDate[Up],bufUpPrice[Up],bufUpDate[Up-1],bufUpPrice[Up-1]);

       ObjectSet( "ObjLine"+Up, OBJPROP_RAY,  false );

       ObjectSet("ObjLine"+Up, OBJPROP_COLOR ,Red);

       ObjectSet("ObjLine"+Up,OBJPROP_WIDTH,3);

   

      

       ObjectCreate("ObjLine2"+Up,OBJ_TREND,0,bufUpDate[Up-2],bufUpPrice[Up-2],bufUpDate[Up-1],bufUpPrice[Up-1]);

       ObjectSet( "ObjLine2"+Up, OBJPROP_RAY,  false );

       ObjectSet("ObjLine2"+Up, OBJPROP_COLOR ,Red);

       ObjectSet("ObjLine2"+Up,OBJPROP_WIDTH,3);

        

     

         

       if (Up>lines+1)

               {

                  ObjectDelete("ObjLine"+(Up-lines));

                  ObjectDelete("ObjLine2"+(Up-lines));                  

               }


     }

       

         //Аналогичный блок, но на Down фракталы

       

        buf =  ExtMapBuffer2[i+3];

        if (buf>0)

        {

            Down++;

            bufDownPrice[Down]= ExtMapBuffer2[i+3];

            bufDownDate[Down]=Time[i+3];    

        }

      

      if (Down>2&&(bufDownPrice[Down-1]<bufDownPrice[Down])&&(bufDownPrice[Down-1]<bufDownPrice[Down-2]))

        {

       

    

       ObjectCreate("ObjLine3"+Down,OBJ_TREND,0,bufDownDate[Down],bufDownPrice[Down],bufDownDate[Down-1],bufDownPrice[Down-1]);

       ObjectSet( "ObjLine3"+Down, OBJPROP_RAY,  false );

       ObjectSet("ObjLine3"+Down, OBJPROP_COLOR ,Blue);

       ObjectSet("ObjLine3"+Down,OBJPROP_WIDTH,3);

    

      

       ObjectCreate("ObjLine4"+Down,OBJ_TREND,0,bufDownDate[Down-2],bufDownPrice[Down-2],bufDownDate[Down-1],bufDownPrice[Down-1]);

       ObjectSet( "ObjLine4"+Down, OBJPROP_RAY,  false );

       ObjectSet("ObjLine4"+Down, OBJPROP_COLOR ,Blue);

       ObjectSet("ObjLine4"+Down,OBJPROP_WIDTH,3);

       if (Down>lines+1)

               {

                  ObjectDelete("ObjLine3"+(Down-lines));

                  ObjectDelete("ObjLine4"+(Down-lines));                  

               }

      

        }

        

   }

   

//----

   return(0);

  }

//+------------------------------------------------------------------+

 
Упростите и сократите код, тогда самим более менее ясно станет, где проблема.
Причина обращения: