Русский

Учебник по MQL4  Торговые операции  Общий порядок проведения торговых операций

Общий порядок проведения торговых операций


Все вычисления и различные действия, осуществляемые в связи с выполнением прикладной программы, по месту их исполнения можно разделить на две группы: исполняемые внутри компьютера пользователя и исполняемые на сервере. Значительная часть вычислений производится на компьютере пользователя. К этой группе относится исполнение прикладных программ. Торговые операции относятся ко второй группе. Осуществление торговых операций предполагает обязательное преобразование информации на сервере.

Рассматривая торговые операции, мы будем различать следующие понятия:

Рыночный ордер - исполненный торговый приказ на покупку или продажу активов по финансовому инструменту. Рыночный ордер отображается в окне финансового инструмента до тех пор, пока не выполнен приказ на закрытие ордера.

Отложенный ордер - торговый приказ на покупку или продажу активов по финансовому инструменту при достижении заданного значения цены. Отложенный ордер отражается в окне финансового инструмента до тех пор, пока он не преобразуется в рыночный ордер либо будет удалён.

Торговый приказ - приказ, сформированный программой или трейдером с целью осуществления торговой операции.

Торговая операция - открытие, закрытие или модификации рыночных и отложенных ордеров.

Схема проведения торговых операций


В проведении торговых операций принимают участие три составляющих - прикладная программа, клиентский терминал и сервер (см. рис. 65). В программе формируется торговый приказ (ранее уже было указано, что любые прикладные программы могут исполняться только в компьютере трейдера; никакие прикладные программы не устанавливаются на сервере). Торговый приказ, сформированный программой, передаётся клиентскому терминалу, который, в свою очередь, отправляет приказ на сервер. На сервере принимается решение об исполнении или отклонении торгового приказа. Информация о фактически полученных результатах сообщается сервером в клиентский терминал и далее в программу.


Рис. 65. Схема передачи торговых приказов при проведении торговых операций.

Формирование торговых приказов


Торговый приказ может быть сформирован трейдером или программой. Для создания торговых приказов по инициативе трейдера в составе клиентского терминала имеется панель управления ордерами (см. описание клиентского терминала). Формирование торговых приказов в программе происходит в соответствии с алгоритмом в результате исполнения торговых функций. Нигде в других местах (ни в клиентском терминале, ни на сервере) торговые приказы самопроизвольно не формируются.

Свойства программы


В зависимости от исполняемого алгоритма программа может формировать различные торговые приказы - приказы на открытие, закрытие или модификацию рыночных и отложенных ордеров. Для формирования торговых приказов в программе используются следующие торговые функции:

  • OrderSend() - для открытия рыночных и отложенных ордеров;
  • OrderClose() и OrderCloseBy() - для закрытия рыночных ордеров;
  • OrderDelete() - для удаления отложенных ордеров;
  • OrderModify()- для модификации рыночных и отложенных ордеров.

Указанные торговые функции могут использоваться только в экспертах и скриптах; использование этих функций в индикаторах запрещено (см. также Таблицу 2). Существуют и другие функции, относящиеся к торговым (см. справку в редакторе MetaEditor и раздел Торговые функции), однако их исполнение связано с обращением к информационной среде клиентского терминала с целью получения справочной информации и не приводит к формированию торговых приказов и обращению к серверу.

Свойства клиентского терминала


Торговый приказ, сформированный программой в результате исполнения торговой функции, передаётся для обработки в клиентский терминал. Клиентский терминал анализирует содержание торгового приказа и выполняет одно из двух действий: либо отправляет приказ на сервер с целью его исполнения на сервере, либо отклоняет приказ и ничего не отправляет на сервер.

Клиентский терминал позволяет отправлять на сервер только корректные торговые приказы. Если программа составлена таким образом, что формирует, например, приказ на открытие ордера по несуществующей цене, то клиентский терминал не отправит этот торговый приказ на сервер. Если же программа формирует корректный торговый приказ (открытие и закрытие ордеров по последней известной цене, стоимость ордеров находится в пределах ограничений дилингового центра и т.д.), то такой приказ будет отправлен на сервер.

