308
Функция OrderSelect() возвращает true в случае, если выбор ордера выполнен удачно. Под
этим понимается, что возможен вариант, при котором выбор ордера может закончиться
неудачей. Это может произойти в случае, если за время обработки ордеров количество
ордеров изменилось. При программировании на MQL4 нужно хорошо помнить, что
прикладная программа будет работать в режиме реального времени, и пока в ней
выполняется обработка каких-то параметров, значение этих параметров может
измениться. Например, может измениться количество рыночных ордеров, причём это
может произойти как в результате открытия/закрытия ордеров, так и в результате
преобразования отложенных ордеров в рыночные. Поэтому при программировании
обработки ордеров необходимо придерживаться правила: обработка ордеров должна быть
выполнена как можно быстрее, а программный блок, ответственный за эту обработку, по
возможности не должен содержать лишних программных строк.
Согласно коду, представленному на рис. 64.3, в заголовке оператора if анализируется факт
наличия следующего ордера в списке ордеров на момент его выбора. Если следующий
ордер есть, то управление передаётся внутрь тела оператора if для обработки параметров
ордера. Нужно заметить, что такая конструкция тоже не спасает от возможного
конфликта, т.к. ордер может пропасть (быть закрытым) в процессе обработки его
параметров. Однако такое решение оказывается наиболее эффективным в случае, если на
момент выбора ордера его уже нет. В теле оператора if выполняется анализ параметров
выбранного ордера. При исполнении, например, функций OrderOpenPrice(), OrderTicket(),
OrderType() и других подобных каждая из них будет возвращать значение некоторой
характеристики ордера, выбранного в результате исполнения функции OrderSelect().
Все предыдущие рассуждения использовались при составлении программы для решения
Задачи 28.
Пример простого скрипта, предназначенного для закрытия рыночного
ордера, цена открытия которого находится ближе к месту прикрепления
скрипта, чем цены открытия других ордеров (closeorder.mq4).
//--------------------------------------------------------------------
// closeorder.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --