Функции обработки событий Функции Основы языка Справочник MQL4

Для того чтобы объект отобразил нужный текст, сначала необходимо вычислить какимэтот текст должен быть. Для этого сначала в блоке 3-4 определяется взаимное положениеиндикаторных линий индикатора MACD на текущем и предыдущем барах, а затем в блоке4-5 вычисляется значение Sit, соответствующее текущей ситуации (см. также Рис. 107 и callstohastic.mq4) Рассмотрим пример эксперта, в котором полезно используются функции управления графическимиобъектами. Выделить и удалить невозможно, поэтомуони не являются графическими объектами. Графический объект – это изображение в окне финансового инструмента, которое можно выделить, переместить,изменить или удалить.

Компиляция программы

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

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

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

Функции для работы с графическими объектами

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

Пока программа работает, глобальная переменная и ее значение остаются в памяти, и на них можно ссылаться. В этом примере библиотечный файл, из которого мы импортируем функцию, — это library.ex4. Мы импортируем одну функцию типа double, которая называется MyImportedFunction(). Идентификатор функции должен совпадать с именем функции в файле исходной библиотеки. Обратите внимание на точку с запятой в конце объявления функции. Давайте рассмотрим простую функцию для размещения ордера на покупку.

Программирование на MQL4: основы языка и введение в синтаксис

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

  • Для этого вызывается пользовательская функция Lot()(см. раздел Функция определения количества лотов).
  • MQL является языком относительно низкого уровня, поэтому программисту необходимо создавать собственные процедуры для обработки торговых функций.
  • Легко заметить, что формированиеторгового приказа осуществляется в блоке 6-7.

Пользовательские индикаторы

  • Торговый терминал получил информацию о том, что последний торговый приказ исполнен,отразил это событие в окне терминала и в окне финансового инструмента и вернулуправление программе.
  • В левом верхнем углукурсорной рамки можно видеть небольшую точку, свидетельствующую о настройках данногографического объекта.
  • Для этого обычно достаточно вернуть значение параметра rates_total, которое содержит количество баров при текущем вызове функции.
  • Худшие значения при такой сортировке помещаются в конец и впоследствии отбрасываются и не принимают участия в формировании следующего поколения.

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

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

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

Иногда функция, которую вам нужно использовать, уже скомпилирована в другом файле, таком как другой советник, файл библиотеки (.ex4) или файл Windows DLL (.dll). Вы можете импортировать функции непосредственно в проект, используя директивы #import. Файл stdlib.mqh в нашем примере на странице 19 является стандартным включаемым файлом, который поставляется с MetaTrader. Он включает в себя несколько разных функций, которые программисты могут найти полезными. Как и все включаемые файлы, он находится в папке \experts\include.

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

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

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

Это приведёт к тому, что какой-то ордер может бытьпропущен и не модифицирован в период последнего запуска специальной функции start().Ситуация может быть исправлена на следующем тике, при очередном запуске функцииstart(). В рассматриваемом примере функции Tral_Stop() реализован случайный порядок модификацииордеров – ордера модифицируются в той последовательности, в которой они встречаютсяв списке открытых рыночных и установленных отложенных ордеров. В каждом конкретномслучае функцию необходимо доработать – запрограммировать порядок модификации ордеровв соответствии с правилами конкретной стратегии. Для соблюдения указанного порядка закрытия ордеров в блоке 3-4 используется циклfor, в котором среди всех ордеров заданного типа выбирается один ордер, имеющийнаибольшее количество лотов. Поиск этого ордера выполняется на основе анализа значенийэлементов глобального массива Mas_Ord_New, содержащего информацию обо всех ордерах,присутствующих в торговле.

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

Выбор программистом вида вновь создаваемой программы зависит от того, что именно будет делать программа, а также от свойств и ограничений, имеющихся у программразного вида. Для этого обычно достаточно вернуть значение параметра rates_total, которое содержит количество баров при текущем вызове функции. Параметры open, high, low и close содержит массивы с ценами открытия, максимальной, минимальной ценами и ценами закрытия текущего таймфрейма. Параметр time содержит массив со значениями времени открытия, параметр spread – массив, содержащий историю спредов (если спред предусмотрен для данного торгового инструмента).

Вкладка «Файлы» в окне «Навигатор» — это простой файловый браузер, который позволяет открывать и редактировать любые файлы MQL в папке \experts. На вкладке «Словарь» имеется встроенная ссылка на MQL, а на вкладке «Поиск» — функция поиска. Просто введите первые несколько символов функции MQL, оператора или другого элемента языка, и появится раскрывающийся список. Нажмите Enter, чтобы принять выделенное предложение и автоматически завершить ввод части кода. Вы можете свернуть, развернуть и перейти между несколькими открытыми окнами. Окно навигатора предлагает полезные функции просмотра файлов и справочные функции.