947
bool Ans = OrderModify(Ticket,Price,SL,TP,0);//Модифицируем его!
Ранее отмечалось, что рассматриваемая здесь торговая стратегия предполагает наличие
только одного рыночного ордера. Тем не менее, функция Tral_Stop() предусматривает
возможность модификации нескольких рыночных ордеров одного типа. Если трейдер не
вмешивается в торговлю во время работы эксперта, то необходимость модифицировать
несколько ордеров не возникает. Однако для случая, когда трейдер допускает открытие
рыночного ордера вручную (в дополнение к уже имеющемуся), возникает вопрос о
порядке модификации ордеров, а именно, какой из них необходимо модифицировать
раньше других и почему.
При рассмотрении порядка закрытия нескольких ордеров было указано, что критерием,
определяющим приоритет закрытия ордеров, является количество лотов. Такое решение
очевидно - чем больше лотов (из суммарного количества) будет закрыто, тем быстрее
будет реакция эксперта на срабатывание признака закрытия. Вопрос о порядке
модификации ордеров не имеет однозначного решения. Во всех случаях критерий для
определения порядка модификации ордеров диктуется сущностью торговой стратегии.
Таким критерием может быть не только количество лотов, но и факт отсутствия StopLoss
на каком-либо из ордеров, размер дистанции от StopLoss до текущей цены. В ряде случаев
критерием может выступать обобщённый показатель - размер убытка, который может
быть получен при резком изменении цены, т.е. при условии одномоментного
автоматического закрытия всех рыночных ордеров по StopLoss.
В рассматриваемом примере функции Tral_Stop() реализован случайный порядок
модификации ордеров - ордера модифицируются в той последовательности, в которой они
встречаются в списке открытых рыночных и установленных отложенных ордеров. В
каждом конкретном случае функцию необходимо доработать - запрограммировать
порядок модификации ордеров в соответствии с правилами конкретной стратегии.
Особое внимание нужно обратить на тот факт, что все торговые операции совершаются в
режиме реального времени. Если ордеров слишком много, то эксперт будет генерировать
множество торговых приказов. За время, пока эти приказы будут исполнены, рынок может
развернуться. Однако функция не возвращает управление в вызывающую её функцию
Trade() до тех пор, пока не будут модифицированы все ордера, подлежащие модификации.
Это значит, что возникает опасность пропустить торговый приказ на закрытие или
открытие ордеров. По этой причине любая стратегия должна составляться таким образом,
чтобы по возможности не допускать значительного количества рыночных ордеров.