В последующих событиях с помощью представленного скрипта были закрыты и два другихрыночных ордера. Практический результат, полученный после запуска скрипта в заданных условиях (см.рис. 90 и 91), представлен ниже. Торговая операция была успешно выполненана сервере.
В случае, если торговыйприказ исполнен (т.е. фактически проведена торговая операция), то на сервере выполняетсянеобходимое стратегия аллигатор на финансовых рынках преобразование информации. Если же торговый приказ отклонён, то преобразованиеинформации на сервере не происходит. Независимо от того, какое именно решение (исполнитьили отклонить приказ) принято на сервере, информация об этом будет передана клиентскомутерминалу для синхронизации торговой истории. Для этого перед вычислениямихарактеристик ордера, нужно исполнить функцию OrderSelect() (см. Закрытие и удаление ордеров). Торговые функции, исполненные после этого, будут возвращать значения, соответствующиехарактеристикам выбранного ордера.
Связь между клиентским терминаломи сервером осуществляется по сети Internet, поэтому время, затраченное на пересылкуторгового приказа на сервер (интервал времени t 3 – t 5), полностью зависит откачества связи. При хорошей связи этот промежуток времени может составлять приблизительно мс, а при плохой связи может измеряться секундами. Указанные вычисления реализованы в (условно) бесконечном цикле while в блоках 2-10.В начале этого цикла на каждой итерации делается предположение, что ордеров какого-либотипа уже не осталось. Для этого переменным Hedg_Buy и Hedg_Sell присваивается значение-1. Алгоритм блока обработки ордеров в целом сохранён (см. код closeby.mq4).
Здесь же важно отметить, что не все торговые приказы приводятк осуществлению торговых операций. В данном случае программа сформировала некорректныйприказ, в результате чего клиентский терминал отклонил этот приказ и вернул управлениепрограмме. Интервалы времени t 1 – t 2 – t 3 – t 4 пренебрежительно малы и в общей сложностине превышают нескольких мс. В проведении букмекерская контора betcity торговых операций принимают участие три составляющих – прикладная программа,клиентский терминал и сервер (см. рис. 65).
Закрытие рыночных ордеров
Торговая операция – открытие, закрытие или модификации рыночных и отложенных ордеров. Торговые функции могут использоваться в экспертах и скриптах. Торговые функции OrderSend(), OrderClose(), OrderCloseBy(), OrderModify(), OrderDelete(), изменяющие состояние торгового счета, могут быть вызваны только в том случае, если в свойствах соответствующего эксперта или скрипта включена галочка “Разрешить советнику торговать”. Скрипт closeby.mq4 удобно использовать при ручной торговле, особенно в случаях, когда в окне финансовогоинструмента имеется множество разнонаправленных рыночных ордеров. Параметр pool игнорируется, если ордер выбирается по номеру тикета.
- Однако за то время,пока исполняется торговый приказ на закрытие одного из ордеров, цена может измениться.Поэтому, закрыть следует тот ордер, который при неблагоприятном развитии событийпринесёт больше вреда.
- Если необходимо сделать выбор между двумя ордерами, открытыми на одинаковое количестволотов, то следует принять во внимание другие характеристики ордеров.
- Для того чтобы встречно закрыть имеющиеся ордера, необходимо для начала задатьсякритериями отбора ордеров.
- Это правило справедливо, конечно же, тольков отношении ордеров одинакового количества лотов.
- Алгоритм представленного скрипта несколько отличается от последних рассмотренных.Это отличие состоит в том, что для успешного закрытия нескольких ордеров (количествозакрываемых ордеров не ограничено) необходимо многократно исполнить один и тотже код.
Торговые функции
В первом операторе switch обрабатываются ошибки, которые по смыслу являютсяпреодолимыми, т.е, если можно считать, что при выполнении торговой операции возникливременные затруднения. Далее управление в исполняемой программе будет передано оператору цикла while (блок6-10). В блоке 6-7 выполняется проверка наличия найденных рыночных ордеров. Еслив блоке 2-4 не было обнаружено ни одного рыночного ордера (а это в общем случаевполне возможно), то значение флага Real_Order остаётся равным -1, что означаетотсутствие Волны Боллинджера в бинарных опционах рыночных ордеров. Если при проверке в блоке 6-7 выявлено отсутствиерыночных ордеров, то выполнение цикла while прерывается и программа заканчиваетработу.
OrderSelect – функция выбирает ордер для дальнейшей работы с ним. Чтобы получить параметры любого из ордеров (рыночных или отложенных, закрытых илиудалённых) его необходимо предварительно выбрать с помощью функции OrderSelect(). При последовательном выборе ордеров с помощью параметра SELECT_BY_POS информация отдаётся в том порядке, в котором она поступила с торгового сервера.
Встречное закрытие рыночных ордеров
Порядок использования указанных функций подробно рассматривался в главе Программирование торговых операций. Все другие функции не формируют торговых приказов, но их применение очень частобывает востребованным. Например, в ряде случаев ордера требуется закрыть в порядкенекоторого приоритета. Для этого в программе необходимо проанализировать характеристикикаждого из ордеров, а именно, – тип ордера, количество лотов, положение стоп-приказови т.д. Рассмотрим некоторые функции, позволяющие получить информацию об ордере. 64.3, в заголовке оператора if анализируетсяфакт наличия следующего ордера в списке ордеров на момент его выбора.
Нам (согласно торговой стратегии) нужна всего одна экспоненциальная скользящая средняя с периодом 25 — EMA (25). Встречный ордер – это рыночный ордер, открытый в противоположном направлении по отношению к другомурыночному ордеру по тому же финансовому инструменту. Сообщения, полученные в результате успешного исполнения скрипта closeorder.mq4. Index – позиция ордера или номер ордера в зависимости от второго параметра. Клиентский терминал закончил отображение изменений и передаёт управление программе. Последовательность событий при осуществлении торговой операции.