ExpertRemove();Sleep(1000*60*60);

 

Здравствуйте, дорогие Форумчане!


У меня вопрос:

Почему эти команды не работают?

Вот отрывок из кода:

            if(LastError != 0)
               {
            Print("7.GetLastError: ",LastError," TicketVector: ",TicketVector[x]," x: ",x," Stavka: ",OrdSnd_Stavka);
            Print("77. ExpertRemove();");
               ExpertRemove();
               Sleep(1000*60*60);
               }

Експерт пишет оба принта и продолжает крутиться в петле "Start()"

 

А зачем после ExpertRemove() Sleep(), да ещё с таким временем? Это-же получается час!!! За час можно забыть всё чему учили с детства...:))))

Вообще ExpertRemove() выполняется непосредственно перед выходом из функции OnStart()

 
AlexeyVik:

А зачем после ExpertRemove() Sleep(), да ещё с таким временем? Это-же получается час!!! За час можно забыть всё чему учили с детства...:))))

Вообще ExpertRemove() выполняется непосредственно перед выходом из функции OnStart()


Не понял.

А Sleep() для того, чтобы он перестал крутиться в "ЛУПЕ".

Кстати, в другом месте в этой же программе это работает.

А здесь игнорирует Sleep(1000*60*60);

 
reuvenb:

Не понял.

Если не понял, прочти ещё раз. ExpertRemove() выполняется непосредственно перед выходом из функции OnTick()

Если в начале поставить условие при выполнении которого надо удалить эксперта с графика, то эксперт будет удалён только после прохода всего кода до конца...

void OnTick()
 {
  if(TimeCurrent() > D'2016.03.01')
   ExpertRemove();
    if(OrdersTotal() == 0)
     OrderSend(**************);
 }

В этом варианте ордер будет поставлен и после 01.03.2016


ps; Я только сейчас обратил внимание на свою невнимательность. конечно-же OnTick() а не OnStart(). В скриптах эта функция бесполезна, но об этом в документации ничего не пишут.

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