Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Vladimir Suschenko
3014
Vladimir Suschenko 2016.09.30 01:19 
Вставил в код советника такой кусок кода:
   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()", а только на следующем после этого новом тике выполниться выгрузка советника? Или ещё какой-то вариант ?

Alexander Bereznyak
21820
Alexander Bereznyak 2016.09.30 01:24  
следом поставьте return
Vladimir Suschenko
3014
Vladimir Suschenko 2016.09.30 01:42  
Alexander Bereznyak:
следом поставьте return
Сделал. Помогло. Спасибо!
Vasiliy Pushkaryov
4206
Vasiliy Pushkaryov 2016.09.30 01:43  
Vladimir Suschenko:

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

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

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

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

Vladimir Suschenko
3014
Vladimir Suschenko 2016.09.30 01:47  
Vasiliy Pushkaryov:

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

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

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

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