Открыть позицию после условия и временной задержки - временная задержка не получается ?

 

Суть вопроса после выполнения условия подождать энное время потом открыть позу

попытка реализовать не удалась может кто то сталкивался 

  int OrderOpenMM;
int maxDuration1=600;///После 10 минут открытие позы код неработает в тестере а нодо чтоб работал sleep функцию не предлагать он в тестере не работает задержки нету что я делаю не так может кто то знает ?
  for(int pos1=OrdersTotal()-1; pos1>=0; pos1--) if(OrderSelect(pos1,SELECT_BY_POS) && OrderMagicNumber()==Magik && OrderSymbol()==Symbol())
    {               
    int duration1=int(TimeCurrent()-OrderOpenMM);
    if(duration1>=maxDuration1)
      {

//открытие позы
}



///первое условие

if (условие)

{
OrderOpenMM=int(TimeCurrent());
}
 
SolomonAbundand:
sleep функцию не предлагать он в тестере не работает задержки нету что я делаю не так может кто то знает ?

обычно в таких задачах к номеру бара привязываются, т..е если сигнал индикатора, то проверяют не только значение индикатора на баре №1, но и на баре №2,3...

если сигнал пробой уровня, то опять к № бара можно привязать https://www.mql5.com/ru/forum/131859/page6#comment_3359710

если сигнал от предыдущего выставленного ордера, то опять можно к номеру бара привязать https://www.mql5.com/ru/forum/131859/page4#comment_3359689


хотя возможно, Вы просто теряете значение переменной OrderOpenMM, и Вам нужно описать ее или на глобальном уровне видимости переменных или добавить модификатор static

 
SolomonAbundand:

Суть вопроса после выполнения условия подождать энное время потом открыть позу

попытка реализовать не удалась может кто то сталкивался 

Sleep самое хреновое решение которое можно придумать. И не по причине того, что в тестере не работает, а по причине того, что в течении 10ти минут не будет выполняться код программы.

Прежде чем начать писать код, надо представить последовательность действий

  1. Проверка появления сигнала. Повторять пока сигнала нет.
  2. При условии, что сигнал появился, в какую-то переменную (или static или глобального уровня) записать это время. И желательно взвести флаг сигнала.
  3. Проверить прошло-ли 10 минут. Повторять пока не пройдёт.
  4. Как только прошли эти 10 минут, открываем позицию и обнуляем переменную и сбрасываем флаг сигнала.
  5. Возвращаемся к пункту 1
 

Я сделал по другому поставил инкремент на переменную график минутный нужно 10 минут через новый бар инкремент в переменную при достижении >=10 баров минут сброс обнуление переменной

Спасибо всем

 
SolomonAbundand:

Я сделал по другому поставил инкремент на переменную график минутный нужно 10 минут через новый бар инкремент в переменную при достижении >=10 баров минут сброс обнуление переменной

Спасибо всем

Можно переменной присвоить время. Потом проверять переменную, если значение не равно нулю - значит идет ожидание, и вот когда TimeCurrent() станет больше и равно, открываться.