В цикле for (блок 2-6) выполняется перебор ордеров. В блоке 2-3 программа определяет,
есть ли в очередной строке Терминала ордер, и если он есть, то управление передаётся в
тело оператора if для получения и анализа характеристик этого ордера. В блоке 3-4
отсортировываются ордера, открытые не по тому финансовому инструменту, где
исполняется программа. В нашем случае - это ордер 4372930, открытый по Usd/Chf.
Функция OrderSymbol() возвращает название финансового инструмента выбранного
ордера. Если это название не совпадает с названием финансового инструмента, в котором
исполняется программа, то текущая итерация прерывается, тем самым предотвращая
обработку ордера, открытого по другому финансовому инструменту. Если же
исследуемый ордер оказался открытым по "нашему" финансовому инструменту, то
выполняется ещё одна проверка. С помощью функции OrderType() определяется тип
ордера (см. Типы торговых операций). Если тип ордера оказывается больше 1, это
означает, что исследуемый ордер является отложенным. В этом случае также прерывается
текущая итерация - отложенные ордера в данном случае нас не интересуют. В нашем
примере такой ордер есть, но он к тому же открыт по другому финансовому инструменту,
поэтому ранее уже отсортирован. Все ордера, которые благополучно проходят проверку в
блоке 3-4, являются рыночными.
Блок 4-5 предназначен для того, чтобы из всех (ранее прошедших проверку) рыночных
ордеров выбрать один, а именно тот, который находится ближе всего к ранее
определённой цене (значению переменной Win_Price). От пользователя не требуется
точного попадания курсором мыши в линию ордера. Выбор производится в пользу того
ордера, который оказался ближе других к курсору в момент запуска скрипта на
исполнение. С помощью функции OrderOpenPrice() определяется цена открытия
обрабатываемого ордера. Если абсолютное значение дистанции между ценой ордера и
ценой курсора меньше, чем эта же дистанция для предыдущего ордера, то выбор
производится в пользу текущего (абсолютная величина дистанции нужна для того, чтобы
исключить влияние положения курсора - выше или ниже линии ордера). В этом случае на
текущей итерации цикла for этот ордер запоминается как первый претендент на закрытие.
Для такого ордера в конце блока 4-5 вычисляется номер тикета (индивидуальный номер
ордера) и количество лотов. В данном примере (рис. 90) общее количество ордеров -
четыре (три рыночных и один отложенный), поэтому в цикле for будет выполнено четыре
итерации, в результате чего будет определена вся необходимая информация для закрытия
одного выбранного ордера.
305