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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Suleyman Agabayev
161
Suleyman Agabayev  

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

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

  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());
}
Igor Makanu
9909
Igor Makanu  
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

Alexey Viktorov
27997
Alexey Viktorov  
SolomonAbundand:

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

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

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

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

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

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

Спасибо всем

Dmitry Fedoseev
57660
Dmitry Fedoseev  
SolomonAbundand:

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

Спасибо всем

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий