ордера, а также другие параметры, характеризующие ордер (заявленные цены стоп-
приказов, время и причина открытия и пр.), не рассматриваются.
Все рыночные ордера определённого типа должны быть закрыты в
случае, если критерий закрытия ордеров этого типа является
значимым, в порядке от большего к меньшему.
Для соблюдения указанного порядка закрытия ордеров в блоке 3-4 используется цикл for,
в котором среди всех ордеров заданного типа выбирается один ордер, имеющий
наибольшее количество лотов. Поиск этого ордера выполняется на основе анализа
значений элементов глобального массива Mas_Ord_New, содержащего информацию обо
всех ордерах, присутствующих в торговле. После того как номер этого ордера определён,
в зависимости от типа ордера вычисляется заявленная цена закрытия, равная
соответствующему значению последней известной двухсторонней котировки. Если тип
закрываемых ордеров Buy, то следует заявлять цену закрытия в соответствии со
значением Bid, а если Sell, - то Ask.
Непосредственно перед формированием торгового приказа выводится информация о
попытке закрыть ордер, для этого используется вызов функции Inform(). Торговый приказ
на закрытие ордера формируется в строке:
bool Ans=OrderClose(Ticket,Lot,Price_Cls,2);// Закрыть ордер !:)
В качестве параметров используются вычисленные значения: Ticket - номер ордера, Lot -
количество лотов, Price_Cls - заявленная цена закрытия, 2 - проскальзывание.
В блоке 4-5 выполняется анализ результатов выполнения торговой операции. Если
функция OrderClose() вернула значение true, то это означает, что торговая операция
успешно завершена, т.е. ордер закрыт. В этом случае управление передаётся в блок 5-6,
где обновляется информация об ордерах, имеющихся на текущий момент. После
исполнения функций Terminal() и Events() текущая итерация цикла while заканчивается (за
время, пока исполняется функция, в том числе, выполняются торговые операции,
количество ордеров может измениться, поэтому исполнение функции учёта ордеров на
каждой итерации цикла while обязательно). В случае если в торговле ещё присутствуют
ордера заданного типа, то на следующей итерации цикла while они будут закрыты, при
этом для определения параметров очередного закрываемого ордера используются новые
значения элементов массивов Mas_Ord_New и Mas_Tip, полученные при исполнении
функции Terminal().
914