Для осуществления торговых операций в клиентском терминале предусмотрен всего один поток. Это значит, что клиентский терминал может работать одновременно только с одним торговым приказом. Если в клиентском терминале запущено несколько торгующих экспертов или скриптов и при этом один из них передал клиентскому терминалу торговый приказ, то торговые приказы остальных экспертов и скриптов будут отклоняться до тех пор, пока клиентский терминал не закончит работу с текущим торговым приказом, то есть пока не освободится торговый поток.

Свойства сервера


Информация об истории торговли по каждому счёту (открытие, закрытие и модификация ордеров) в обязательном порядке строго учитывается на сервере и имеет более высокий приоритет в сравнении с торговой историей, хранящейся в клиентском терминале. Правом исполнения торговых приказов обладает только сотрудник дилингового центра или сервер, работающий в автоматическом режиме (если сотрудник дилингового центра на некоторое время передаст серверу соответствующие полномочия). Торговый приказ, поступивший на сервер, может быть исполнен либо отклонён. В случае, если торговый приказ исполнен (т.е. фактически проведена торговая операция), то на сервере выполняется необходимое преобразование информации. Если же торговый приказ отклонён, то преобразование информации на сервере не происходит. Независимо от того, какое именно решение (исполнить или отклонить приказ) принято на сервере, информация об этом будет передана клиентскому терминалу для синхронизации торговой истории.

Торговый приказ, сформированный в результате работы программы, и торговый приказ, сформированный трейдером вручную, с точки зрения сервера выглядят одинаковыми, поэтому на сервере не делается никаких различий при обработке торговых приказов.

На сервере также имеется возможность запретить торговать советникам в клиентском терминале. Это бывает необходимо, если в результате работы программы создаётся конфликтная ситуация. Например, если в результате реализации ошибочного алгоритма программа непрерывно формирует торговые приказы поочерёдно на открытие и закрытие ордеров через очень маленькие промежутки времени (например, на каждом тике), или в случае чрезмерно частых приказов на создание, модификацию и удаление отложенных ордеров. Во всех случаях, когда создается повышенная нагрузка на брокера, возможен запрет на торговлю с помощью советников.

Порядок проведения торговых операций


Процесс исполнения торговых операций является интерактивным и осуществляется в режиме реального времени. На диаграмме (рис. 66) отражены все события, связанные с осуществлением торговой операции.



Рис. 66. Последовательность событий при осуществлении торговой операции.


Событие 0. Программа запущена на выполнение в момент времени t 0.

Событие 1. В момент t 1 в результате исполнения одной из торговых функций программой сформирован торговый приказ. Торговый приказ передаётся клиентскому терминалу. В этот момент программа передаёт клиентскому терминалу управление, и выполнение программы приостанавливается (красная точка на диаграмме).

Событие 2. Клиентский терминал получил управление и информацию о содержании торгового приказа. В период времени t 2 - t 3 клиентский терминал анализирует содержание торгового приказа и принимает решение о дальнейших событиях.

Событие 3. Клиентский терминал осуществляет принятое решение (один из двух вариантов).

Вариант 1. В случае, если торговый приказ, сформированный в результате исполнения одной из торговых функций, оказался некорректным, управление передаётся программе. В этом случае следующим является Событие 4 (это возможно, например, в случае, если программа создала торговый приказ открыть ордер, стоимость которого превышает количество свободных средств на счёте).

Событие 4. Программа получила управление (момент времени t 4, зелёная точка) и может продолжить исполнение с того места, где ранее был сформирован торговый приказ. В этот же момент программа получила информацию о том, что торговый приказ не исполнен. Какова причина отказа исполнения торгового приказа, можно выяснить, анализируя код возвращаемой ошибки. Как это сделать, мы рассмотрим позднее. Здесь же важно отметить, что не все торговые приказы приводят к осуществлению торговых операций. В данном случае программа сформировала некорректный приказ, в результате чего клиентский терминал отклонил этот приказ и вернул управление программе. Обращение к серверу в этом случае не происходит. Интервалы времени t 1 - t 2 - t 3 - t 4 пренебрежительно малы и в общей сложности не превышают нескольких мс.

Вариант 2. В случае, если программа сформировала корректный торговый приказ, клиентский терминал отправляет этот приказ на сервер, и тогда следующим событием будет Событие 5 (момент t 5) - получение торгового приказа сервером. Связь между клиентским терминалом и сервером осуществляется по сети Internet, поэтому время, затраченное на пересылку торгового приказа на сервер (интервал времени t 3 - t 5), полностью зависит от качества связи. При хорошей связи этот промежуток времени может составлять приблизительно 5 - 10 мс, а при плохой связи может измеряться секундами.

Событие 5. В момент времени t 5 сервер получил торговый приказ. Сервер может исполнить полученный приказ или отклонить его. Решение об исполнении или отклонении приказа может быть принято на сервере через некоторое время (в момент t 6). Интервал времени t 5 - t 6 может колебаться в зависимости от обстоятельств от нескольких микросекунд до десятков секунд. В одних случаях, если сервер работает в автоматическом режиме, на рынке нет резких движений цены и нет большой активности других трейдеров, торговый приказ может быть исполнен или отклонён в считанные микросекунды. В других случаях, если сервер перегружен в результате большой активности трейдеров, а решение об исполнении/отклонении приказа принимает человек, время, затраченное на решение, может составлять десятки секунд.

Событие 6. Если в течение промежутка времени с момента формирования торгового приказа программой (t 1) до момента принятия решения сервером (t 6) на рынке не произошло каких-либо существенных изменений, торговый приказ, как правило, будет исполнен. Если за это же время изменилась цена по финансовому инструменту, либо стоимость открываемого ордера на момент решения превышает количество свободных средств, либо возникли другие препятствия, то сервер принимает решение отклонить торговый приказ.

Отклонение торговых приказов сервером (несмотря на их предварительную проверку клиентским терминалом) - нормальное явление. В целом, подавляющее число торговых приказов, попадающих на сервер, принимаются сервером к исполнению. Однако в ряде случаев торговый приказ может быть отклонён, поэтому прикладная программа должна быть составлена таким образом, чтобы учесть возможность подобного развития событий и принять необходимые меры.

Вне зависимости от того, какое именно решение (исполнить/отклонить торговый приказ, Событие 6) было принято сервером, информация об этом будет направлена сервером клиентскому терминалу, приславшему приказ.

Событие 7. Клиентский терминал получил ответ сервера. Ответ сервера проходит тот же путь по сети Internet, что и при отправке приказа на сервер; и время, затраченное на получение ответа сервера, полностью зависит от качества связи. В зависимости от того, какие преобразования были выполнены на сервере, клиентский терминал покажет соответствующие изменения. Например, если в результате исполнения торгового приказа был закрыт или открыт ордер, то клиентский терминал отразит это событие: графически - в окне финансового инструмента, текстом - в окне Терминала (закладки Торговля и История счёта). Если же торговый приказ был отклонён сервером, то никаких изменений в окнах клиентского терминала не произойдёт.

Событие 8. Клиентский терминал закончил отображение изменений и передаёт управление программе.

Событие 9. Программа получила управление и может продолжать работу.

Обратите внимание:

С момента, когда программа отдаёт торговый приказ (и одновременно с этим передаёт управление) клиентскому терминалу, до момента, кода управление возвращается в программу, программа находится в режиме ожидания ответа. В этот период в программе не осуществляется никаких действий. Управление возвращается в программу в соответствии с правилом исполнения вызова функции (сформировавшей торговый приказ).

Если торговый приказ был некорректным, то программа находится в режиме ожидания ответа непродолжительное время (период t 1 - t 4). Если же торговый приказ был одобрен клиентским терминалом и отправлен на сервер, то программа может находиться в режиме ожидания ответа в течение различного по продолжительности времени (t 1 - t 9), в зависимости от качества связи и времени принятия решения на сервере - от нескольких миллисекунд до минут.

Одновременно с управлением программа получает возможность работать. Работающая программа может анализировать код последней ошибки, возвращённой клиентским терминалом, и таким образом судить о факте исполнения или отклонения торгового приказа.

Конфликты при проведении торговых операций. Ошибка 146


При рассмотрении свойств клиентского терминала указывалось, что клиентский терминал может работать одновременно только с одним торговым приказом. Рассмотрим, какие события будут происходить, если клиентскому терминалу будет адресовано несколько торговых приказов, сформированных разными программами.


Рис. 67. Конфликты при передаче торговых приказов клиентскому терминалу от нескольких программ.


На рис. 67 представлена ситуация, когда в клиентском терминале запущено на исполнение одновременно два торгующих эксперта. Эксперт 1 сформировал торговый приказ в момент t 1 и передал его клиентскому терминалу в момент t 2.

Эксперт 2 также создал торговый приказ и обращается к клиентскому терминалу в период, когда клиентский терминал занят обработкой первого торгового приказа (период t 2 - t 3). В этой ситуации клиентский терминал не может принять к рассмотрению торговый приказ, созданный Экспертом 2, и поэтому отклонит этот приказ и вернёт управление Эксперту 2. Обратите внимание, в данном случае торговый приказ отклоняется клиентским терминалом не потому, что приказ оказался некорректным, а потому, что терминал занят обработкой другого приказа. Эксперт 2 продолжит работу и может проанализировать код ошибки, свидетельствующий о причине отклонения торгового приказа (в данном случае - ошибка 146).

Если в период t 1 - t 4 клиентскому терминалу передаёт свой торговый приказ Эксперт 2 (а в общем случае одна или несколько торгующих программ), то этот приказ отклоняется (группа событий в розовой области). Клиентский терминал освобождается в момент t 4 (зелёная точка). Начиная с этого момента, Эксперт 2 может успешно передать клиентскому терминалу свой торговый приказ (группа событий в зелёной области). Этот приказ будет принят и рассмотрен клиентским терминалом, в результате чего также может быть отклонён (но уже по причине некорректности) или отправлен на сервер.

Если торговый приказ, созданный Экспертом 1, будет принят клиентским терминалом как корректный, то в момент t 3 этот приказ отправляется терминалом на сервер. В этом случае клиентский терминал переходит в режим ожидания ответа сервера и считается недоступным для рассмотрения других торговых приказов. Клиентский терминал освободится для рассмотрения других торговых приказов только в момент t 9. Таким образом, согласно второму варианту развития событий клиентский терминал является недоступным для анализа торговых приказов в течение периода t 1 - t 9. Если в этот период к клиентскому терминалу обратится любая программа с целью передать на рассмотрение торговый приказ, то клиентский терминал откажет в этом событии и вернёт управление программе (группа событий в розовой области в период t 6 - t 7). Программа, получившая управление, продолжит свою работу и, проанализировав код ошибки, может выяснить причину отклонения торгового приказа (в данном случае - ошибка 146).

Начиная с момента t 9, клиентский терминал полностью освобождается для анализа любых других торговых приказов. Эксперт 2 может успешно передать торговый приказ клиентскому терминалу в период, следующий за моментом t 9. В зависимости от того, сочтёт ли клиентский терминал этот приказ корректным, приказ будет передан клиентским терминалом на сервер или отклонён.

Анализ ошибок, возникающих при проведении торговых операций, более подробно рассматривается в последующем изложении.