Запрет на открытие ордера в течении 10 минут

 

Просьба помочь найти ошибку :) Требуется ввести проверку времени открытия последнего ордера и если прошло с последнего открытия 10 минут. то открываем новый.

Скрипт работает по пересечениям индикатора UTPOW.

    int min1 = TimeMinute(TimeLocal());
    int min2 = TimeMinute(CheckLastOrderTime(Symbol(),1,0));
    int min_ok = (min1-min2)/60;

    if (UTPOW_0 <= UTPOW_1 && UTPOW_0_old > UTPOW_1_old)
      {
        if (oSell == 0)
          {
            if (min2 == 0)         
              {
                NewOrder(OP_SELL,Lot);
              }
              else
              {
                if (min_ok >= 10) NewOrder(OP_SELL,Lot);   // если прошло 10 минут с открытия последнего ордера, то открываем новый
              }
          }
      }
 
Uquwnd:

Просьба помочь найти ошибку :) Требуется ввести проверку времени открытия последнего ордера и если прошло с последнего открытия 10 минут. то открываем новый.

Скрипт работает по пересечениям индикатора UTPOW.


Сама логика неверна: TimeMinute возвращает количество минут с начала часа и при переходе через час будет ерунда. И, кстати, если используете эту функцию, то не нужно делить на 60 для вычисления количества минут.

Считайте количество секунд - это разница между TimeLocal()-OrderOpenTime(): получите абсолютную разницу в секундах. Делите на 60 - получите количество минут от момента окрытия ордера.

Удачи.


 
VladislavVG:


Считайте количество секунд - это разница между TimeLocal()-OrderOpenTime(): получите абсолютную разницу в секундах. Делите на 60 - получите количество минут от момента окрытия ордера.


небольшая поправка - TimeCurrent()-OrderOpenTime()
Причина обращения: