Для чего нужна функция IsStopped() ?

 

Я вижу, что чаще всего её используют в циклах в последних индикаторах. Перелопатив ветки, которые по этому поводу подымались. Кто-то пишет что эта функция не нужна вообще. Кто-то пишет типа нужна. Как по мне, то проверять закрывается ли программа нет резона, т.к. если она закрывается, то она закроется и зачем это проверять?

Т.к. для меня как я вижу сейчас эта функция не имеет пользы, но всё-таки её используюсь, возник вопрос зачем её используют вообще?

Мои мысли такие:

Например, есть функция, которая открывает ордера в стандартной библиотеке. В начале проверяется IsStopped(). Зачем? Ведь если, например, когда программа работает и дошла очередь до момента, где происходит эта проверка проверка:

bool CTrade::OrderOpen(const string symbol,const ENUM_ORDER_TYPE order_type,const double volume,const double limit_price,
                       const double price,const double sl,const double tp,
                       ENUM_ORDER_TYPE_TIME type_time,const datetime expiration,const string comment)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);

выполнение программы завершится и ордер не отправится. Тогда зачем нам это 2(3) лишние строки кода? Ведь как ни крути продолжатся выполнение программы не будет т.к. она уже закрывается.. (если закрывается).

 
hoz:

Я вижу, что чаще всего её используют в циклах в последних индикаторах. Перелопатив ветки, которые по этому поводу подымались. Кто-то пишет что эта функция не нужна вообще. Кто-то пишет типа нужна. Как по мне, то проверять закрывается ли программа нет резона, т.к. если она закрывается, то она закроется и зачем это проверять?

Т.к. для меня как я вижу сейчас эта функция не имеет пользы, но всё-таки её используюсь, возник вопрос зачем её используют вообще?

Мои мысли такие:

Например, есть функция, которая открывает ордера в стандартной библиотеке. В начале проверяется IsStopped(). Зачем? Ведь если, например, когда программа работает и дошла очередь до момента, где происходит эта проверка проверка:

выполнение программы завершится и ордер не отправится. Тогда зачем нам это 2(3) лишние строки кода? Ведь как ни крути продолжатся выполнение программы не будет т.к. она уже закрывается.. (если закрывается).

Без IsStopped() программа, если она выполняет какие-то сложные вычисления, будет завершена аварийно, что не очень хорошо. Особенно это актуально для программ, отображающих данные при помощи графических объектов. Аварийное завершение оставит все показания такой программы нетронутыми. Во-первых, это мусор на графике. Во-вторых, у пользователя складывается впечатление, что программа зависла, а не отключена.

Перед открытием ордера проверяется IsStopped() как раз по такой же причине. Если пользователь решил удалить программу с графика, то не стоит выполнять торговую операцию, что занимает достаточно много времени. В итоге повышается риск аварийного завершения программы.

Для индикаторов, по причине использования ими циклов, это вообще незаменимая вещь. Ведь выполнение бесконечного цикла в индикаторе подвешивает график (МТ5) или вообще весь терминал (МТ4).

 
Вероятно - это общий подход добавлять вначале большинства функций CTrade проверку на IsStopped. Некоторые функции могут внутри ожидать что-то в цикле, так что чтобы не заморачиваться и не держать в памяти поведенеи каждой функции, проще добавить IsStopped везде.
Причина обращения: