Как проверять условия на вход только один раз, в начале часового бара?

 

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

Попробовал использовать:

if(iVolume(NULL, 0, 0) < 2)
   {
   ...
   }
  На истории работает, а на демо за последние 3 часа это условие ни разу не выполнилось...
 
Запоминаешь время открытия нулевого бара, потом сравниваешь его с временем открытия текущего нулевого бара, если не равно, то значит это новый нулевой бар и пора сделать своё темное дело и обновить запомненное время. Повторить.
 
//проинициализировал curTime временем текущего бара
...
prevTime=iTime(NULL,0,1);
if(prevTime==curTime)
{
     ...
    curTime=iTime(NULL,0,0);
}
 
klerk:
//проинициализировал curTime временем текущего бара
...
prevTime=iTime(NULL,0,1);
if(prevTime==curTime)
{
...
curTime=iTime(NULL,0,0);
}

Спасибо  :о)
 
кушайте на здоровье. ;-)
 
timbo:
Запоминаешь время открытия нулевого бара, потом сравниваешь его с временем открытия текущего нулевого бара, если не равно, то значит это новый нулевой бар и пора сделать своё темное дело и обновить запомненное время. Повторить.

Запоминаешь время, только если траблов не было
 

Помогите, пожалуйста! Что-то сам никак не соображу...

Написал я эксперта, который на смене часа проверяет ситуацию и входит или выходит по индикатору. Для смены часа использовал решение, которое было предложено. А теперь захотелось его на других таймфреймах проверить, например 15 минут. Теперь надо определять ситуацию каждый 15м период (но не каждые 15 минут, а каждый бар)... Как?!

Есть в голове решение, но шибко длинное и неуклюжее. Уверен, что можно красивше.

 
CTPAYC:

Помогите, пожалуйста! Что-то сам никак не соображу...

Написал я эксперта, который на смене часа проверяет ситуацию и входит или выходит по индикатору. Для смены часа использовал решение, которое было предложено. А теперь захотелось его на других таймфреймах проверить, например 15 минут. Теперь надо определять ситуацию каждый 15м период (но не каждые 15 минут, а каждый бар)... Как?!

Есть в голове решение, но шибко длинное и неуклюжее. Уверен, что можно красивше.


extern int iPeriod=...';
int prevTime=0;
 
 
int start(){
   if (iTime(Symbol(),iPeriod,0) == prevTime) return(0);
   prevTime = iTime(Symbol(),iPeriod,0);
     ...
}
 
Можно попробовать чтото типа этого.
 
 
int LastTime=0;
int init(){ LastTime=Hour();}
int start(){
   if (Hour()!=LastTime){SendSomeOrder();LastTime=Hour();}
   ...
}
 
У тебя в самом начале почти правильная идея была. Но лучше так:
if(Volume[0]<2){...
 
Roger:
У тебя в самом начале почти правильная идея была. Но лучше так:
if(Volume[0]<2){...
Так не лучше... Так будет пропускать бары, иногда получится, иногда нет.