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