![]() КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Построение обычных программ 1 страницаСтандартные функции Простые программы на MQL4 Программирование торговых операций При программировании торговых операций необходимо учитывать требования и ограничения, связанные с характеристиками ордеров и правилами, принятыми в дилинговом центре, а также особенности технологии исполнения торговых приказов. В разделе подробно рассматривается порядок проведения торговых операций и приводится достаточно примеров, поясняющих назначение всех торговых функций, с помощью которых формируются различные торговые приказы. Представлено несколько готовых к использованию скриптов, ориентированных на узкую область применения. После того как программист овладеет навыками программирования торговых операций, он может приступать с созданию простых программ. В разделе рассматриваются общие принципы построения простого эксперта и простого пользовательского индикатора, а также порядок совместного использования эксперта и различных индикаторов. В частности, описывается порядок передачи данных из пользовательского индикатора в эксперт. Приводятся несколько примеров простых программ, готовых для практического использования. Всего в языке MQL4 насчитывается более 220 стандартных функций, кроме функций технических индикаторов. Представить в учебнике описание и пример использования для каждой из них затруднительно ввиду их большого количества. Некоторые функции, требующие подробных пояснений, рассмотрены в предыдущих разделах. В данном разделе рассматриваются наиболее употребляемые стандартные функции, приводятся примеры их использования. В конце каждого параграфа указан полный список функций определённой категории и их краткое описание. Как правило, после самостоятельного программирования нескольких простых прикладных программ на MQL4, программист переходит к более сложному проекту - созданию удобной программы для практического использования. Простые программы в ряде случаев не удовлетворяют потребностям трейдера-программиста по крайней мере по двум причинам: 1. Функциональная ограниченность простых программ не позволяет в полной мере обеспечить трейдера необходимой информацией и средствами управления торговлей, что делает их применение недостаточно эффективным. 2. Несовершенство кода простых программ затрудняет возможность дальнейшего их наращивания с целью получения большего сервиса. В данном разделе представлен один из возможных вариантов реализации торгующего эксперта, который может рассматриваться как основа для создания собственного проекта. Программирование торговых операций
Общий порядок проведения торговых операций. Характеристики ордеров и правила проведения торговых операций. Открытие и установка ордеров. Закрытие и удаление ордеров. Функция OrderSelect. Модификация ордеров. Общий порядок проведения торговых операций
Все вычисления и различные действия, осуществляемые в связи с выполнением прикладной программы, по месту их исполнения можно разделить на две группы: исполняемые внутри компьютера пользователя и исполняемые на сервере. Значительная часть вычислений производится на компьютере пользователя. К этой группе относится исполнение прикладных программ. Торговые операции относятся ко второй группе. Осуществление торговых операций предполагает обязательное преобразование информации на сервере. Рассматривая торговые операции, мы будем различать следующие понятия: Рыночный ордер - исполненный торговый приказ на покупку или продажу активов по финансовому инструменту. Рыночный ордер отображается в окне финансового инструмента до тех пор, пока не выполнен приказ на закрытие ордера. Отложенный ордер - торговый приказ на покупку или продажу активов по финансовому инструменту при достижении заданного значения цены. Отложенный ордер отражается в окне финансового инструмента до тех пор, пока он не преобразуется в рыночный ордер либо будет удалён. Торговый приказ -приказ, сформированный программой или трейдером с целью осуществления торговой операции. Торговая операция -открытие, закрытие или модификации рыночных и отложенных ордеров. Схема проведения торговых операций
В проведении торговых операций принимают участие три составляющих - прикладная программа, клиентский терминал и сервер (см. рис. 65). В программе формируется торговый приказ (ранее уже было указано, что любые прикладные программы могут исполняться только в компьютере трейдера; никакие прикладные программы не устанавливаются на сервере). Торговый приказ, сформированный программой, передаётся клиентскому терминалу, который, в свою очередь, отправляет приказ на сервер. На сервере принимается решение об исполнении или отклонении торгового приказа. Информация о фактически полученных результатах сообщается сервером в клиентский терминал и далее в программу.
Формирование торговых приказов
Торговый приказ может быть сформирован трейдером или программой. Для создания торговых приказов по инициативе трейдера в составе клиентского терминала имеется панель управления ордерами (см. описание клиентского терминала). Формирование торговых приказов в программе происходит в соответствии с алгоритмом в результате исполнения торговых функций. Нигде в других местах (ни в клиентском терминале, ни на сервере) торговые приказы самопроизвольно не формируются. Свойства программы
В зависимости от исполняемого алгоритма программа может формировать различные торговые приказы - приказы на открытие, закрытие или модификацию рыночных и отложенных ордеров. Для формирования торговых приказов в программе используются следующие торговые функции: OrderSend() - для открытия рыночных и отложенных ордеров; OrderClose() и OrderCloseBy() - для закрытия рыночных ордеров; OrderDelete() - для удаления отложенных ордеров; OrderModify() - для модификации рыночных и отложенных ордеров. Указанные торговые функции могут использоваться только в экспертах и скриптах; использование этих функций в индикаторах запрещено (см. также Таблицу 2). Существуют и другие функции, относящиеся к торговым (см. справку в редакторе MetaEditor и раздел Торговые функции), однако их исполнение связано с обращением к информационной среде клиентского терминала с целью получения справочной информации и не приводит к формированию торговых приказов и обращению к серверу. Свойства клиентского терминала
Торговый приказ, сформированный программой в результате исполнения торговой функции, передаётся для обработки в клиентский терминал. Клиентский терминал анализирует содержание торгового приказа и выполняет одно из двух действий: либо отправляет приказ на сервер с целью его исполнения на сервере, либо отклоняет приказ и ничего не отправляет на сервер. Клиентский терминал позволяет отправлять на сервер только корректные торговые приказы. Если программа составлена таким образом, что формирует, например, приказ на открытие ордера по несуществующей цене, то клиентский терминал не отправит этот торговый приказ на сервер. Если же программа формирует корректный торговый приказ (открытие и закрытие ордеров по последней известной цене, стоимость ордеров находится в пределах ограничений дилингового центра и т.д.), то такой приказ будет отправлен на сервер. Для осуществления торговых операций в клиентском терминале предусмотрен всего один поток. Это значит, что клиентский терминал может работать одновременно только с одним торговым приказом. Если в клиентском терминале запущено несколько торгующих экспертов или скриптов и при этом один из них передал клиентскому терминалу торговый приказ, то торговые приказы остальных экспертов и скриптов будут отклоняться до тех пор, пока клиентский терминал не закончит работу с текущим торговым приказом, то есть пока не освободится торговый поток. Свойства сервера
Информация об истории торговли по каждому счёту (открытие, закрытие и модификация ордеров) в обязательном порядке строго учитывается на сервере и имеет более высокий приоритет в сравнении с торговой историей, хранящейся в клиентском терминале. Правом исполнения торговых приказов обладает только сотрудник дилингового центра или сервер, работающий в автоматическом режиме (если сотрудник дилингового центра на некоторое время передаст серверу соответствующие полномочия). Торговый приказ, поступивший на сервер, может быть исполнен либо отклонён. В случае, если торговый приказ исполнен (т.е. фактически проведена торговая операция), то на сервере выполняется необходимое преобразование информации. Если же торговый приказ отклонён, то преобразование информации на сервере не происходит. Независимо от того, какое именно решение (исполнить или отклонить приказ) принято на сервере, информация об этом будет передана клиентскому терминалу для синхронизации торговой истории.
На сервере также имеется возможность запретить торговать советникам в клиентском терминале. Это бывает необходимо, если в результате работы программы создаётся конфликтная ситуация. Например, если в результате реализации ошибочного алгоритма программа непрерывно формирует торговые приказы поочерёдно на открытие и закрытие ордеров через очень маленькие промежутки времени (например, на каждом тике), или в случае чрезмерно частых приказов на создание, модификацию и удаление отложенных ордеров. Во всех случаях, когда создается повышенная нагрузка на брокера, возможен запрет на торговлю с помощью советников. Порядок проведения торговых операций
Процесс исполнения торговых операций является интерактивным и осуществляется в режиме реального времени. На диаграмме (рис. 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 представлена ситуация, когда в клиентском терминале запущено на исполнение одновременно два торгующих эксперта. Эксперт 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. В зависимости от того, сочтёт ли клиентский терминал этот приказ корректным, приказ будет передан клиентским терминалом на сервер или отклонён. Анализ ошибок, возникающих при проведении торговых операций, более подробно рассматривается в последующем изложении. Характеристики ордеров и правила проведения торговых операций
Перед тем как приступить к использованию торговых функций, необходимо рассмотреть параметры, характеризующие рыночные цены, типы ордеров и их характеристики, а также правила проведения торговых операций. Характеристики финансовых инструментов
Прежде всего, необходимо указать на принцип, используемый брокерскими компаниями для формирования цен по финансовым инструментам. Этот принцип состоит в том, что для проведения торговых операций брокер предлагает трейдеру двухстороннюю котировку. Двухсторонняя котировка -связанная пара рыночных цен, предлагаемых брокером для осуществления покупки и продажи активов по финансовому инструменту в текущий момент. Bid - меньшая из цен в двухсторонней котировке по финансовому инструменту, предлагаемая брокером. Ask - большая из цен в двухсторонней котировке по финансовому инструменту, предлагаемая брокером. Пункт -единица измерения цены по финансовому инструменту (минимально возможное изменение цены, последняя значащая цифра в значении цены). Спред -разница между большей и меньшей ценой в двухсторонней котировке по финансовому инструменту, выраженная в пунктах. Спред обычно является фиксированной величиной. В MetaTrader 4 принято правило, в соответствии с которым в окне финансового инструмента изображается график цены, отражающий динамику изменения цены Bid: Рис. 68. Обычный график цены по финансовому инструменту. На рис. 68 показано окно финансового инструмента, в котором можно наблюдать график изменения цены Bid и двухстороннюю котировку - линию текущей цены Bid (чёрного цвета, 1.3005) и линию текущей цены Ask (красного цвета, 1.3007). Легко увидеть, что в данном случае брокер предлагает спред, равный 2 пунктам. На графике не отражена история цены по Ask, но она подразумевается и может быть легко посчитана для любого момента времени. Типы и характеристики ордеров
Всего различаются шесть типов ордеров - два рыночных и четыре отложенных. Buy -рыночный ордер, определяющий покупку активов по финансовому инструменту. Sell -рыночный ордер, определяющий продажу активов по финансовому инструменту. BuyLimit -отложенный ордер на покупку активов по финансовому инструменту по цене ниже текущей. Ордер исполнится (преобразуется в рыночный ордер Buy), если цена Ask достигнет или окажется ниже цены, заявленной в ордере. SellLimit -отложенный ордер на продажу активов по финансовому инструменту по цене, превышающей текущую цену. Ордер исполнится (преобразуется в рыночный ордер Sell), если цена Bid достигнет или окажется выше цены, заявленной в ордере. BuyStop -отложенный ордер на покупку активов по финансовому инструменту по цене, превышающей текущую цену. Ордер исполнится (преобразуется в рыночный ордер Buy), если цена Ask достигнет или окажется выше цены, заявленной в ордере. SellStop -отложенный ордер на продажу активов по финансовому инструменту по цене ниже текущей. Ордер исполнится (преобразуется в рыночный ордер Sell), если цена Bid достигнет или окажется ниже цены, заявленной в ордере. Lots -размер ордера, выраженный в количестве лотов. StopLoss -стоп-приказ; заявленная цена, по которой рыночный ордер будет закрыт при движении цены финансового инструмента в сторону убытков по ордеру. TakeProfit -стоп-приказ; заявленная цена, по которой рыночный ордер будет закрыт при движении цены финансового инструмента в сторону прибыли по ордеру.
Требования и ограничения при проведении торговых операций
Для правильного формирования торговых приказов в прикладных программах (экспертах и скриптах) необходимо принимать во внимание имеющиеся требования и ограничения. Рассмотрим их подробно.
Указанное правило является всеобщим для всех участников рынка и не может быть изменено по воле разработчиков торговой платформы или на основе договорённости между брокером и трейдером. Это значит, например, что открытие рыночного ордера осуществляется только по текущей рыночной цене и не может быть выполнено по любой другой цене. Порядок расчёта правильных цен для различных торговых операций рассматривается ниже. При расчёте правильных цен необходимо учитывать также ограничения, накладываемые поставщиком услуг (дилинговым центром). К таким ограничениям относятся минимальная дистанция и дистанция заморозки. Сущность этих ограничений состоит в том, чтобы предоставить брокеру возможность подготовиться к исполнению новых торговых операций, будь то преобразование отложенного ордера в рыночный или закрытие ордера в результате исполнения стоп-приказа. Дилинговые центры ограничивают значение минимально допустимой разницы между рыночной ценой и заявленной ценой каждого из стоп-приказов рыночного ордера, между рыночной ценой и заявленной ценой отложенного ордера, а также между заявленной ценой отложенного ордера и заявленными ценами его стоп-приказов. Это значит, например, что в торговом приказе на открытие рыночного ордера могут быть заявлены только такие значения цен стоп-приказов, которые удалены от текущей рыночной цены не менее, чем на минимальную дистанцию. Торговый приказ, в котором цены стоп-приказов заявлены ближе к рыночной цене, чем на минимальную дистанцию, расценивается клиентским терминалом как ошибочный. Разные дилинговые центры могут устанавливать различные, свойственные только им, ограничения минимальной дистанции. Как правило, размер минимальной дистанции колеблется от 1 до 15 пунктов. Для наиболее распространённых финансовых инструментов (EUR/USD, GBP/USD, EUR/CHF и пр.) эта дистанция у большинства дилинговых центров обычно составляет 3 - 5 пунктов. Разные финансовые инструменты также могут иметь разные значения минимальной дистанции, например, для золота это значение может составлять 50-100 пунктов. Значение минимальной дистанции для любого финансового инструмента может быть изменено брокером в любое время (обычно это происходит перед выходом важных экономических новостей). Аналогичных правил для ограничения максимальной дистанции не существует.
Дата добавления: 2014-12-29; Просмотров: 279; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |