Uncategorized

Основы языка Учебник по MQL4

Одной из ключевых особенностей MetaTrader 4 является алгоритмический трейдинг — автоматическая торговля при помощи торговых роботов (экспертов). Эти приложения способны самостоятельно анализировать котировки валютных пар и совершать торговые операции. Иными словами, MetaTrader 4 способен полностью освободить вас от рутины трейдинга и наблюдения за рынком.

Функция возвращает значение цены в точке графика, на которой был брошен экспертили скрипт. Значение будет верным только в случае, если эксперт или скрипт перемещеныс помощью мыши (технология “drag and drop”). В MQL4 есть одна очень важная возможность – программно определить в окне финансовогоинструмента координаты места, на которое был установлен эксперт или скрипт, еслиони присоединены с помощью мыши. Например, используя функцию WindowPriceOnDropped()можно получить значение прикрепления скрипта по оси ординат. Некоторые ошибки могут возникать по причинам, обусловленным сервером.

В этом примере мы присваиваем возвращаемое значение OpenBuyOrder() переменной GetTicket, в которой указан номер заявки только что размещенного нами ордера. Это необходимо только в том случае, если вы планируете проводить дальнейшую обработку с использованием номера Alor Broker тикета размещенного ордера. В связи с использованием торговых функций необходимо обратить внимание на ограниченияболее общего характера. Например, ошибка 146 возникает только в том случае, еслив окне одного финансового инструмента одновременно работают несколько программ,формирующих торговые приказы. По мнению автора, такая практика, хотя и допустима,но не оправданна. В момент, когда трейдер отсоединит эксперт от окна финансового инструмента, клиентский терминал один раз запустит на исполнение специальную функцию deinit().

Графические объекты

Например, если есть необходимость вывести на экран множество простыходнотипных изображений (например, стрелки), то для этого можно воспользоватьсяиндикаторными линиями, соответствующим образом настроив стиль линий. Такой подходизбавит от необходимости отслеживать в программе множество координат объектов ипредотвратит возможность случайного удаления изображения (значки, отображающиеиндикаторные линии, невозможно ни выделить, ни удалить). Значение “Label_Obj_MACD” указывает, что объекту назначено такоеимя (имя создаваемому объекту присваивает программист по своему усмотрению). OBJ_LABEL- идентификатор типа объекта, указывает, что создаваемый объект будет иметь такойтип (выбирается из списка возможных типов). Первый из трёх последующих нолей указывает, что объект создаётся в основном окне(основное окно, где отображается ценовой график, всегда имеет индекс 0).

Вызов программ на исполнение

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

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

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

В первом операторе switch блока 8-9 рассматриваются преодолимые ошибки. Например, если изменилась цена (ошибка135), то достаточно просто обновить параметры окружения с помощью RefreshRates()и повторить попытку открытия ордера. Если же возникла ошибка “нет цен” (ошибка 136),то нет смысла сразу снова отправлять торговый приказ на сервер. В этом случае необходимодождаться нового тика (на сервере в этот период тоже нет цен) и только после этогопроизвести ещё одну попытку открытия ордера. Если же попытка открыть ордер не увенчалась успехом, то управление передаётся вблок 8-9 для анализа ошибок.

Структура программы

  • Графические объекты самопроизвольно не удаляются.По мере развития торгов, начиная с некоторого момента, надпись Открытие Sell ужене будет соответствовать действительности.
  • Вы можете создавать индикаторы, скрипты, библиотеки и включать файлы с помощью мастера.
  • Тем не менее, функция Tral_Stop() предусматриваетвозможность модификации нескольких рыночных ордеров одного типа.
  • В этом случаефункция Trade() не осуществляет вызов каких-либо исполнительных торговых функцийи возвращает управление вызвавшей её специальной функции start().

Окна навигатора и инструментария имеют подвижные границы и могут быть отображены/скрыты в редакторе с помощью кнопок и . Функция start() содержит основной программный код и требуется в вашем советнике. Каждый раз, когда запускается функция запуска, ваши торговые условия проверяются, а ордера размещаются или закрываются в зависимости от того, как эти условия оцениваются. Глобальная переменная — это переменная, которая доступна любой функции в программе.

