Два в одном...

 
Всем привет.

Есть два индикатора - стандартный Parabolic и HiLo_Act_Next_Profi2. Во втором можно указывать значение старшего таймфрейма. Можно ли это сделать в Parabolic, чтобы находясь например на Н1 появлялся сигнал Н4. Сигнал Параболика можно использовать после того как закрылась свеча. Значит на меньшем таймфрейме это будум гораздо раньше.
Если такое возможно, желательно, чтобы отображение сигналов было как в третьем индюке + параболик...

Спасибо

//+------------------------------------------------------------------+
//|                                                    Parabolic.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Lime
//---- input parameters
extern double    Step=0.02;
extern double    Maximum=0.2;
//---- buffers
double SarBuffer[];
//----
int    save_lastreverse;
bool   save_dirlong;
double save_start;
double save_last_high;
double save_last_low;
double save_ep;
double save_sar;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorDigits(Digits);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,159);
   SetIndexBuffer(0,SarBuffer);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SaveLastReverse(int last,int dir,double start,double low,double high,double ep,double sar)
  {
   save_lastreverse=last;
   save_dirlong=dir;
   save_start=start;
   save_last_low=low;
   save_last_high=high;
   save_ep=ep;
   save_sar=sar;
  }
//+------------------------------------------------------------------+
//| Parabolic Sell And Reverse system                                |
//+------------------------------------------------------------------+
int start()
  {
   static bool first=true;
   bool   dirlong;
   double start,last_high,last_low;
   double ep,sar,price_low,price_high,price;
   int    i,counted_bars=IndicatorCounted();
//----
   if(Bars<3) return(0);
//---- initial settings
   i=Bars-2;
   if(counted_bars==0 || first)
     {
      first=false;
      dirlong=true;
      start=Step;
      last_high=-10000000.0;
      last_low=10000000.0;
      while(i>0)
        {
         save_lastreverse=i;
         price_low=Low[i];
         if(last_low>price_low)   last_low=price_low;
         price_high=High[i];
         if(last_high<price_high) last_high=price_high;
         if(price_high>High[i+1] && price_low>Low[i+1]) break;
         if(price_high<High[i+1] && price_low<Low[i+1]) { dirlong=false; break; }
         i--;
        }
      //---- initial zero
      int k=i;
      while(k<Bars)
        {
         SarBuffer[k]=0.0;
         k++;
        }
      //---- check further
      if(dirlong) { SarBuffer[i]=Low[i+1]; ep=High[i]; }
      else        { SarBuffer[i]=High[i+1]; ep=Low[i]; }
      i--;
     }
    else
     {
      i=save_lastreverse+1;
      start=save_start;
      dirlong=save_dirlong;
      last_high=save_last_high;
      last_low=save_last_low;
      ep=save_ep;
      sar=save_sar;
     }
//----
   while(i>=0)
     {
      price_low=Low[i];
      price_high=High[i];
      //--- check for reverse
      if(dirlong && price_low<SarBuffer[i+1])
        {
         SaveLastReverse(i,true,start,price_low,last_high,ep,sar);
         start=Step; dirlong=false;
         ep=price_low;  last_low=price_low;
         SarBuffer[i]=last_high;
         i--;
         continue;
        }
      if(!dirlong && price_high>SarBuffer[i+1])
        {
         SaveLastReverse(i,false,start,last_low,price_high,ep,sar);
         start=Step; dirlong=true;
         ep=price_high; last_high=price_high;
         SarBuffer[i]=last_low;
         i--;
         continue;
        }
      //---
      price=SarBuffer[i+1];
      sar=price+start*(ep-price);
      if(dirlong)
        {
         if(ep<price_high && (start+Step)<=Maximum) start+=Step;
         if(price_high<High[i+1] && i==Bars-2)  sar=SarBuffer[i+1];

         price=Low[i+1];
         if(sar>price) sar=price;
         price=Low[i+2];
         if(sar>price) sar=price;
         if(sar>price_low)
           {
            SaveLastReverse(i,true,start,price_low,last_high,ep,sar);
            start=Step; dirlong=false; ep=price_low;
            last_low=price_low;
            SarBuffer[i]=last_high;
            i--;
            continue;
           }
         if(ep<price_high) { last_high=price_high; ep=price_high; }
        }
      else
        {
         if(ep>price_low && (start+Step)<=Maximum) start+=Step;
         if(price_low<Low[i+1] && i==Bars-2)  sar=SarBuffer[i+1];

         price=High[i+1];
         if(sar<price) sar=price;
         price=High[i+2];
         if(sar<price) sar=price;
         if(sar<price_high)
           {
            SaveLastReverse(i,false,start,last_low,price_high,ep,sar);
            start=Step; dirlong=true; ep=price_high;
            last_high=price_high;
            SarBuffer[i]=last_low;
            i--;
            continue;
           }
         if(ep>price_low) { last_low=price_low; ep=price_low; }
        }
      SarBuffer[i]=sar;
      i--;
     }
//   sar=SarBuffer[0];
//   price=iSAR(NULL,0,Step,Maximum,0);
//   if(sar!=price) Print("custom=",sar,"   SAR=",price,"   counted=",counted_bars);
//   if(sar==price) Print("custom=",sar,"   SAR=",price,"   counted=",counted_bars);
//----
   return(0);
  }
//+------------------------------------------------------------------+



Второй...

//+------------------------------------------------------------------+
//|                                         HiLo_Act_Next_Profi2.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                                          Profi_R |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "Profi_R"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 DeepSkyBlue
#property indicator_color2 Black

//---- input parameters
extern int Range=3;
extern int NextTF=60;
//---- buffers
double Up[];
double Dn[];
double UpMA[];
double DnMA[];

int init_flag,d_b=0,no_dr_b;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- indicators
   IndicatorBuffers(4);
   SetIndexStyle(0,DRAW_LINE,0,2);
   SetIndexStyle(1,DRAW_LINE,0,2);
   //SetIndexStyle(6,DRAW_LINE,0,2);
   //SetIndexStyle(7,DRAW_LINE,0,2);
   SetIndexBuffer(0,Up);
   SetIndexBuffer(1,Dn);
   SetIndexBuffer(2,UpMA);
   SetIndexBuffer(3,DnMA);
   SetIndexLabel(0,"Up");
   SetIndexLabel(1,"Dn");
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   SetIndexEmptyValue(6,0.0);
   SetIndexEmptyValue(7,0.0);
//----
   short_name="HiLo_Act_Next_Profi2 ("+Range+",M"+NextTF+")";
   IndicatorShortName(short_name);
   init_flag=0;
//----
   return(0);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted(),limit,cb,i,j,bb_count,cb_count,sb_count,b_bar,end_bar,end_sbar;
   datetime TimeArray[],TimeArray_c[],end_time,begin_time;
//---- 
   if( init_flag!=1 )
   {
      if( minit() < 0 )
      {
         return(-1);
      }
   }
   if( counted_bars<0 )
   {
      return(-1);
   }
   else
   {
      if( Bars-1-counted_bars < 0 )
      {
         limit=0;
      }
      else
      {
         if( Bars-1-counted_bars > Bars-1-no_dr_b)
         {
            limit=Bars-1-no_dr_b;
         }
         else
         {
            limit=Bars-1-counted_bars;
         }
      }
   }
   bb_count=ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),NextTF);
   cb_count=ArrayCopySeries(TimeArray_c,MODE_TIME,Symbol(),Period());
   if( bb_count<=0 || cb_count<=0 )
   {
      return(0);
   }
   for(cb=limit;cb>=0;cb--)
   {
      if( MathCeil(TimeArray[ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)]/NextTF/60)*NextTF*60 >
          MathCeil(Time[cb]/Period()/60)*Period()*60)
      {
         b_bar   =ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)+1+Range;
         end_bar =ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)+2;
         //end_time=(MathCeil(TimeArray[ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)+1]/NextTF/60))*NextTF*60;
         //begin_time=(MathCeil(TimeArray[ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)+1+Range]/NextTF/60))*NextTF*60;
      }
      else
      {
         
         b_bar   =ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)+Range;
         end_bar =ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)+1;
         //end_time=MathCeil(TimeArray[ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)]/NextTF/60)*NextTF*60;
         //begin_time=(MathCeil(TimeArray[ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)+Range]/NextTF/60))*NextTF*60;
      }
      //Alert( TimeToStr(Time[cb])+" ", TimeToStr(iTime(NULL,NextTF,b_bar))+" ", TimeToStr(iTime(NULL,NextTF,end_bar)) );
      //b_bar=ArrayBsearch( TimeArray_c,begin_time,0,0,MODE_ASCEND);
      //end_sbar=ArrayBsearch( TimeArray_c,end_time,0,0,MODE_ASCEND)+1;
      UpMA[cb]=iMA(Symbol(),NextTF,Range,0,MODE_SMA,PRICE_HIGH,end_bar);
      DnMA[cb]=iMA(Symbol(),NextTF,Range,0,MODE_SMA,PRICE_LOW,end_bar);
      //UpMA[cb]=iMA(Symbol(),Period(),b_bar+1-end_bar,0,MODE_SMA,PRICE_HIGH,end_bar);
      //DnMA[cb]=iMA(Symbol(),Period(),b_bar+1-end_bar,0,MODE_SMA,PRICE_LOW,end_bar);
      if( Close[cb]>UpMA[cb] )
      {
         Dn[cb]=DnMA[cb];
         Up[cb]=0.0;
      }
      else
      {
         if( Close[cb]<DnMA[cb] )
         {
            Up[cb]=UpMA[cb];
            Dn[cb]=0.0;
         }
         else
         {
            if( Up[cb+1]>0 )
            {
               Up[cb]=UpMA[cb];
               Dn[cb]=0.0;
            }
            if( Dn[cb+1]>0 )
            {
               Dn[cb]=DnMA[cb];
               Up[cb]=0.0;
            }
         }
      }
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Определение начальной точки отрисовки                            |
//+------------------------------------------------------------------+
int minit()
  {
   datetime TimeArray[];
   int bb_count,cb,i;
//---- 
   //получение времени начала каждого бара с другого таймфрейма
   bb_count=ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),NextTF);
   if( bb_count<1 )
   {
      Alert("Отсутствуют данные Next таймфрейма!");
      return(-1);
   }
   //проверка на необходимость обновления данных большего т-ф
   if( MathCeil(TimeArray[0]/NextTF/60)*NextTF*60 < MathCeil(Time[0]/Period()/60)*Period()*60-NextTF*60 )
   {
      Alert("Необходимо обновить данные Next таймфрейма!");
      return(-1);
   }
   //проверка на необходимость обновления данных текущего т-ф
   if( MathCeil(TimeArray[0]/NextTF/60)*NextTF*60 > MathCeil(Time[0]/Period()/60)*Period()*60 )
   {
      Alert("Необходимо обновить данные текущего таймфрейма!");
      return(-1);
   }
   //если бары на текущем т-ф начинаются с момента отрисовки баров большего т-ф или позже
   if( MathCeil(Time[Bars-1]/Period()/60)*Period()*60 >= MathCeil(TimeArray[bb_count-1]/NextTF/60)*NextTF*60 )
   {
      for( cb=bb_count-1;cb>=0;cb--)
      {
         if( MathCeil(Time[Bars-1]/Period()/60)*Period()*60 >= MathCeil(TimeArray[cb]/NextTF/60)*NextTF*60 &&
             MathCeil(Time[Bars-1]/Period()/60)*Period()*60 < MathCeil(TimeArray[cb-1]/NextTF/60)*NextTF*60 )
         {
            for( i=Bars-1;i>=0;i-- )
            {
               if( MathCeil(Time[i]/Period()/60)*Period()*60 >= MathCeil(TimeArray[cb-Range]/NextTF/60)*NextTF*60 )
               {
                  d_b=i;
                  no_dr_b=Bars-1-d_b;
                  SetIndexDrawBegin(0,no_dr_b+1);
                  SetIndexDrawBegin(1,no_dr_b+1);
                  init_flag=1;
                  break;
               }
            }
            if( d_b>0 )
            {
               break;
            }
         }
      }
   }
   else
   {
      for(cb=Bars-1;cb>=0;cb--)
      {
         //если время бара больше или равно времени бара с которого начинаем отрисовку...
         if( MathCeil(Time[cb]/Period()/60)*Period()*60 >= MathCeil(TimeArray[bb_count-1-Range]/NextTF/60)*NextTF*60 )
         {
            d_b=cb;
            no_dr_b=Bars-1-d_b;
            SetIndexDrawBegin(0,no_dr_b+1);
            SetIndexDrawBegin(1,no_dr_b+1);
            init_flag=1;
            break;
         }
      }
   }
   if( d_b<1 )
   {
      return(-1);
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+



Третий...

//+------------------------------------------------------------------+
//|                                               LargeTimeFrame.mq4 |
//|                                      Copyright © 2005, Miramaxx. |
//|                                    mailto: morrr2001[dog]mail.ru |
//+------------------------------------------------------------------+
//|Построение на графике свечей старшего таймфрейма.                 |
//+------------------------------------------------------------------+


#property copyright "Copyright © 2005, Miramaxx."
#property link "mailto: morrr2001[dog]mail.ru"

#property indicator_chart_window

extern string Timeframe="D1";
extern int CountBars=10;
extern color Bear=Maroon;
extern color Bull=MidnightBlue;

   datetime time1;
   datetime time2;
   double open_price,close_price;
   int bar_tf;
   
   int PeriodName=0;
   int num=0;
   string error="Параметр Timeframe задан не верно \nПример: для часового графика выберите параметр D1.";
   
   void ObjDel()
   {
      for (;num>=0;num--)
      ObjectDelete("Objtf"+num);
   }

int init()
  {

   if (Timeframe=="M1") PeriodName=PERIOD_M1; //в том же порядке, что и кнопки на панели
   else
      if (Timeframe=="M5") PeriodName=PERIOD_M5;
      else
         if (Timeframe=="M15")PeriodName=PERIOD_M15;
         else
            if (Timeframe=="M30")PeriodName=PERIOD_M30;
            else
               if (Timeframe=="H1") PeriodName=PERIOD_H1;
               else
                  if (Timeframe=="H4") PeriodName=PERIOD_H4; 
                  else 
                     if (Timeframe=="D1") PeriodName=PERIOD_D1;
                     else
                        if (Timeframe=="W1") PeriodName=PERIOD_W1; 
                        else
                           if (Timeframe=="MN") PeriodName=PERIOD_MN1;
                           else
                              {
                              Comment(error); 
                              return(0);
                              }
   
   Comment("LargeTimeframe(",Timeframe,")"); 
   return(0);
  }

int deinit()
  {
   ObjDel();
   Comment("");
   return(0);
  }

int start()
  {
  int i;
  ObjDel();
  num=0;

if (PeriodName<=Period())
   {
   Comment(error);
   return(0);
   } 
    
      for (bar_tf=CountBars;bar_tf>=0;bar_tf--)
         {
         time1=iTime(NULL,PeriodName,bar_tf);
         i=bar_tf-1;

         if (i<0) 
            time2=Time[0];
            else
            time2=iTime(NULL,PeriodName,i)-Period()*60;

         open_price=iOpen(NULL,PeriodName,bar_tf);
         close_price=iClose(NULL,PeriodName,bar_tf);

         ObjectCreate("Objtf"+num,OBJ_RECTANGLE,0,time1,open_price,time2,close_price);

         if (time2-time1<PeriodName*60/2)
            time2=Time[0];
            else
            time2=time1+PeriodName*60/2;
   
         num++;
         ObjectCreate("Objtf"+num,OBJ_TREND,0,time2,iHigh(NULL,PeriodName,bar_tf),time2,iLow(NULL,PeriodName,bar_tf));
            ObjectSet("Objtf"+num, OBJPROP_WIDTH, 2);
            ObjectSet("Objtf"+num, OBJPROP_RAY, false);
            ObjectSet("Objtf"+num, OBJPROP_BACK, true);

         if (close_price>open_price)
            {
            ObjectSet("Objtf"+(num-1),OBJPROP_COLOR, Bull);
            ObjectSet("Objtf"+num,OBJPROP_COLOR, Bull);
            }
            else
            {
            ObjectSet("Objtf"+(num-1),OBJPROP_COLOR, Bear);
            ObjectSet("Objtf"+num,OBJPROP_COLOR, Bear);
            }
         num++;
         }
   return(0);
  }
//+------------------------------------------------------------------+
 
имейте в виду, что второй вариант отражает не так как должен был по задумке его автора, т.е. алгоритм не верный, правильным является вариант - 5, или вариант Rosh'a.
 
Привет, Profi_R. Что за вариант 5?
 
привет, честно говоря я уже не совсем помню, но в архиве индюк с таким названием с самой последней редакции у меня индексируется под №5, кажется там учтены все высказанные пожелания и устранены все проблемы, вот код:
//+------------------------------------------------------------------+
//|                                         HiLo_Act_Next_Profi5.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                                          Profi_R |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "Profi_R"

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 DeepSkyBlue
#property indicator_color2 Black
#property indicator_color3 DeepSkyBlue
#property indicator_color4 Black

//---- input parameters
extern int Range=3;
extern int NextTF=60;
extern bool UseFullTF=0;
//---- buffers
double Up[];
double Dn[];
double UpMA[];
double DnMA[];

int init_flag,d_b=0,no_dr_b;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- indicators
   IndicatorBuffers(4);
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID);
   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID);
   SetIndexStyle(2,DRAW_LINE,STYLE_DOT);
   SetIndexStyle(3,DRAW_LINE,STYLE_DOT);
   SetIndexBuffer(0,Up);
   SetIndexBuffer(1,Dn);
   SetIndexBuffer(2,UpMA);
   SetIndexBuffer(3,DnMA);
   SetIndexLabel(0,"Up ("+Range+",M"+NextTF+")");
   SetIndexLabel(1,"Dn ("+Range+",M"+NextTF+")");
   SetIndexLabel(2,"UpMA ("+Range+",M"+NextTF+")");
   SetIndexLabel(3,"DnMA ("+Range+",M"+NextTF+")");
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   SetIndexEmptyValue(2,0.0);
   SetIndexEmptyValue(3,0.0);
//----
   short_name="HiLo_Act_Next_Profi5 ("+Range+",M"+NextTF+")";
   IndicatorShortName(short_name);
   init_flag=0;
//----
   return(0);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted(),limit,cb,i,j,bb_count,cb_count,sb_count,b_bar,end_bar,end_sbar;
   datetime TimeArray[],TimeArray_c[],end_time,begin_time;
//---- 
   if( init_flag!=1 )
   {
      if( minit() < 0 )
      {
         return(-1);
      }
   }
   if( counted_bars<0 )
   {
      return(-1);
   }
   else
   {
      if( Bars-1-counted_bars < 0 )
      {
         limit=0;
      }
      else
      {
         if( Bars-1-counted_bars > Bars-1-no_dr_b)
         {
            limit=Bars-1-no_dr_b;
         }
         else
         {
            limit=Bars-1-counted_bars;
         }
      }
   }
   bb_count=ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),NextTF);
   cb_count=ArrayCopySeries(TimeArray_c,MODE_TIME,Symbol(),Period());
   if( bb_count<=0 || cb_count<=0 )
   {
      return(0);
   }
   for(cb=limit;cb>=0;cb--)
   {
      if( MathCeil(TimeArray[ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)]/NextTF/60)*NextTF*60 >
          MathCeil(Time[cb]/Period()/60)*Period()*60)
      {
         b_bar   =ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)+1+Range;
         end_bar =ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)+2;
         //end_time=(MathCeil(TimeArray[ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)+1]/NextTF/60))*NextTF*60;
         //begin_time=(MathCeil(TimeArray[ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)+1+Range]/NextTF/60))*NextTF*60;
      }
      else
      {
         
         b_bar   =ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)+Range;
         end_bar =ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)+1;
         //end_time=MathCeil(TimeArray[ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)]/NextTF/60)*NextTF*60;
         //begin_time=(MathCeil(TimeArray[ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)+Range]/NextTF/60))*NextTF*60;
      }
      //Alert( TimeToStr(Time[cb])+" ", TimeToStr(iTime(NULL,NextTF,b_bar))+" ", TimeToStr(iTime(NULL,NextTF,end_bar)) );
      //b_bar=ArrayBsearch( TimeArray_c,begin_time,0,0,MODE_ASCEND);
      //end_sbar=ArrayBsearch( TimeArray_c,end_time,0,0,MODE_ASCEND)+1;
      UpMA[cb]=iMA(Symbol(),NextTF,Range,0,MODE_SMA,PRICE_HIGH,end_bar);
      DnMA[cb]=iMA(Symbol(),NextTF,Range,0,MODE_SMA,PRICE_LOW,end_bar);
      //UpMA[cb]=iMA(Symbol(),Period(),b_bar+1-end_bar,0,MODE_SMA,PRICE_HIGH,end_bar);
      //DnMA[cb]=iMA(Symbol(),Period(),b_bar+1-end_bar,0,MODE_SMA,PRICE_LOW,end_bar);
      if( UseFullTF==0 )
      {
         if( Close[cb]>UpMA[cb] )
         {
            Dn[cb]=DnMA[cb];
            Up[cb]=0.0;
         }
         else
         {
            if( Close[cb]<DnMA[cb] )
            {
               Up[cb]=UpMA[cb];
               Dn[cb]=0.0;
            }
            else
            {
               if( Up[cb+1]>0 )
               {
                  Up[cb]=UpMA[cb];
                  Dn[cb]=0.0;
               }
               if( Dn[cb+1]>0 )
               {
                  Dn[cb]=DnMA[cb];
                  Up[cb]=0.0;
               }
            }
         }
      }
      else
      {
         if( Close[cb+1]>UpMA[cb+1] && 
             (MathCeil(TimeArray[end_bar]/NextTF/60)+1)*NextTF*60==(MathCeil(Time[cb]/Period()/60))*Period()*60 )
         {
            Dn[cb]=DnMA[cb];
            Up[cb]=0.0;
         }
         else
         {
            if( Close[cb+1]<DnMA[cb+1] &&
                (MathCeil(TimeArray[end_bar]/NextTF/60)+1)*NextTF*60==(MathCeil(Time[cb]/Period()/60))*Period()*60 )
            {
               Up[cb]=UpMA[cb];
               Dn[cb]=0.0;
            }
            else
            {
               if( Up[cb+1]>0 )
               {
                  Up[cb]=UpMA[cb];
                  Dn[cb]=0.0;
               }
               if( Dn[cb+1]>0 )
               {
                  Dn[cb]=DnMA[cb];
                  Up[cb]=0.0;
               }
            }
         }
      }
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Определение начальной точки отрисовки                            |
//+------------------------------------------------------------------+
int minit()
  {
   datetime TimeArray[];
   int bb_count,cb,i;
//---- 
   //проверка на правильность выставленных параметров
   if( NextTF<=Period() )
   {
      if( Period()<5 )
      {
         NextTF=5;
      }
      else
      {
         if( Period()<15 )
         {
            NextTF=15;
         }
         else
         {
            if( Period()<30 )
            {
               NextTF=30;
            }
            else
            {
               if( Period()<60 )
               {
                  NextTF=60;
               }
               else
               {
                  if( Period()<240 )
                  {
                     NextTF=240;
                  }
                  else
                  {
                     if( Period()<1440 )
                     {
                        NextTF=1440;
                     }
                     else
                     {
                        if( Period()<10080 )
                        {
                           NextTF=10080;
                        }
                        else
                        {
                           if( Period()<43200 )
                           {
                              NextTF=43200;
                           }
                           else
                           {
                              Alert("Неверно выставлен NextTF!!!");
                              return(-1);
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }
   //получение времени начала каждого бара с другого таймфрейма
   bb_count=ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),NextTF);
   if( bb_count<1 )
   {
      Alert("HL_Activ("+Period()+"): Отсутствуют данные Next таймфрейма!");
      return(-1);
   }
   //проверка на необходимость обновления данных большего т-ф
   if(NextTF!=10080)
   {
      if( MathCeil(TimeArray[0]/NextTF/60)*NextTF*60 < MathCeil(Time[0]/Period()/60)*Period()*60-NextTF*60 )
      {
         Alert("HL_Activ("+Period()+"): Необходимо обновить данные Next таймфрейма!");
         return(-1);
      }
   }
   //проверка на необходимость обновления данных текущего т-ф
   if( NextTF!=10080 )
   {
      if( MathCeil(TimeArray[0]/NextTF/60)*NextTF*60 > MathCeil(Time[0]/Period()/60)*Period()*60 )
      {
         Alert("HL_Activ("+Period()+"): Необходимо обновить данные текущего таймфрейма!");
         return(-1);
      }
   }
   //если бары на текущем т-ф начинаются с момента отрисовки баров большего т-ф или позже
   if( MathCeil(Time[Bars-1]/Period()/60)*Period()*60 >= MathCeil(TimeArray[bb_count-1]/NextTF/60)*NextTF*60 )
   {
      for( cb=bb_count-1;cb>=0;cb--)
      {
         if( MathCeil(Time[Bars-1]/Period()/60)*Period()*60 >= MathCeil(TimeArray[cb]/NextTF/60)*NextTF*60 &&
             MathCeil(Time[Bars-1]/Period()/60)*Period()*60 < MathCeil(TimeArray[cb-1]/NextTF/60)*NextTF*60 )
         {
            for( i=Bars-1;i>=0;i-- )
            {
               if( MathCeil(Time[i]/Period()/60)*Period()*60 >= MathCeil(TimeArray[cb-Range]/NextTF/60)*NextTF*60 )
               {
                  d_b=i;
                  no_dr_b=Bars-1-d_b;
                  SetIndexDrawBegin(0,no_dr_b+1);
                  SetIndexDrawBegin(1,no_dr_b+1);
                  init_flag=1;
                  break;
               }
            }
            if( d_b>0 )
            {
               break;
            }
         }
      }
   }
   else
   {
      for(cb=Bars-1;cb>=0;cb--)
      {
         //если время бара больше или равно времени бара с которого начинаем отрисовку...
         if( MathCeil(Time[cb]/Period()/60)*Period()*60 >= MathCeil(TimeArray[bb_count-1-Range]/NextTF/60)*NextTF*60 )
         {
            d_b=cb;
            no_dr_b=Bars-1-d_b;
            SetIndexDrawBegin(0,no_dr_b+1);
            SetIndexDrawBegin(1,no_dr_b+1);
            init_flag=1;
            break;
         }
      }
   }
   if( d_b<1 )
   {
      return(-1);
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
Причина обращения: