while (блоки 3-6) предполагает, что функция будет удерживать управление до тех пор,
пока не выполнит своё предназначение, а именно, пока не будут закрыты все ордера
заданного типа. Элемент глобального массива Mas_Tip[Tip] содержит значение, равное
количеству ордеров заданного типа Tip. Например, если функция Close_All() вызвана с
передаваемым параметром, равным 1, то это означает, что ей предписывается закрыть все
рыночные ордера Sell (см. Типы торговых операций). В этом случае значение элемента
массива Mas_Tip[1] будет равно количеству имеющихся ордеров Sell (последнему
известному на момент исполнения функции Terminal()). Таким образом, оператор цикла
while будет исполнен столько раз, сколько имеется ордеров Sell.
Если трейдер не вмешивается в работу эксперта (т.е. не выставляет ордера вручную), то в
торговле может присутствовать только один рыночный ордер того или иного типа. Если
же трейдер по своей инициативе установил дополнительно один или несколько рыночных
ордеров, то при исполнении функции Close_All() должен быть соблюдён некоторый
порядок закрытия ордеров. Предпочтительным является порядок закрытия ордеров от
большего к меньшему. Например, если на момент начала исполнения функции Close_All()
имеется три ордера Sell, причём один из них открыт на 5 лотов, другой на 1 лот, а третий -
на 4 лота, то в соответствии с указанным порядком ордера будут закрыты в такой
последовательности: сначала ордер в объёме 5 лотов, потом 4 лота и последним - ордер
объёмом 1 лот.
Обратите внимание, количество лотов - единственный критерий, принятый для
определения порядка закрытия ордеров. Прибыль/убыток по ордеру, курс открытия
ордера, а также другие параметры, характеризующие ордер (заявленные цены стоп-
приказов, время и причина открытия и пр.), не рассматриваются.
Все рыночные ордера определённого типа должны быть закрыты в
случае, если критерий закрытия ордеров этого типа является
значимым, в порядке от большего к меньшему.
Для соблюдения указанного порядка закрытия ордеров в блоке 3-4 используется цикл for,
в котором среди всех ордеров заданного типа выбирается один ордер, имеющий
наибольшее количество лотов. Поиск этого ордера выполняется на основе анализа
значений элементов глобального массива Mas_Ord_New, содержащего информацию обо
всех ордерах, присутствующих в торговле. После того как номер этого ордера определён,
в зависимости от типа ордера вычисляется заявленная цена закрытия, равная
572