Аналогичный результат (ошибка 134) будет получен и в случае, если свободных средствне хватает для открытия ордера. Размер свободных средств, необходимых для открытия 1 лота на покупку для каждого финансового инструмента можно узнать с помощью функции MarketInfo(Имя_инструмента, MODE_MARGINREQUIRED). Если скрипт confined.mq4 запустить на исполнение в окне Eur/Usd, то возникнет ошибка. В дальнейшем все возникающие ошибки мы будем идентифицировать по этому коду.
Запуск программы на исполнение
Порядок расположения в программе описаний специальных и пользовательских функций не имеет значения. 32 представлена обычная последовательность функциональных блоков, а именно – головная часть, специальные функции, пользовательские функции. Во всех примерах головная часть находится вверху, в то время как в отношении описаний функций допускается произвольный порядок. Обычно после головной части следует описание специальных функций.
Параметры и внешние переменные
Устанавливается в соответствии с требованиями и ограничениями,принятыми для проведения торговых операций (см. Характеристики ордеров). Функция возвращает номер тикета (ticket – уникальный порядковыйномер ордера), который назначен ордеру торговым сервером или -1 в случае, еслиторговый приказ был отклонён севером или клиентским терминалом. Для получения информациио причине отклонения торгового приказа необходимо использовать функцию GetLastError()(в дальнейшем изложении мы рассмотрим несколько наиболее распространённых ошибок). Формирование торговых приказов для открытия рыночных и установки отложенных ордеровосуществляется с помощью функции OrderSend( ).
Исполнение оператора return приводит к выходу из функции start() и, как следствие,к окончанию исполнения программы (напомним, что скрипты после исполнения заканчиваютработу) – управление возвращается клиентскому терминалу. В этом случае стандартнаяфункция Symbol() вернёт строковое значение EURUSD. На первый взгляд может показаться, что функция OrderSend() слишком сложна для понимания.В действительности, все рассматриваемые параметры достаточно просты, необходимыи полезно используются в торговле. Для того чтобы в этом убедиться, рассмотримнаиболее простой вариант использования торговой функции OrderSend() для открытиярыночного ордера. Slippage – максимально допустимое отклонение заявленной цены открытия ордера от рыночнойцены для рыночных ордеров (пунктов). В случае установки отложенного ордера параметрне обрабатывается.
Способы позиционирования графических объектов
Если же торговый приказ не был исполнен, то выполняется анализ ошибок(блок 4-5). Свойства специальных функций подробно изложены в разделе Специальные функции, а здесь мы рассмотрим только общие сведения о них. Специальная функция – это такая функция, которая вызывается для Forex4you исполнения клиентским терминалом. В отличие от обычных функций, специальные функции имеют только описание, а вызов специальных функций в программе не указывается. Специальные функции вызываются для исполнения клиентским терминалом (имеется техническая возможность вызова специальных функций и из программы, но мы будем считать такой способ некорректным и здесь рассматривать не будем).
- Эта функция выполняется менее чем за 1 миллисекунду (не ждёт ответа торгового сервера на отправленный запрос) и тут же возвращает управление.
- При исполнении эксперта, дополненного функцией deinit() с таким кодом, объект сименем Label_Obj_MACD будет удалён.
- Точкой отсчёта координат самого объекта (в данном случае) является верхний левыйугол курсорной рамки, видимой при выделении объекта мышью.
- В MQL4 имеются естественные ограничения и правила использования операций в выражениях.
Вы не сможете открыть ее с помощью другой программы, кроме MetaTrader. Если вы купите советника или торгового робота для MetaTrader, скорее всего, они будут с расширением .ex4. Общий результат (значение переменной Res_2) – целое значение 3 (три). Общий результат (значение переменной Res_1) – целое значение 0 (ноль). То значение 7 / 3 выражения X / Y и переменной Z будет равно 2 (двум). Но каким будет результат в том случае, если в программе необходимо выполнить операцию деления?
Здесь рассматривается 2 вида ошибок – те, которыепозволяют ещё надеяться на успешное открытие и те, появление которых однозначноуказывает на необходимость прекратить исполнение программы. Переменной Error присваиваетсякод последней ошибки, в данном случае той ошибки, которая была возвращена серверомили клиентским терминалом при исполнении торговой функции OrderSend(). Если для открытия ордера свободных средств хватает, то управление передаётся в блок4-5 и далее в блок 5-6. Этим полагается,что для любой минимальной дистанции, установленной брокером, найдутся соответствующиезначения стоп-приказов. В блоке 1-2 намеренно указано значение 3 пункта для TP.Подавляющее число брокеров устанавливают минимальную дистанцию 5 пунктов.
Торговые функции
Обратите внимание, количество лотов – единственный критерий, принятый для определенияпорядка закрытия ордеров. Прибыль/убыток по ордеру, курс открытия ордера, а такжедругие параметры, характеризующие ордер (заявленные цены стоп-приказов, время ипричина открытия и пр.), не рассматриваются. Исключение составляют случаи, когдапри исполнении торговых операций возникают критические ошибки (см. раздел Функция обработки ошибок). Необходимо отметить связь между значением, возвращаемым функцией OnCalculate() и вторым входным параметром prev_calculated. Параметр prev_calculated при вызове функции содержит значение, которое вернула функция OnCalculate() на предыдущем вызове. Это позволяет реализовать экономные алгоритмы расчета пользовательского индикатора с тем, чтобы избежать повторных расчетов для тех баров, которые не изменились с предыдущего запуска этой функции.
В данном случае точкой привязки графическогообъекта к окну финансового инструмента является левый верхний угол окна финансовогоинструмента. Координаты объекта относительно указанной точки привязки задаютсяв пикселях и 48 на Рис. Использование подробных комментариев в программе крайне желательно, а в некоторых случаях и жизненно необходимо. Следует особо подчеркнуть, что программисту приходится не только составлять программы, но и читать их. В ряде случаев при чтении программы могут возникнуть значительные затруднения. Статические переменные остаются в памяти даже после выхода из функции.
Основы языка MQL4
Тем не менее, функция Tral_Stop() предусматриваетвозможность модификации нескольких рыночных ордеров одного типа. Если трейдер невмешивается в торговлю во время работы эксперта, то необходимость модифицироватьнесколько ордеров не возникает. Однако для случая, когда трейдер допускает открытиерыночного ордера вручную (в дополнение к уже имеющемуся), возникает вопрос о порядкемодификации ордеров, а именно, какой из них необходимо модифицировать раньше другихи почему.
Программы MQL4
- Если значимым является критерий, указывающий на необходимость закрытия рыночныхордеров Buy, то управление передаётся на метку case 11, в блок 3-4.
- Файлы .mq4 можно открыть с помощью MetaEditor или любого редактора текстовых файлов.
- Если функцияOrderClose() вернула значение true, то это означает, что торговая операция успешнозавершена, т.е.
- Для функции OnStart() допустимо указывать тип возвращаемого значения int.
Область видимости переменной – от объявления (даже во вложенном блоке) до конца функции Изменилась также работа с функциями, областью видимости переменных и освобождением памяти в локальных массивах. Так как изменений оказалось достаточно много, то для обеспечения максимальной совместимости со старым подходом к написанию программ MQL4 было решено ввести новое свойство #property strict. При создании новой программы MQL4 с помощью Мастера MQL4 это свойство всегда добавляется в шаблон. Соответственно, если в программах MQL4 используются DLL для передачи/приема ценовых данных, то соответствующие функции в исходных кодах должны быть переписаны и заново скомпилированы с учетом изменении формата для обеспечения правильной работы.
MQL является языком относительно низкого уровня, поэтому программисту необходимо создавать собственные процедуры для обработки торговых функций. Например, написание кода чего-то такого простого, как трейлинг-стоп, может быть пугающим для начинающего MQL-программиста. Для того чтобы mql4-программа могла работать, она должна быть скомпилирована (кнопка “Компилировать” или клавиша F7). Компиляция должна пройти без ошибок (допускаются предупреждения, которые необходимо проанализировать).
В разделе Функция определения торговых критериев указывалось, что по некоторым торговым критериям может быть сформировано несколькоразличных торговых приказов. Так, в случае, если значимым является торговый критерийна покупку (значение переменной Trad_Oper равно 10), то при исполнении оператораswitch() управление передаётся на метку case 10 (блок 2-3). Исполнение этой функции приводит к закрытиювсех рыночных ордеров Sell, открытых по финансовому инструменту EURUSD. После тогокак все ордера Sell закрыты, выполняется проверка достаточности средств для совершенияследующей торговой операции. Для этого вызывается пользовательская функция Lot()(см. раздел Функция определения количества лотов).
Все виды программ могут быть одновременно запущены в одном окне финансового инструмента при условии соблюдения ограничений, имеющихся у каждого вида. В окне финансового инструмента одновременно могут быть присоединены несколько индикаторов, не мешая работе друг друга. В окне финансового инструмента одновременно можно присоединить только один скрипт; одновременное использование нескольких скриптов запрещено. В окне финансового инструмента одновременно можно присоединить только один эксперт; одновременное использование нескольких экспертов запрещено. Разница в исполнении экспертов, скриптов и пользовательских индикаторов, определяется свойствами их специальных функций, которые мы рассмотрим более подробно в разделе Специальные функции.











