Определение нового бара!

 

Помогите
В учебнике MQL4 представлен код по определению нового бара:
+++++++++++++++++++++++++++++++
void Fun_New_Bar()
  {
  static datetime New_Time=0;
  New_Bar=false;
  if(New_Time!=Time[0])
  {
  New_Time=Time[0];
  New_Bar=true;
  }
}

+++++++++++++++++++++++++++++++

Обнаружил небольшой недостаток
Когда загружаешь эксперт, в самом начале бар который 0 он определяет его как за новый, даже если этот бар скора закроется!
Помогите, в программирование покачто не силён, сделать так чтобы он определял новый бар если он действительно новый
Заранее спасибо =)

 
Larik >>:




if(TimeCurrent()-Time[0] >20) return();


Так не пробовал?

 
Благодарю =)
 
gorby777 >>:

Так не пробовал?

Так наверное все-таки лучше будет:

void Fun_New_Bar()
{
  static datetime New_Time=Time[0];
  New_Bar=false;
  if(New_Time!=Time[0])
  {
     New_Time=Time[0];
     New_Bar=true;
  }
}
 
TheXpert >>:

Так наверное все-таки лучше будет:

А что поменялось? У нулевого бара только два времени: открытие и текущее. Их и сравниваем

 
gorby777 писал(а) >>

А что поменялось?

То что поменялось подчеркнуто, стартовый, возможно неполный бар будет проигнориван...

 
Larik >>:

Обнаружил небольшой недостаток
Когда загружаешь эксперт, в самом начале бар который 0 он определяет его как за новый, даже если этот бар скора закроется!

В функции init() нужно инициализировать переменную, через которую определяют возраст бара, равной времени открытия текущего бара. Тогда при вызове функции start() текущий бар будет уже "старым" и алгоритм начнет работать только при формировании следующего бара.



static int prevtime = 0;

...

int init() {
	prevtime = Time[0];
	...
}

int start() {
	if (Time[0] == prevtime) {
		return(0);
	} 
	prevtime = Time[0];
	
	...
}


 
bool fNewBar(){
   static datetime NewTime=0;
      if(NewTime!=Time[0]){
            if(NewTime==0){
               NewTime=Time[0];
               return(false);
            }      
         NewTime=Time[0];
         return(true);
      }
   return(false);     
}
 
Dmitry Fedoseev #:

Спасибо! Работает даже в индикаторах!

Причина обращения: