332
отобранного ордера (текущего обрабатываемого в цикле for), а также новое значение
StopLoss. Если текущий ордер не требует модификации, то в конце блока 4-5
осуществляется выход из цикла while, и модификация этого ордера (в блоке 5-6) не
осуществляется. Если же ордер требует модификации, то управление передаётся в блок 5-
6, в котором вычисляются необходимые параметры и выполняется обращение к функции
OrderModify(), которая и формирует торговый приказ.
Если торговая операция завершилась успешно, то оператор break в блоке 6-7 заканчивает
исполнение цикла while, что приводит к окончанию текущей итерации цикла перебора
ордеров for (и на следующей итерации начинается обработка очередного ордера). Если же
торговая операция закончилась неудачей, то производится обработка ошибок. В случае,
когда ошибка оказывается не критической, попытка повторить торговую операцию
повторяется. Если же ошибка оценивается как критическая, то управление передаётся за
пределы цикла модификации для обработки следующего ордера (в цикле for).
Здесь необходимо обратить внимание на небольшую особенность, касающуюся
модификации рыночных ордеров. Функция OrderModify() устанавливает новые значения
цен одновременно для обоих стоп-приказов. При этом требование соблюдения
минимальной дистанции касается только того стоп-приказа, новое значение которого
отличается от текущего. Если же новое значение остаётся таким же, как текущее, то такой
стоп-приказ может находиться на любом расстоянии от рыночной цены, а
соответствующий торговый приказ является корректным.
Например, имеется рыночный ордер Buy, открытый по цене 1.295467, со стоп-приказами
StopLoss = 1.2958 и TakeProfit = 1.2960. Минимальная дистанция, установленная
брокером, равна 5 пунктов. При рыночной цене Bid = 1.2959 возникают условия для
модификации ордера, а именно для установки StopLoss = 1.2949 (Bid - 10 пунктов). Для
исполнения функции OrderModify() требуется указать и новое значение TakeProfit. Наш
советник не изменяет положение TakeProfit, поэтому в функции задаётся текущее
значение TakeProfit = 1.2960.
Несмотря на то, что новое заявленное значение TakeProfit = 1.2960 находится близко к
рыночной цене Bid (всего 1 пункт, т.е меньше допустимой дистанции 5 пунктов), это
значение не отличается от текущего значения TakeProfit = 1.2960, поэтому торговый
приказ будет признан корректным и исполнен на сервере (в общем случае торговый
приказ может быть отклонён, но по другим причинам). На рис. 102 и 103 представлены
результаты успешной модификации ордера в этой ситуации.