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

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

Позиционирование относительно ценового графика

  • Таким образом, значениянекоторых параметров могут быть изменены в любой момент.
  • Окно навигатора предлагает полезные функции просмотра файлов и справочные функции.
  • Давайте начнем с простой функции PipPoint(), которая вычисляет количество десятичных знаков в текущей паре и автоматически настраивается для 3-х и 5-ти значных брокеров.
  • Очень важно, чтобы программист сампроанализировал другие варианты ошибок и самостоятельно принял решение о том, какиеещё ошибки и как необходимо обработать в программе.

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

Скрипт – программа, составленная на языке MQL4 и исполняемая клиентским терминалом однократно. Назначением скриптов является выполнение любых разрешённых операций, которые требуется выполнить только один раз. Скрипты создаются пользователями, клиентский терминал встроенными скриптами не укомплектован. При рассмотрении порядка закрытия нескольких ордеров было указано, что критерием,определяющим приоритет закрытия ордеров, является количество лотов.

Но если в сложном выражении употребляются операнды разных типов, то конечный результат может полностью зависеть от случайно составленного фрагмента, где происходит деление целых чисел. Одним из главных критериев, отличающих программы, является возможность формирования торговых приказов. Торговый приказ – это управляющее воздействие, передаваемоепрограммой на сервер, с целью открытия, закрытия или модификации ордеров. Торговые приказы формируются в программах с помощью встроенных функций, называющихся торговыми. В зависимости от типа ордера выполняется тело одного из операторов if. Например,если значение передаваемого параметра Tip равно 0, то это значит, что необходимооткрыть ордер Buy.

  • Типи значение результата совпадают с типом и значением правого выражения.
  • Например, если длина канала составляет 50 баров,то левая координата объекта будет равна времени открытия бара с индексом 49.
  • При генетической оптимизации сортировка результатов в пределах одного поколения производится по убыванию.
  • Обычно содержательная часть программы (код) составляют строки длиной около 50 символов, поэтому построчный комментарий выглядит как столбец текста в правой части экрана.

Открытие рыночных ордеров

Для получения подробного описания этих и других функций необходимо обратиться ксправочной документации на MQL4.community, сайте MetaQuotes Ltd. или к разделу “Справка” в редакторе MetaEditor. В общем случае можно создавать и удалять графические объекты в зависимости от некоторыхвычисленных в программе условий. При исполнении эксперта, дополненного функцией deinit() с таким кодом, объект сименем Label_Obj_MACD будет удалён.

Функция ObjectSet()

Параметры volume и tick_volume содержат соответственно историю торгового и тикового объема. Функция OnCalculate() должна иметь тип возвращаемого значения int. При генетической оптимизации сортировка результатов в пределах одного поколения производится по убыванию. То есть, лучшими с точки зрения критерия оптимизации считаются результаты с наибольшим значением (для критерия оптимизации Custom max в расчет принимаются значения, возвращенные функцией OnTester). Худшие значения при такой сортировке помещаются в конец и впоследствии отбрасываются и не принимают участия в формировании следующего поколения. Функция OnInit() типа void всегда означает удачную инициализацию.

На следующем тикеторговый терминал снова запустит на исполнение функцию start(), и если критерийзакрытия на тот момент будет ещё актуален, то это снова приведёт к вызову на исполнениефункции закрытия всех ордеров Close_All(). В случае, если функция Criterion() вернула значение -1, то это означает, что экспертприкреплён в окно финансового инструмента, не являющегося EURUSD. В этом случаефункция Trade() не осуществляет вызов каких-либо UTrader исполнительных торговых функцийи возвращает управление вызвавшей её специальной функции start(). Если значимым является критерий, указывающий на необходимость закрытия рыночныхордеров Buy, то управление передаётся на метку case 11, в блок 3-4. В этом случаевызывается для исполнения всего одна функция Close_All(0) для закрытия всех имеющихсярыночных ордеров типа Buy. Блоки 4-6 составлены аналогично блокам 2-4, управлениевариантам case 20 и case 21 передаётся в случаях, если значимыми являются критериина продажу или закрытие рыночных ордеров Sell.

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

Логические операции

Теперь в MetaTrader 4 можно создавать полноценные приложения с использованием ресурсов. Переменной Price будет присвоено последнееизвестное значение текущей цены Bid (например, на первом тике цена финансовогоинструмента окажется равной 1.2744). Для получения подробного описания любой стандартной функции необходимо обратитьсяк справочной документации на MQL4.community, сайте MetaQuotes Ltd. или к разделу “Справка” в редакторе MetaEditor. Всего в языке MQL4 насчитывается более 220 стандартных функций, не считая функцийтехнических индикаторов.

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

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

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

Программы MQL4

Число координат, связываемых с объектом, может бытьот 1 до 3 в зависимости от его типа. При успешном создании объекта функция возвращаетTRUE, иначе FALSE. Чтобы получить дополнительную информацию об ошибке, необходимовызвать функцию GetLastError(). В программе имеются три специальные функции (init(), start() и deinit() ), содержанием каждой из которых является всего один оператор return(0) выхода из функции.

Leave a Comment