Содержание статьи: (кликните, чтобы перейти к соответствующей части статьи):


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

Структура функций в MQL4

Первое, что я хочу рассмотреть в данном уроке – это структуру функций в MQL4, из чего они состоят. К примеру, вот функция OnInit():

int OnInit ()
   {
    EventSentTimer(1);
    return(INIT_SUCCEEDED);
   }

 

Из чего состоит эта функция?

  • первое из чего состоит данная функция — это имя (OnInit).
  • второе – это объявление типа данной функции (int). Так как int – целочисленный тип, то данная функция в итоге нам возвращает целочисленное значение.
  • третий элемент функции – это входящие значения ( обозначается как круглые скобки () ). Входящие значения могут быть, а может их не быть. В данном случае их нет. Поэтому круглые скобки пустые. Но сами круглые скобки в функциях должны быть всегда!
  • четвертый элемент – это тело функции ( {} ) — фигурные скобки. На это надо обратить самое пристальное  внимание. Именно в теле функции, в этих фигурных скобках пишется весь тот код, который будет выполняться в данной функции, то есть ради которого создавалась эта функция.

 

Теперь поговорим о командах в MQL4. Все команды должны писаться обязательно в теле функции! Неважно, в какой функции….. – во всех. К примеру, пишем команду alert(). Вам знакома эта команда по предыдущим статьям. Иногда люди совершают ошибку, записывая команды за пределом тела функции, вот так, например:

{

}
Alert("текст");

 

Или так:

Alert("текст");

//БЛОК OnTimer()
Void Ontimer()
  { 

  }

 

Это все неправильно. Все команды в MQL4 пишутся строго внутри тела функции, внутри фигурных скобок, то есть, так:

{
Alert("текст");
}

 

Это надо помнить всегда! Будьте с этим предельно осторожны и внимательны. Необязательно команда должна писаться в теле функции OnTick(). Если будет какая-то наша собственная функция, например, My() – то у нее тоже будет свое тело функции, которое будет прописано в фигурных скобках, и, собственно, именно там мы и можем прописать все команды:

void My ()
{
Alert("текст");
}

 

Еще раз резюмируем всё выше описанное. Каждая функция в своем составе имеет 4 части:

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

 

Структура команд в MQL4

Теперь давайте обратимся к самой структуре команд. Она схожа со структурой функции. Например, возьмем команду alert().

Alert("текст");

 

Именем здесь будет являться Alert.

Входящее значение в круглых скобках («текст») .

И обязательно в конце у команд стоит точка с запятой.

У функции точки с запятой нет. У команд всегда в конце стоит точка с запятой.

Рассмотрим пример — вот наша функция My(). Мы эту функцию можем вызвать из любой другой функции. Например, из OnTimer(). Как это делается? Нужно написать команду вызова нашей функции из функции OnTimer():

void OnTimer()
   {
   My();
   }

 

Вот мы и вызвали нашу функцию My при помощи команды My();. Этот вызов функции и называется команда. Мы скомандовали компьютеру о том, чтобы он перешел к нашей функции. То есть, когда блок OnTimer() будет выполняться, компьютер будет выполнять какой-то код, потом дойдет до нашей команды. И эта команда о чем ему говорит? О том, что нужно выполнить функцию My(). Соответственно, компьютер выйдет из функции OnTimer(), найдет среди всех прочих функций нашу функцию My(), выполнит ее и возвратится обратно.

 

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

К чему я все это говорю? Если Вы пишете какую-либо функцию, то Вы ее можете писать вне тела других функций – в пустом поле. А если мы говорим о каких-либо командах – то они обязательно пишутся внутри тела функции, которая Вам нужна в данный период времени. И у каждой команды обязательно нужно ставить точку с запятой.

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

int x=5;

 

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

Глобальное объявление переменных может писаться вне тела функций. Именно глобальное, когда мы объявляем переменные в шапке:

#property copyright "copyright 2016, Anton"
#property link       ""
#property version    "1.00"
#property strict

int x = 5;

 

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

 

Условие if () и фигурные скобки

И теперь еще один момент по фигурным скобкам и условиям if(). Здесь также очень часто совершаются ошибки, которые мы рассматривали выше.

Условия if() также пишутся только внутри функции. Условие не может быть написано в чистом поле. Оно может быть написано ТОЛЬКО внутри функции. Еще раз обращаю на это внимание. Внутри тела, внутри других вот этих вот фигурных скобок. То есть вот так:

void OnTimer()
{
   if (a>b)
   {   
   }
 }

 

Сама структура условий такая. Имя, то есть  if (если), круглые скобки – входящее значение данного условия. То есть, само условие (в нашем случае это a>b). И тело условия — фигурные скобки {}. То есть то, что должно выполниться при истинном исходе данного условия. Если условие – истина, то выполняется тело этого условия. Если не истина — то ничего не выполняется.

void OnTimer()
{
   if (a>b)
   {
     c=3;
   }
 }

 

И вот само это условие if(){} обязательно пишется только внутри фигурных скобок какой-то функции, например, внутри фигурных скобок этой функции OnTimer(){}.

Если у Вас появились какие-то вопросы по материалу данной статьи, задавайте их в комментариях ниже. Я Вам обязательно отвечу. Да и вообще, просто оставляйте там Вашу обратную связь, я буду очень рад.

 

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

 

На этом по данной теме все.

Переходите к следующей статье. Где мы с Вами рассмотрим небольшой секрет, который позволит Вам уменьшить количество допускаемых ошибок в MQL4 и, как следствие, уменьшить в разы Ваше время, затрачиваемое на их поиск!

 

Благодарю за внимание.
 
Другие статьи по теме Программирование на MQL4 Вы можете просмотреть в данном содержании практических уроков по MQL.

 

Понравился материал статьи?
Избранные закладкиДобавьте эту статью в закладки Вашего браузера, чтобы вернуться к ней еще раз. Для этого, прямо сейчас нажмите на клавиатуре комбинацию клавиш Ctrl+D

 

С уважением, Антон.

Обучающий Форекс портал SanGReal Invest
 

strelkaХотите изучить MQL4 быстро, легко и бесплатно?
MQL4 подробно и с самого нуля. Фишки, секреты и только практика
А также, СУПЕРБОНУС - разбор стратегии и программного MQL кода советника SGR


 


Вам это может быть интересно. Другие статьи нашего обучающего портала: