Как исполняется "ExpertRemove()" ?

 
Вставил в код советника такой кусок кода:
   if(УСЛОВИЕ==true)
     {
      ExpertRemove();
     }

При прогоне в тестере после наступления заданного условия в журнале наблюдаю:
RF 3 01:44:07.861 Core 1 2016.01.04 13:57:51   ExpertRemove() function called
После чего советник успевает совершить торговую операцию и только после этого выдаёт в журнале:
QH 2 01:44:07.861 Core 1 removed itself within OnTick

Возникает в связи с этим вопрос - как должна в терминале отрабатываться команда  "ExpertRemove()"? Должна ли работа программного кода прерываться немедленно, или должен отработаться весь текущий цикл "OnTick()", а только на следующем после этого новом тике выполниться выгрузка советника? Или ещё какой-то вариант ?

 
следом поставьте return
 
Alexander Bereznyak:
следом поставьте return
Сделал. Помогло. Спасибо!
 
Vladimir Suschenko:

Возникает в связи с этим вопрос - как должна в терминале отрабатываться команда  "ExpertRemove()"? Должна ли работа программного кода прерываться немедленно, или должен отработаться весь текущий цикл "OnTick()", а только на следующем после этого новом тике выполниться выгрузка советника? Или ещё какой-то вариант ?

Из документации:

Остановка эксперта не происходит немедленно при вызове функции ExpertRemove(), производится лишь взвод флага для прекращения работы эксперта. Т.е., любое следующее событие эксперт обрабатывать уже не будет, произойдет вызов OnDeinit() и выгрузка с удалением с графика.

Поэтому да, если ExpertRemove() вызван из "OnTick()" весь текущий цикл "OnTick()" будет все равно пройден до конца, если не выйти принудительно раньше.

 
Vasiliy Pushkaryov:

Из документации:

Поэтому да, если ExpertRemove() вызван из "OnTick()" весь текущий цикл "OnTick()" будет все равно пройден до конца, если не выйти принудительно раньше.

Спасибо. Чё-то я (наверно ночь тому причина) провтыкал и не смог сам в документации этого увидеть... 
И таки рекомендация Alexander Bereznyak помогла разрулить проблему.

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