591
переменные. Основной код функции сосредоточен в операторе цикла while (блоки 3-5),
который исполняется до тех пор, пока в торговле нет ни одного ордера заданного типа
Tip.
Торговая стратегия предполагает открытие ордеров, имеющих ненулевые стоп-приказы. В
общем случае трейдер может установить такие значения стоп-приказов, которые не
удовлетворяют требованиям дилингового центра, а именно меньше ограничивающей
минимальной дистанции. Поэтому перед открытием ордера выполняется необходимая
проверка: если последняя известная минимальная дистанция (Level_new) превышает
значение внешней переменной StopLoss или TakeProfit, то значение этой переменной
увеличивается и устанавливается равным Level_new.
Каждый открываемый ордер имеет свой уникальный MagicNumber, равный текущему
серверному времени. В результате исполнения одного эксперта по финансовому
инструменту может быть одновременно открыт только один рыночный ордер (или
установлен отложенный). Таким образом гарантируется, что все рыночные ордера будут
иметь уникальный MagicNumber. Перед открытием ордера исполняется функция Inform(),
в результате чего выводится сообщение о попытке совершить торговую операцию.
В зависимости от типа ордера выполняется тело одного из операторов if. Например, если
значение передаваемого параметра Tip равно 0, то это значит, что необходимо открыть
ордер Buy. В этом случае вычисляются значения StopLoss и TakeProfit, соответствующие
типу ордера Buy, и после этого управление передаётся в строку
Ticket=OrderSend(Symbol(),0,Lots_New,Ask,2,SL,TP,"",MN);
для формирования торгового приказа на открытие рыночного ордера Buy. Аналогичные
вычисления производятся в случае, если значение параметра Tip равно 1, т.е необходимо
открыть ордер Sell.
Обработка ошибок во всех пользовательских исполнительных торговых функциях
выполняется подобным образом. Если торговая операция завершилась успехом, то
функция заканчивает работу (потому, что не будет выполняться очередная итерация цикла
while, т.к. после исполнения функции Terminal() значение элемента массива Mas_Tip[Tip]
будет равно 1). Если же торговый приказ не был исполнен, то выполняется анализ ошибок
(блок 4-5). В этом случае вызывается для исполнения функция обработки ошибок Errors().
Если она возвращает false (ошибка является критической), то исполнение функции
Open_Ord() заканчивается, управление последовательно возвращается в управляющую