Продолжая цикл статей по программированию на MQL 4, начатый в 74 номере журнала ForTrader.org, мы с вами вплотную подошли к самому что ни на есть основному – исходному коду. Как же понять этот язык MQL 4? Как же научиться его модифицировать? У большинства людей именно эти вопросы вызывает наибольше трудности и опасения. Однако, если мы говорим именно о модификации программы, то все не так уж и страшно. Программа на языке MQL4 похожа на текст на английском языке, из которого выкинули большую часть слов, оставив только самые-самые необходимые.
Другие статьи по программированию на MQL4:
- Самостоятельная модификация программ для MetaTrader4 (часть 1)
- Классификация советников Форекс
- Ваши недокументированные возможности при написании советников на MQL4
Язык MQL4: вспоминаем английский
По сути, чтение программы сводится к простому переводу команд с английского языка на русский.
Например, рассмотрим вот такую отдельную строчку на языке MQL4:
if(counted_bars>0) counted_bars—;
Попробуем перевести её текст на русский язык «Если посчитанные бары больше 0, посчитанные бары минус минус». Смысл первой части фразы, надеюсь, понятен всем. Остается лишь узнать, что означает «посчитанные бары минус минус». Недолгий поиск по Интернету сообщает нам, что код «переменная минус минус» есть ни что иное, как уменьшение переменной на единицу. Таким образом, весь смысл полученной строчки становится понятным – если количество посчитанных баров больше 0, то уменьшим их количество на единицу.
Хочу обратить Ваше внимание: мы поняли, ЧТО делает строчка кода, однако мы не поняли, ПОЧЕМУ и ЗАЧЕМ она это делает. Чтение исходного кода зачастую сообщает нам лишь последовательность команд, которые требуется выполнить. Мы можем понять, что эта строчка делает одно, а эта – другое, однако сложить весь пазл в единую картинку зачастую не так просто, как кажется на первый взгляд. И именно поэтому в статье «Перед тем, как начать» мы достаточно пристальное внимание уделили изучению алгоритма работы программы.
В языке MQL4 существует не так много принципиальных моментов, которые сложно понять, не зная о них заранее. Давайте рассмотрим основные.
Объявление переменных
Переменные – это рабочая лошадка любой программы. По сути своей, переменные – это именованные ячейки оперативной памяти, в которой программа хранит свои данные. В языке MQL4 данные бывают шести различных типов:
- int – целочисленный тип данных. Служит для хранения целых чисел.
- double – тип данных с плавающей точкой. Служит для хранения дробных чисел.
- string – строковый тип данных. Служит для хранения строк.
- color – цветовой тип данных. В переменных этого типа хранится код цвета.
- datetime – тип данных даты и времени. В переменных этого типа хранятся дата и время.
- bool – логический тип данных. Служит для хранения значений типа «истина» или «ложь».
Перед началом использования переменной её требуется объявить, т.е. сказать компьютеру, чтобы он выделил ячейку оперативной памяти определенного размера и присвоил ей определенное имя. Для этого используется команда следующего вида: «тип_переменной имя_переменной;» – вначале указывается тип переменной, затем ставится пробел и указывается её имя, после чего следует точка с запятой.
Вообще, точка с запятой в языке MQL4 – это аналог точки в русском языке. Её требуется ставить после каждого «предложения» на языке программирования.
Иногда в процессе объявления переменной сразу присваивают начальное значение (т.е. не просто говорят компьютеру выделить ячейку оперативной памяти, но и говорят, какое значение туда положить). Для этого после имени переменной, но до точки с запятой, ставится оператор =, и после него указывается начальное значение. Рассмотрим несколько примеров:
int a; double b = 5.0; string hello = “Hello”;
Замечание: Строки в языке MQL4 должны быть заключены в двойные кавычки.
В дальнейшем для использования переменной, требуется просто указать её имя, после чего компьютер сам посмотрит в ячейку оперативной памяти с этим именем и подставит нужное значение. Остается лишь один вопрос – как можно использовать переменные?
Виды операторов в MQL4
Переменные в языке MQL4 обычно используется одним из двух возможных образов: они либо участвуют в работе операторов, либо являются параметрами функций.
Сначала рассмотрим операторы. В языке MQL4 доступно поистине огромное число различных операторов – коротких команд, которые определенным образом оперируют с переменными.
Самый, в некотором роде, главный оператор – это оператор присваивания. Обозначается он знаком равенства («=»), слева от него должна стоять переменная, а справа – значение, которое в эту переменную нужно записать. Таким значением может быть практически все, что угодно, – другая переменная, предопределенное выражением, результат работы функции и т.д.
Рассмотрим простой пример:
a = 5;
Читать такую строчку следует «Положить в ячейку памяти с именем a значение 5». Ни в коем случае нельзя её читать как «a равно 5»! Это совершенно неверно. В языке MQL4 есть отдельный оператор равенства (о нем – чуть позже). Здесь же мы именно кладем в ячейку памяти некоторое значение.
Помимо оператора присваивания, в языке MQL4 существуют и другие операторы. Например, арифметические: + (плюс), — (минус), * (умножить), / (разделить). Пример:
a = a + 5;
Читать эту строчку следует «Взять значение ячейки памяти с именем a, прибавить к нему 5 и записать полученный результат в ячейку памяти с именем a», либо просто «увеличить значение a на 5».
Ещё одна группа операторов, которую мы рассмотрим, – это операторы отношения. Основные из них: == (равно), != (не равно), > (больше), < (меньше), >= (больше, либо равно), <= (меньше либо равно). Операторы отношения проверяют истинность выражения и возвращают true, если оно истинно, и false – если ложно.
Например:
if(a == b) Alert( “1” );
Читать этот код следует так: «Если значение переменной a равно значению переменной b, то вывести на экран сообщение с текстом 1». Как Вы уже могли догадаться, Alert( “1” ) – есть не что иное, как команда вывода на экран сообщения с текстом 1. Оно будет показано, если значение a равно b, и не будет показано в противном случае.
Применение условных операторов
Пришла пора чуть подробней рассмотреть команду if. Это ни что иное, как условный оператор. Он позволяет выполнять определенные участки кода, только если истинно условие, расположенное в круглых скобках. Например, как уже говорилось в предыдущем примере, 1 выведется на экран, только если значение переменной a равно значению переменной b.
Иногда после круглых скобок стоит фигурная открывающаяся скобка. Например:
if( a == b ) { a = a + 1; Alert( a ); }
По умолчанию, к условному оператору относится лишь первая команда, расположенная после него (до первой точки с запятой). Остальной код к условному оператору не относится. Наличие же фигурных скобок позволяет отнести к условному оператору весь код, который расположен между ними.
Иногда, после оператора if можно увидеть оператор else. Оператор else позволяет указать команды, которые будут выполнены, если выражение в круглых скобках оператора if ложно. Пример:
if( a == b) Alert( “А равно Б” );
else Alert( “А не равно Б” );
Читать этот код следует так «Если значение переменной a равно значению переменной b – вывести на экран строчку “А равно Б”, иначе – вывести на экран строчку “А не равно Б”».
Циклические операторы
Ещё одним важным типом операторов являются циклы. Они позволяют повторять определенный набор команд некоторое число раз. В языке MQL4 существует два типов цикла – for и while.
Рассмотрим цикл while. Его синтаксис выглядит очень просто:
while ( условие ) { команды;}
Пока значение выражения «условие» истинно, будут выполняться команды. Как только оно станет ложным, выполнение цикла прекратиться. Рассмотрим пример:
int i = 0;
while( i < 10 ) {i++;}
Читать данный код следует так: «Создадим целочисленную переменную с именем i и присвоим ей начальное значение 0. Пока i меньше 10, увеличиваем значение i на 1.» Как только значение переменной i станет равно 10, выполнение цикла прекратиться.
Чуть более сложным примером цикла является цикл for. Про него Вы можете прочитать сами в документации по MQL4.
Функция – программа в миниатюре
Ещё одним важным инструментом языка MQL4 являются функции. По сути своей, функция – это именованный блок кода, отвечающий за решение какой-то конкретной задачи. Это такая программа в миниатюре: у функции есть свои входные параметры, а также она может сообщать результат своей работы. Функции – это очень и очень мощный инструмент любого языка программирования, который добавляет в код внутренней структурированности, а так же позволяет разбивать задачи на подзадачи, реализуя принцип модульности.
Функции в языке MQL4 бывают пользовательские и библиотечные. Пользовательские функции – это те функции, которые программист самостоятельно вводит в свою программу, создавая их описание в исходном коде. В рамках данной статьи мы не будем рассматривать эту тему.
Библиотечные функции – это функции, уже определенные за вас внутри языка MQL4. Для использования такой функции (или, говоря корректно, для вызова данной функции) требуется указать её имя, после чего в круглых скобках через запятую указать все необходимые ей параметры. Например,
Alert( “1” );
В данной строчке мы вызываем уже знакомую нам функцию Alert, которая отображает на экране сообщение. В круглых скобках мы указываем её параметры (в данном случае – строку «1»).
А что насчет других функций? Как узнать, что какая функция делает, и какие у неё параметры? Ответ на этот вопрос можно получить в документации по языку MQL4.
Внимание! Параметры функции должны передаваться в том же порядке и количестве, которое указано в документации. Если функция принимает два аргумента, ей нельзя передать три. Если функция работает с целыми числами, то она не будет работать со строками. Обращайте на это внимание, когда будете читать документацию!
Как это все применять?
В данной статье я постарался дать Вам максимально короткий, но в тоже время ёмкий обзор того, что же представляет собой программа на языке MQL4, и что надо сделать, чтобы суметь её самостоятельно модифицировать. Разумеется, скорее всего, с первой попытки у Вас это не получится. Здесь, как и в любом серьёзном деле (а программирование – это очень серьёзно), требуется практика, практика и ещё раз практика.
Начинать лучше всего с простых индикаторов или скриптов. Можно разобраться с их алгоритмом, добавить в код вывод сообщений (сначала какого-нибудь простого, затем можно перед каждым смысловым блоком), чтобы перебороть первый страх модификации. А дальше уже можно начинать что-то редактировать или править.
На мой взгляд, в данном вопросе важны 2 вещи:
1) Не забывать про документацию и поиск в Интернете. Каждый раз, когда Вы встречаете какую-то команду, которую Вы не понимаете, открывайте документацию и ищите её. Пытайтесь понять, что именно она делает и как её можно «прочитать» по-русски.
2) Не бойтесь спрашивать на форумах. Это можно сделать даже на форуме данного журнала, ForexSystems.ru, где есть раздел по MQL4. Любой непонятный кусок кода можно выложить на нем и попросить более опытных участников объяснить, что и как он делает.
Вооружившись двумя этими правилами, можно разобраться практически с любой программой. Разумеется, поначалу это может (и будет) требовать достаточно много времени и усилий. Однако, по мере появления опыта, данный процесс будет становиться все проще и легче. Главное – это непрерывная работа. Если вы будете стараться вникнуть в суть – у вас все получится!
Если же Вы хотите освоить язык программирования MQL4 под руководством опытного программиста и научиться создавать полноценные программы полностью самостоятельно, то заходите на мой сайт и записывайтесь на полноценный курс изучения MQL4, где мы с вами детально все изучим «от» и «до».