648
Если для открытия ордера свободных средств хватает, то управление передаётся в блок 4-
5 и далее в блок 5-6. В этих блоках не предусмотрен выход из цикла. Этим полагается, что
для любой минимальной дистанции, установленной брокером, найдутся соответствующие
значения стоп-приказов. В блоке 1-2 намеренно указано значение 3 пункта для TP.
Подавляющее число брокеров устанавливают минимальную дистанцию 5 пунктов. В
блоке 5-6 будет обнаружено, что заданное значение меньше допустимого, и установлено
такое значение цены стоп-приказа, которое не противоречит ограничению.
Далее управление передаётся в блок 6-7 для открытия ордера. В первой строке этого блока
публикуется сообщение и лишь во второй строке формируется торговый приказ.
Возникает вопрос: почему мы заявляем о формировании торгового приказа ещё до того,
как он сформирован? Ведь можно было бы сначала отдать приказ, а потом сообщить об
этом пользователю. Ответ на этот вопрос непосредственно связан с технологией отправки
приказа клиентскому терминалу и далее на сервер (см. рис. 66). В нашем случае торговый
приказ формируется в функции OrderSend(), указанной в правой части оператора
присваивания. Собственно торговый приказ создаётся и отправляется на сервер в самой
функции, а исполнение операции присвоения в операторе присваивания будет выполнено
уже после того, как сервер вернёт какой-либо ответ о судьбе данного торгового приказа.
Таким образом, единственная возможность сообщить пользователю о начале событий,
связанных с торговым приказом, - это указать сообщение перед оператором присваивания,
в правой части которого указана торговая функция.
Рано или поздно клиентский терминал вернёт управление в программу, будет исполнен
оператор присваивания в блоке 6-7, в результате чего переменная ticket получит какое-то
значение, и управление будет передано далее - в блок анализа ошибок 7-8-9.
Если ордер открыт на сервере, то переменной ticket будет присвоен номер открытого
ордера. В этом случае скрипт выполнил своё предназначение и далее работу программы
необходимо прекратить. В блоке 7-8 используется оператор break для выхода из цикла
while(). Управление передаётся в блок 9-10 (за пределы цикла) и программа заканчивает
работу.
Если же попытка открыть ордер не увенчалась успехом, то управление передаётся в блок
8-9 для анализа ошибок. Здесь рассматривается 2 вида ошибок - те, которые позволяют
ещё надеяться на успешное открытие и те, появление которых однозначно указывает на
необходимость прекратить исполнение программы. Переменной Error присваивается код