выполняется ещё одна проверка. С помощью функции OrderType() определяется тип
ордера (см. Типы торговых операций). Если тип ордера оказывается больше 1, это
означает, что исследуемый ордер является отложенным. В этом случае также прерывается
текущая итерация - отложенные ордера в данном случае нас не интересуют. В нашем
примере такой ордер есть, но он к тому же открыт по другому финансовому инструменту,
поэтому ранее уже отсортирован. Все ордера, которые благополучно проходят проверку в
блоке 3-4, являются рыночными.
Блок 4-5 предназначен для того, чтобы из всех (ранее прошедших проверку) рыночных
ордеров выбрать один, а именно тот, который находится ближе всего к ранее
определённой цене (значению переменной Win_Price). От пользователя не требуется
точного попадания курсором мыши в линию ордера. Выбор производится в пользу того
ордера, который оказался ближе других к курсору в момент запуска скрипта на
исполнение. С помощью функции OrderOpenPrice() определяется цена открытия
обрабатываемого ордера. Если абсолютное значение дистанции между ценой ордера и
ценой курсора меньше, чем эта же дистанция для предыдущего ордера, то выбор
производится в пользу текущего (абсолютная величина дистанции нужна для того, чтобы
исключить влияние положения курсора - выше или ниже линии ордера). В этом случае на
текущей итерации цикла for этот ордер запоминается как первый претендент на закрытие.
Для такого ордера в конце блока 4-5 вычисляется номер тикета (индивидуальный номер
ордера) и количество лотов. В данном примере (рис. 90) общее количество ордеров -
четыре (три рыночных и один отложенный), поэтому в цикле for будет выполнено четыре
итерации, в результате чего будет определена вся необходимая информация для закрытия
одного выбранного ордера.
Далее управление в исполняемой программе будет передано оператору цикла while (блок
6-10). В блоке 6-7 выполняется проверка наличия найденных рыночных ордеров. Если в
блоке 2-4 не было обнаружено ни одного рыночного ордера (а это в общем случае вполне
возможно), то значение флага Real_Order остаётся равным -1, что означает отсутствие
рыночных ордеров. Если при проверке в блоке 6-7 выявлено отсутствие рыночных
ордеров, то выполнение цикла while прерывается и программа заканчивает работу. Если
же значение переменной Real_Order оказывается равным 0 или 1, то это значит, что
рыночный ордер к закрытию ранее определён и его надо закрыть.
В блоке 7-8, в зависимости от типа ордера вычисляется цена закрытия - для ордеров Buy
это значение Bid, а для ордеров Sell - Ask (см. Требования и ограничения торговых
операций).
646