Информационная среда клиентского терминала МТ4

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

Внешне описание специальной функции выглядят так же, как и описание обычной пользовательской функции, с той разницей, что специальные функции имеют предопределённые имена – init(), start() и deinit(). Специальные функции представляют собой собственно блок вычислений и находятся во взаимоотношениях с информационной средой клиентского терминала и пользовательскими функциями. Специальные функции подробно рассматриваются в разделе Специальные функции. Представленный случай отличается от предыдущего тем, что целевой тип переменной F (слева от знака операции присвоения), в данном случае – тип double, совпадает с типом double выражения A+Y, поэтому целевого преобразования типов не происходит. Результатом вычислений (значением действительной переменной F) будет действительноечисло 5.0. Получилось несколько неказистое с виду, но в полной мере правильно образованное значение строкового типа.

Предопределенная переменная Volume теперь имеет тип long, таймсерии для доступа к объемам также представлены массивами типа long. В старых программах MQL4 рекомендуется делать явное приведение данных этого типа к целевому типу, чтобы избежать ошибки переполнения типа. MQL4 пользуется заслуженной популярностью среди разработчиков автоматических торговых систем благодаря простоте изучения и огромному количеству кода, наработанного за многие годы использования терминала MetaTrader 4. Но вместе с тем, ему были присущи и некоторые недостатки, проистекающие из главного преимущества – простой язык программирования не позволял писать сложные системы и затруднял портирование отлаженных библиотек из языков высокого уровня. Поэтому мы решили перенести в него максимум функций и возможностей языка MQL5, полностью сохраняя функционал MQL4.

Функции

Однако из-за сложности внутреннего представления данных с плавающей точкой они обрабатывается дольше, чем целочисленные. Кроме того, в язык MQL4 добавлены новые графические объекты и новые функции по работе с графиками. Стандартная библиотека из MQL5 портирована и в MQL4, что предоставило для разработчиков программ новые возможности по созданию собственных графических интерфейсов и торговых библиотек.

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

Когда функция запускается снова, переменная не инициализируется повторно, а вместо этого сохраняет свое предыдущее значение. Существует специальный тип данных для функций, которые не возвращают значение. Тип данных void используется для функций, которые выполняют определенную задачу, но не должны возвращать никакое значение. Затем мы вызываем функцию PipPoint() и присваиваем результат UsePoint. Теперь мы можем использовать значение, хранящееся в UsePoint, например, для расчета стоп-лосса.

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

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

При этом в соответствующей директории terminal_dir\MQL4\Experts, terminal_dir\MQL4\indicators или terminal_dir\MQL4\scripts должен быть создан выполняемый файл с тем же именем и расширением EX4. При выгрузке программы (удалении программы с графика) происходит деинициализация глобальных переменных и уничтожение очереди сообщений. В этом случае деинициализация означает освобождение переменных типа string, освобождение объектов динамических массивов и вызов деструкторов при их наличии. Для проведения торговых операций в языке MQL5 представлены функции по работе с ордерами, сделками и позициями. Ордер – это запрос на совершение покупки или продажи, при исполнении которого совершается сделка, результатом сделки является открытие, изменение или закрытие позиции. В дальнейшем значение этой переменной сохраняется неизменным в течение всего времениработы программ.

Нетрудно увидеть, что в скрипте openbuystop.mq4 отсутствует проверка достаточности свободных средств для открытия ордера, но появиласьпроверка значения цены открытия ордера (блок 3-4). Если вычисленное значение переменнойPrice не удовлетворяет требованиям установки отложенного Stop ордера (см. Характеристики ордеров, Требования и ограничения торговых операций), то производится перерасчёт этого значения. Если ордер открыт на сервере, то переменной ticket будет присвоен номер открытогоордера. В этом случае скрипт выполнил своё предназначение и далее работу программынеобходимо прекратить. В блоке 7-8 используется оператор break для выхода из циклаwhile().