Время работы советника. Подскажите. - страница 2

 

Еще раз хочу Всех поблагодарить, особенно Andy_Kon

Его код и простой и дает то, что мне нужно было.

Теперь советник работает в строго установленное время, но

я добавил функцию удалять отложные ордера после окончания рабочего времени

//----
  if(Hour() > EndHour && total>0)
   {
   OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
    {
    if(OrderType()==OP_BUYSTOP)
     {
     OrderDelete(ticket,CLR_NONE);
     }
    }
   }
  if(Hour() > EndHour && total>0)
   {
   OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
    {
    if(OrderType()==OP_SELLSTOP)
     {
     OrderDelete(ticket,CLR_NONE);
     }
    }
   }
//----

В тестере иногда все великолепно, а иногда выдает ошибку и останавливается тестирование

2008.01.24 16:48:20 2007.04.12 23:26 Time GBPJPY,M5: unknown ticket 10 for OrderDelete function
2008.01.24 16:48:20 2007.04.12 23:26 Time GBPJPY,M5: OrderDelete error 4108

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

Если кто знает в чем проблема подскажите пожалуста.

 
Надо проверять OrderCloseTime(). Если больше 0, не удалять.
 
komposter:
Надо проверять OrderCloseTime(). Если больше 0, не удалять.

Извени я не понял, что это значит
 
MakarFX:
Извени я не понял, что это значит
if ( OrderSelect(ticket,SELECT_BY_TICKET) )
{
  if ( OrderCloseTime() <= 0 )
  {
    if(OrderType()==OP_BUYSTOP)
    {
      OrderDelete(ticket,CLR_NONE);
    }
  }
}
 
komposter:
MakarFX:
Извени я не понял, что это значит
if ( OrderSelect(ticket,SELECT_BY_TICKET) )
{
  if ( OrderCloseTime() <= 0 )
  {
    if(OrderType()==OP_BUYSTOP)
    {
      OrderDelete(ticket,CLR_NONE);
    }
  }
}

Я сделал вот так, но результат тот же

  if(Hour() > EndHour && total>0)
   {
   OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
    {
    if (OrderSelect(ticket,SELECT_BY_TICKET))
     {
     if (OrderCloseTime() <=0)
      {
      if(OrderType()==OP_BUYSTOP)
       {
       OrderDelete(ticket,CLR_NONE);
       }
      }
     }
    }
   }
  if(Hour() > EndHour && total>0)
   {
   OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
    {
    if (OrderSelect(ticket,SELECT_BY_TICKET))
     {
     if (OrderCloseTime() <=0)
      {
      if(OrderType()==OP_SELLSTOP)
       {
       OrderDelete(ticket,CLR_NONE);
       }
      }
     }
    }
   }
//----
 
MakarFX:

Я сделал вот так, но результат тот же

Ну, тогда ошибка не здесь.
Без полного кода помочь не смогу.
 
komposter:
MakarFX:

Я сделал вот так, но результат тот же

Ну, тогда ошибка не здесь.
Без полного кода помочь не смогу.


Спасибо, я разобрался.

Ошибка выскакивает если нет полной истории за этот день

 
А я задаю expiration = TimeCurrent() + (EndHour-Hour())*3600+(25-Minute())*60 при установке отложенника и он сам удаляется, если не сработал ;-)
 
PSmith:
А я задаю expiration = EndHour+25*60 при установке отложенника и он сам удаляется, если не сработал ;-)

А можно подробнее, на каком-то примере.

"Я не волшебник, я только учусь", т.е. я совсем слабо разбираюсь в MQL4

 

Вернее будет так

Expiration = TimeCurrent() + (EndHour-Hour())*3600+(25-Minute())*60

TimeCurrent() - Hour()*3600 - Minute()*60 = это начало дня + секунды

+ EndHour*3600 + 25*60 = это время истечения ордера + 25 минут запаса + те же секунды

А дальше

OrderSend(Symbol(),OP_BUYSTOP,..............., Magic, Expiration);

либо

OrderSend(Symbol(),OP_SELLSTOP,..............., Magic, Expiration);

аналогично лимитники

Magic - магический номер советника

Expiration - см выше

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