Не дайте пропасть двум хорошим индикаторам sos sos sos HELP HELP - страница 2

 
да на такой ерунде заткнулся, два дня потерял, количество буферов всего два, потому и парились :) или массивы нужно было инициализировать
 
вот тупой перевод кода, с использованием буфера (можно также без них) только по М5
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 DeepSkyBlue
#property indicator_color2 Black
//---- input parameters
extern int       Range=3;
//---- buffers
double Up[];
double Dn[];
double ur1[];
double ur2[];
double h1[];
double l1[];
//-----
int cb;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(6);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(0,159);
   SetIndexArrow(1,159);
   SetIndexBuffer(0,Up);
   SetIndexBuffer(1,Dn);
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   SetIndexLabel(0,"Up");
   SetIndexLabel(1,"Dn");
   
   SetIndexBuffer(2,ur1);
   SetIndexBuffer(3,ur2);
   SetIndexBuffer(4,h1);
   SetIndexBuffer(5,l1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
//------ объявление локальных переменных
   int counted_bars=IndicatorCounted();
   int NumBars=1000, n=0, Nbar=0, k=0, hh=0, ll=0, mm=0;
   double MaH=0.0, MaL=0.0;
//-----
for( cb=NumBars; cb>=0; cb--)
{
   Nbar=-1;
   k=1;
   mm=0;

//-----------------------------------------------------------------------------
   if( Period()==5 ) //если график - М5
   {
      if( TimeHour(Time[cb+1])!=TimeHour(Time[cb]) )
      {
         Print("Текущая свечка "+cb+" дата "+TimeToStr(Time[cb])+" Nbar= "+Nbar+" k= "+k+" mm= "+mm );
         n = cb - 15;
         Print("----   n= "+n );
         while( n<=cb+Range*12+5 )
         {
            if( n<0 )
            {
               Nbar=0;
               n=1;
               Print("----   n= "+n+" Nbar= "+Nbar );
            }
            if( TimeHour(Time[n+1])!=TimeHour(Time[n]) )
            {
               if( Nbar==-1 )
               {
               	Nbar=n;
               	mm=n;
               	n++;
               	Print("----   n= "+n+" Nbar= "+Nbar+" mm= "+mm );
               	continue;
               }
               else
               {
               	h1[k]=High[Highest(NULL,0,MODE_HIGH,(n-Nbar),n)];
               	l1[k]=Low[Lowest(NULL,0,MODE_LOW,(n-Nbar),n)];
                  Print("----   k= "+k+" Nbar= "+Nbar+" n= "+n+" h1["+k+"]= "+h1[k]+" l1["+k+"]= "+l1[k]+" "+(Low[Lowest(NULL,0,MODE_LOW,(n-Nbar),n)])+" "+(High[Lowest(NULL,0,MODE_HIGH,(n-Nbar),n)]) );
               	k++;
               	Nbar=n;
               }
            }
            n++;
         }
         MaH=0;
         MaL=0;
         for( n=1;n<=Range;n++)
         {
            MaH=MaH+h1[n];
            MaL=MaL+l1[n];
         }
         MaH=MaH/Range;
         MaL=MaL/Range;
         ur1[cb]=MaH;
         ur2[cb]=MaL;
         Print("----   MaH= "+MaH+" MaL= "+MaL+" ur1["+cb+"]= "+ur1[cb]+" ur2["+cb+"]= "+ur2[cb] );
         if( Close[mm+1]>=MaH ) { ll=1; hh=0; }
         if( Close[mm+1]<=MaL ) { hh=1; ll=0; } //вроде как это условие не выполняется никогда
         Print("----   ll= "+ll+" hh= "+hh );
      }
      if( ur1[cb]==0.0 )
      {
         ur1[cb]=ur1[cb+1];
         ur2[cb]=ur2[cb+1];
         Print("----  ur1["+cb+"]= "+ur1[cb]+" ur2["+cb+"]= "+ur2[cb] );
      }
      if( ll==1 )
      {
         Dn[cb]=0.0;
         Up[cb]=ur2[cb];
         Print("----  Dn["+cb+"]= "+Dn[cb]+" Up["+cb+"]= "+Up[cb] );
      }
      else
      {
      	if( hh == 1 )
      	{
        	   Up[cb]=0.0;
         	Dn[cb]=ur1[cb];
         	Print("----  Dn["+cb+"]= "+Dn[cb]+" Up["+cb+"]= "+Up[cb] );
      	}
      }   
   }
   //else {
//-----------------------------------------------------------------------------
}
//-----
   return(0);
  }
//+------------------------------------------------------------------+



P.S. все "принты" нужно закомментить

 
Наконец то рисует!!!! жаль только, что пока не у каждого бара - но РИСУЕТ!!! Круто Profi_R!!! Спасибо!!!!
 
вроде довел до ума для пятиминуток, нужно проверить т.к. я не знаю логики, то не могу судить о правильности расчетов, ну и если вдруг какие проблемы в ходе работы, то не откажу
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 DeepSkyBlue
#property indicator_color2 Black
//---- input parameters
extern int       Range=3;
//---- buffers
double Up[];
double Dn[];
double ur1[];
double ur2[];
double h1[];
double l1[];
//-----
int cb;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(6);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(0,159);
   SetIndexArrow(1,159);
   SetIndexBuffer(0,Up);
   SetIndexBuffer(1,Dn);
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   SetIndexLabel(0,"Up");
   SetIndexLabel(1,"Dn");
   
   SetIndexBuffer(2,ur1);
   SetIndexBuffer(3,ur2);
   SetIndexBuffer(4,h1);
   SetIndexBuffer(5,l1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
//------ объявление локальных переменных
   int counted_bars=IndicatorCounted();
   int NumBars=1000, n=0, Nbar=0, k=0, hh=0, ll=0, mm=0;
   double MaH=0.0, MaL=0.0;
   
//-----
if(Bars<Range*12-10) return(0);
if(counted_bars>=Bars-1)
{
   NumBars=0;
}
else
{
   NumBars=MathMax(Bars-1-counted_bars-(Range*12-10),Range*12-10);
}
//
for( cb=NumBars; cb>=0; cb--)
{
   Nbar=-1;
   k=1;
   mm=0;
   Dn[cb]=0.0;
   Up[cb]=0.0;
   ur1[cb]=0.0;
   ur2[cb]=0.0;
   h1[cb]=0.0;
   l1[cb]=0.0;
//-----------------------------------------------------------------------------
   if( Period()==5 ) //если график - М5
   {
      //Print("Текущая свечка "+cb+" дата "+TimeToStr(Time[cb]) );
      //Print("----   Dn[cb]= "+Dn[cb]+" Up[cb]= "+Up[cb] );
      if( TimeHour(Time[cb+1])!=TimeHour(Time[cb]) )
      {
         //Print("----   Nbar= "+Nbar+" k= "+k+" mm= "+mm );
         n = cb - 15;
         //Print("----   n= "+n );
         while( n<=cb+Range*12+5 )
         {
            if( n<0 )
            {
               Nbar=0;
               n=1;
               //Print("----   n= "+n+" Nbar= "+Nbar );
            }
            if( TimeHour(Time[n+1])!=TimeHour(Time[n]) )
            {
               if( Nbar==-1 )
               {
               	Nbar=n;
               	mm=n;
               	n++;
               	//Print("----   n= "+n+" Nbar= "+Nbar+" mm= "+mm );
               	continue;
               }
               else
               {
               	h1[k]=High[Highest(NULL,0,MODE_HIGH,(n-Nbar),n)];
               	l1[k]=Low[Lowest(NULL,0,MODE_LOW,(n-Nbar),n)];
                  //Print("----   k= "+k+" Nbar= "+Nbar+" n= "+n+" h1["+k+"]= "+h1[k]+" l1["+k+"]= "+l1[k]+" "+(Low[Lowest(NULL,0,MODE_LOW,(n-Nbar),n)])+" "+(High[Lowest(NULL,0,MODE_HIGH,(n-Nbar),n)]) );
               	k++;
               	Nbar=n;
               }
            }
            n++;
         }
         MaH=0;
         MaL=0;
         for( n=1;n<=Range;n++)
         {
            MaH=MaH+h1[n];
            MaL=MaL+l1[n];
         }
         MaH=MaH/Range;
         MaL=MaL/Range;
         ur1[cb]=MaH;
         ur2[cb]=MaL;
         //Print("----   MaH= "+MaH+" MaL= "+MaL+" ur1["+cb+"]= "+ur1[cb]+" ur2["+cb+"]= "+ur2[cb] );
         if( Close[mm+1]>=MaH )
         {
            ll=1;
            hh=0;
            //Print("----   Close["+(mm+1)+"]"+Close[mm+1]+">="+"MaH"+MaH+"  ="+(Close[mm+1]>=MaH) );
         }
         if( Close[mm+1]<=MaL )
         {
            hh=1;
            ll=0;
            //Print("----   Close["+(mm+1)+"]"+Close[mm+1]+"<="+"MaL"+MaL+"  ="+(Close[mm+1]<=MaL) );
         }
         //Print("----   ll= "+ll+" hh= "+hh );
      }
      if( ur1[cb]==0.0 )
      {
         ur1[cb]=ur1[cb+1];
         ur2[cb]=ur2[cb+1];
         //Print("----  ur1["+cb+"]= "+ur1[cb]+" ur2["+cb+"]= "+ur2[cb] );
      }
      if( ll==1 )
      {
         Up[cb]=ur2[cb];
         //Print("----  Dn["+cb+"]= "+Dn[cb]+" Up["+cb+"]= "+Up[cb] );
         //Print("----  1 Up["+cb+"]= "+Up[cb]+" ur2[cb]="+ur2[cb] );
      }
      else
      {
      	if( hh == 1 )
      	{
         	Dn[cb]=ur1[cb];
         	//Print("----  Dn["+cb+"]= "+Dn[cb]+" Up["+cb+"]= "+Up[cb] );
         	//Print("----                                        2 Up["+cb+"]= "+Up[cb] );
      	}
      	else
      	{
            Dn[cb]=Dn[cb+1];
            Up[cb]=Up[cb+1];
      	}
      }   
   }
   //else {
//-----------------------------------------------------------------------------
}
//-----
   return(0);
  }
//+------------------------------------------------------------------+
 
По сравнению с Mt3 индикатор стал более чуствителен к изменению тренда (с моей точки зрения - это не есть хорошо). Пример - по GBP - в MT3 c 28/07 - 11:55 показывает покупку - что есть великолепно!!!, а новый для MT4 к cожалению несколько раз показывал за этот период продажу - что есть печально!!!
тем не менее - огромное спасибо!!!
 
2hell
я не изменял код МТ3, просто глупо перевел его на МТ4, про систему "трех экранов" Элдера я в курсе, а вот логику просчета индикатора я так и не понял поэтому не могу сказать почему он стал чувствительнее, если сможешь описать своим языком алгоритм (как посчитать его на определенной свече?) тогда можно будет изменить. Это полный код индикатора
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 DeepSkyBlue
#property indicator_color2 Black
//---- input parameters
extern int       Range=3;
//---- buffers
double Up[];
double Dn[];
double ur1[];
double ur2[];
double h1[];
double l1[];
//-----
int cb;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(6);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(0,159);
   SetIndexArrow(1,159);
   SetIndexBuffer(0,Up);
   SetIndexBuffer(1,Dn);
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   SetIndexLabel(0,"Up");
   SetIndexLabel(1,"Dn");
   
   SetIndexBuffer(2,ur1);
   SetIndexBuffer(3,ur2);
   SetIndexBuffer(4,h1);
   SetIndexBuffer(5,l1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
//------ объявление локальных переменных
   int counted_bars=IndicatorCounted();
   int NumBars=1000, n=0, Nbar=0, k=0, hh=0, ll=0, mm=0;
   double MaH=0.0, MaL=0.0;
   
//-----
if(Bars<Range*12-10) return(0);
if(counted_bars>=Bars-1)
{
   NumBars=0;
}
else
{
   NumBars=MathMax(Bars-1-counted_bars-(Range*12-10),Range*12-10);
}
//
for( cb=NumBars; cb>=0; cb--)
{
   Nbar=-1;
   k=1;
   mm=0;
   Dn[cb]=0.0;
   Up[cb]=0.0;
   ur1[cb]=0.0;
   ur2[cb]=0.0;
   h1[cb]=0.0;
   l1[cb]=0.0;
//-----------------------------------------------------------------------------
   if( Period()==5 ) //если график - М5
   {
      //Print("Текущая свечка "+cb+" дата "+TimeToStr(Time[cb]) );
      //Print("----   Dn[cb]= "+Dn[cb]+" Up[cb]= "+Up[cb] );
      if( TimeHour(Time[cb+1])!=TimeHour(Time[cb]) )
      {
         //Print("----   Nbar= "+Nbar+" k= "+k+" mm= "+mm );
         n=cb-15;
         //Print("----   n= "+n );
         while( n<=cb+Range*12+5 )
         {
            if( n<0 )
            {
               Nbar=0;
               n=1;
               //Print("----   n= "+n+" Nbar= "+Nbar );
            }
            if( TimeHour(Time[n+1])!=TimeHour(Time[n]) )
            {
               if( Nbar==-1 )
               {
               	Nbar=n;
               	mm=n;
               	n++;
               	//Print("----   n= "+n+" Nbar= "+Nbar+" mm= "+mm );
               	continue;
               }
               else
               {
               	h1[k]=High[Highest(NULL,0,MODE_HIGH,(n-Nbar),n)];
               	l1[k]=Low[Lowest(NULL,0,MODE_LOW,(n-Nbar),n)];
                  //Print("----   k= "+k+" Nbar= "+Nbar+" n= "+n+" h1["+k+"]= "+h1[k]+" l1["+k+"]= "+l1[k]+" "+(Low[Lowest(NULL,0,MODE_LOW,(n-Nbar),n)])+" "+(High[Lowest(NULL,0,MODE_HIGH,(n-Nbar),n)]) );
               	k++;
               	Nbar=n;
               }
            }
            n++;
         }
         MaH=0;
         MaL=0;
         for( n=1;n<=Range;n++)
         {
            MaH=MaH+h1[n];
            MaL=MaL+l1[n];
         }
         MaH=MaH/Range;
         MaL=MaL/Range;
         ur1[cb]=MaH;
         ur2[cb]=MaL;
         //Print("----   MaH= "+MaH+" MaL= "+MaL+" ur1["+cb+"]= "+ur1[cb]+" ur2["+cb+"]= "+ur2[cb] );
         if( Close[mm+1]>=MaH )
         {
            ll=1;
            hh=0;
            //Print("----   Close["+(mm+1)+"]"+Close[mm+1]+">="+"MaH"+MaH+"  ="+(Close[mm+1]>=MaH) );
         }
         if( Close[mm+1]<=MaL )
         {
            hh=1;
            ll=0;
            //Print("----   Close["+(mm+1)+"]"+Close[mm+1]+"<="+"MaL"+MaL+"  ="+(Close[mm+1]<=MaL) );
         }
         //Print("----   ll= "+ll+" hh= "+hh );
      }
      if( ur1[cb]==0.0 )
      {
         ur1[cb]=ur1[cb+1];
         ur2[cb]=ur2[cb+1];
         //Print("----  ur1["+cb+"]= "+ur1[cb]+" ur2["+cb+"]= "+ur2[cb] );
      }
      if( ll==1 )
      {
         Up[cb]=ur2[cb];
         //Print("----  Dn["+cb+"]= "+Dn[cb]+" Up["+cb+"]= "+Up[cb] );
         //Print("----  1 Up["+cb+"]= "+Up[cb]+" ur2[cb]="+ur2[cb] );
      }
      else
      {
      	if( hh==1 )
      	{
         	Dn[cb]=ur1[cb];
         	//Print("----  Dn["+cb+"]= "+Dn[cb]+" Up["+cb+"]= "+Up[cb] );
         	//Print("----                                        2 Up["+cb+"]= "+Up[cb] );
      	}
      	else
      	{
            Dn[cb]=Dn[cb+1];
            Up[cb]=Up[cb+1];
      	}
      }   
   }
   else {
//-----------------------------------------------------------------------------

   if( Period()==15 ) //если график - М15
   {
      if( TimeHour(Time[cb+1])!=TimeHour(Time[cb]) )
      {
         n=cb-5;
         while( n<=cb+Range*4+2 )
         {
            if( n<0 )
            {
               Nbar=0;
               n=1;
            }
            if( TimeHour(Time[n+1])!=TimeHour(Time[n]) )
            {
				if( Nbar==-1 )
               {
                  Nbar=n;
               	mm=n;
               	n++;
               	continue;
               }
            	else
               {
                  h1[k]=High[Highest(NULL,0,MODE_HIGH,(n-Nbar),n)];
               	l1[k]=Low[Lowest(NULL,0,MODE_LOW,(n-Nbar),n)];
               	k++;
               	Nbar=n;
               }
         	}
            n++;
         }
         MaH=0;
         MaL=0;
         for( n=1;n<=Range;n++ )
         {
            MaH=MaH+h1[n];
            MaL=MaL+l1[n];
         }
         MaH=MaH/Range;
         MaL=MaL/Range;
         ur1[cb]=MaH;
         ur2[cb]=MaL;
         if( Close[mm+1]>=MaH )
         {
            ll=1;
            hh=0;
         }
         if( Close[mm+1]<=MaL )
         {
            hh=1;
            ll=0;
         }
      }
      if( ur1[cb]==0.0 )
      {
         ur1[cb]=ur1[cb+1];
         ur2[cb]=ur2[cb+1];
      }
      if( ll==1 )
      {
         Up[cb]=ur2[cb];
      }
      else
      {
      	if( hh==1 )
      	{
         	Dn[cb]=ur1[cb];
      	}
	  }
   }
   else {
//-----------------------------------------------------------------------------

   if( Period()==30 ) //если график - М30
   {
      if( (TimeMinute(Time[cb])==0 && (TimeHour(Time[cb])==0 || TimeHour(Time[cb])==4 || TimeHour(Time[cb])==8 || 
           TimeHour(Time[cb])==12 || TimeHour(Time[cb])==16 || TimeHour(Time[cb])==20)) )
      {
         n=cb-10;
         while( n<=cb+Range*8+5 )
         {
            if( n<0 )
            {
               Nbar=0;
               n=1;
            }
            if( (TimeMinute(Time[n])==0 && (TimeHour(Time[n])==0 || TimeHour(Time[n])==4 || TimeHour(Time[n])==8 |
			        TimeHour(Time[n])==12 || TimeHour(Time[n])==16 || TimeHour(Time[n])==20)) )
            {
				  if( Nbar==-1 )
              {
                  Nbar=n;
                  mm=n;
                  n++;
                  continue;
              }
              else
              {
                  h1[k]=High[Highest(NULL,0,MODE_HIGH,(n-Nbar),n)];
                  l1[k]=Low[Lowest(NULL,0,MODE_LOW,(n-Nbar),n)];
                  k++;
                  Nbar=n;
              }
            }
            n++;
         }
         MaH=0;
         MaL=0;
         for( n=1;n<=Range;n++ )
         {
            MaH=MaH+h1[n];
            MaL=MaL+l1[n];
         }
         MaH=MaH/Range;
         MaL=MaL/Range;
         ur1[cb]=MaH;
         ur2[cb]=MaL;
         if( Close[mm+1]>=MaH )
         {
            ll=1;
            hh=0;
         }
         if( Close[mm+1]<=MaL )
         {
            hh=1;
            ll=0;
         }
      }
      if( ur1[cb]==0 )
      {
         ur1[cb]=ur1[cb+1];
         ur2[cb]=ur2[cb+1];
      }
      if( ll==1 )
      {
         Up[cb]=ur2[cb];
      }
      else
      {
      	if( hh==1 )
      	{
         	Dn[cb]=ur1[cb];
      	}
	  }
   }
   else {
//-----------------------------------------------------------------------------

   if( Period()==60 ) //если график - H1
      {
      if( (TimeMinute(Time[cb])==0 && (TimeHour(Time[cb])==0 || TimeHour(Time[cb])==4 || TimeHour(Time[cb])==8 || 
           TimeHour(Time[cb])==12 || TimeHour(Time[cb])==16 || TimeHour(Time[cb])==20)) )
      {
         n=cb-6;
         while( n<=cb+Range*4+3 )
         {
            if( n<0 )
            {
               Nbar=0;
               n=1;
            }
			   if( (TimeMinute(Time[n])==0 && (TimeHour(Time[n])==0 || TimeHour(Time[n])==4 || TimeHour(Time[n])==8 |
   			     TimeHour(Time[n])==12 || TimeHour(Time[n])==16 || TimeHour(Time[n])==20)) ) 
	     		{
               if( Nbar==-1 )
               {
                  Nbar=n;
                  mm=n;
                  n++;
                  continue;
               }
				  else
               {
                  h1[k]=High[Highest(NULL,0,MODE_HIGH,(n-Nbar),n)];
                  l1[k]=Low[Lowest(NULL,0,MODE_LOW,(n-Nbar),n)];
                  k++;
                  Nbar=n;
               }
            }
            n++;
         }
         MaH=0;
         MaL=0;
         for( n=1;n<=Range;n++ )
         {
            MaH=MaH+h1[n];
            MaL=MaL+l1[n];
         }
         MaH=MaH/Range;
         MaL=MaL/Range;
         ur1[cb]=MaH;
         ur2[cb]=MaL;
         if( Close[mm+1]>=MaH )
         {
            ll=1;
            hh=0;
         }
         if( Close[mm+1]<=MaL )
         {
            hh=1;
            ll=0;
         }
      }
      if( ur1[cb]==0 )
      {
         ur1[cb]=ur1[cb+1];
         ur2[cb]=ur2[cb+1];
      }
      if( ll==1 )
      {
         Up[cb]=ur2[cb];
      }
      else
      {
      	if( hh==1 )
      	{
         	Dn[cb]=ur1[cb];
      	}
	  }
   }
   else {
//-----------------------------------------------------------------------------

   if( Period()==240 ) //если график - H4
      {
      if( TimeDay(Time[cb+1])!=TimeDay(Time[cb]) )
      {
         n=cb-8;
         while( n<=cb+Range*8+4 )
         {
            if( n<0 )
            {
               Nbar=0;
               n=1;
            }
            if( TimeDay(Time[n+1])!=TimeDay(Time[n]) )
            {
               if( Nbar==-1 )
               {
                  Nbar=n;
                  mm=n;
                  n++;
                  continue;
               }
            	else
               {
                  h1[k]=High[Highest(NULL,0,MODE_HIGH,(n-Nbar),n)];
                  l1[k]=Low[Lowest(NULL,0,MODE_LOW,(n-Nbar),n)];
                  k++;
                  Nbar=n;
               }
            }
            n++;
         }
         MaH=0;
         MaL=0;
         for( n=1;n<=Range;n++ )
         {
            MaH=MaH+h1[n];
            MaL=MaL+l1[n];
         }
         MaH=MaH/Range;
         MaL=MaL/Range;
         ur1[cb]=MaH;
         ur2[cb]=MaL;
         if( Close[mm+1]>=MaH )
         {
            ll=1;
            hh=0;
         }
         if( Close[mm+1]<=MaL )
         {
            hh=1;
            ll=0;
         }
      }
      if( ur1[cb]==0 )
      {
         ur1[cb]=ur1[cb+1];
         ur2[cb]=ur2[cb+1];
      }
      if( ll==1 )
      {
         Up[cb]=ur2[cb];
      }
      else
      {
      	if( hh==1 )
      	{
         	Dn[cb]=ur1[cb];
      	}
      }
   }
   else {
//-----------------------------------------------------------------------------

   if( Period()==1440 ) //если график - D1
   {
      if( TimeDayOfWeek(Time[cb+1])==5 && TimeDayOfWeek(Time[cb])==1 )
      {
         n=cb-6;
         while( n<=cb+Range*5+3 )
         {
            if( n<0 )
            {
               Nbar=0;
               n=1;
            }
            if( TimeDayOfWeek(Time[n+1])==6 || TimeDayOfWeek(Time[n])==2 )
            {
            	if( Nbar==-1 )
            	{
                  Nbar=n;
               	mm=n;
               	n++;
               	continue;
            	}
            	else
               {
                  h1[k]=High[Highest(NULL,0,MODE_HIGH,(n-Nbar),n)];
               	l1[k]=Low[Lowest(NULL,0,MODE_LOW,(n-Nbar),n)];
               	k++;
               	Nbar=n;
               }
            }
            n++;
         }
         MaH=0;
         MaL=0;
         for( n=1;n<=Range;n++ )
         {
            MaH=MaH+h1[n];
            MaL=MaL+l1[n];
         }
         MaH=MaH/Range;
         MaL=MaL/Range;
         ur1[cb]=MaH;
         ur2[cb]=MaL;
         if( Close[mm+1]>=MaH )
         {
            ll=1;
            hh=0;
         }
         if( Close[mm+1]<=MaL )
         {
            hh=1;
            ll=0;
         }
      }
      if( ur1[cb]==0 )
      {
         ur1[cb]=ur1[cb+1];
         ur2[cb]=ur2[cb+1];
      }
      if( ll==1 )
      {
         Up[cb]=ur2[cb];
      }
      else
      {
      	if( hh==1 )
      	{
         	Dn[cb]=ur1[cb];
      	}
      }
   }
   else {
//-----------------------------------------------------------------------------

   if( Period()== 10080 ) //если график - W1
   {
      if( TimeMonth(Time[cb+1])!=TimeMonth(Time[cb]) )
      {
         n=cb-8;
         while( n<=cb+Range*8+4 )
         {
            if( n<0 )
            {
               Nbar=0;
               n=1;
            }
            if( TimeMonth(Time[n+1])!=TimeMonth(Time[n]) )
            {
               if( Nbar==-1 )
               {
                  Nbar=n;
                  mm=n;
                  n++;
                  continue;
               }
               else
            	{
                  h1[k]=High[Highest(NULL,0,MODE_HIGH,(n-Nbar),n)];
                  l1[k]=Low[Lowest(NULL,0,MODE_LOW,(n-Nbar),n)];
            		k++;
                  Nbar=n;
	            }
            }
            n++;
         }
         MaH=0;
         MaL=0;
         for( n=1;n<=Range;n++ )
         {
            MaH=MaH+h1[n];
            MaL=MaL+l1[n];
         }
         MaH=MaH/Range;
         MaL=MaL/Range;
         ur1[cb]=MaH;
         ur2[cb]=MaL;
         if( Close[mm+1]>=MaH )
         {
            ll=1;
            hh=0;
         }
         if( Close[mm+1]<=MaL )
         {
            hh=1;
            ll=0;
         }
      }
      if( ur1[cb]==0 )
      {
         ur1[cb]=ur1[cb+1];
         ur2[cb]=ur2[cb+1];
      }
      if( ll==1 )
      {
         Up[cb]=ur2[cb];
      }
      else
      {
      	if( hh==1 )
      	{
         	Dn[cb]=ur1[cb];
      	}
	  }
	}
	}}}}}}
//-----------------------------------------------------------------------------
}
//-----
   return(0);
  }
//+------------------------------------------------------------------+
 
Спасибо - отличная работа!!! Я проанализировала расхождения в показаниях индикаторов. Вот какие у меня выводы. В Mt3 и MT4 мы получаем разные значения для свечей
Примеры :
Евро - последняя свеча на часовике: (05.07.29 - 22:00)
Nt3:
Open - 1.2123
High - 1.2131
Low - 1.2119
Close - 1.2123
Mt4:
Open - 1.2121
High - 1.2128
Low - 1.2119
Close - 1.2121
______
По другим парам и по другим свечам также имеют место расхождения - об этом уже писали на этом форуме, по моему.
Вот в чем причина расхождений показаний этого индикатора для Mt3 и Mt4 - в этом индикаторе это особенно заметно, так как тут идет обсчет как раз вокруг этих параметров
Причина обращения: