Функции в MQL4: что они из себя представляют и как их использовать?

Для новичков в программировании функции в MQL4 могут показаться сложными, и может потребоваться некоторое время для полного понимания их потенциала.

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

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

Мы можем определить функцию как часть кода, которая возвращает определенное значение или выполняет какую-либо задачу.

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

Типы функций

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

У нас есть два типа функций:

  • которые возвращают результат своей работы.
  • которые не возвращают никакого результата.

Когда вы определяете функцию, вам также нужно указать тип возвращаемых данных:

тип данных функции имя функции(аргумент 1, аргумент 2, ..., аргумент x)
{
   тело функции;
   возвращаемое значение;
}

Когда нужно определить функцию без возврата значения, мы используем void:

void имя функции(аргумент 1, аргумент 2, ..., аргумент x)
{
   тело функции;
}

Как только функция определена, вы можете вызвать ее. Вызвать функцию означает запустить ее и выполнить заложенное в ней действие.

Аргументы функций

Функции могут иметь аргументы. Аргументы являются входными значениями для функции, так что некоторые действия внутри функции могут быть рассчитаны в зависимости от внешних параметров. Мы передаем аргументы в функцию при ее вызове.

Для скриптов функция OnStart() является стандартной функцией по умолчанию. Она определена как void, поэтому ничего не возвращает и вызывается без аргументов, когда скрипт выполняется на графике.

//Определение функции OnStart() как void (без возврата значения) и без аргументов
void OnStart()
  {
//---
   Alert("Привет, мир!");
  }
//+---

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

int OpenBuyOrder(double LotSize, double StopLoss, double TakeProfit) {
        int Ticket = OrderSend(Symbol(),OP_BUY,LotSize,Ask,StopLoss,TakeProfit);
        return(Ticket);
}

Эта функция имеет три аргумента: LotSize, StopLoss и TakeProfit.

Аргументы – это переменные, которые используются только внутри функции. Их значение присваивается вызывающей функцией.

Вот как мы будем вызывать эту функцию в коде, используя константы:

    OpenBuyOrder(2, 1.5550, 1.6050);

Это позволит нам разместить ордер на покупку 2 лотов со стоп-лоссом 1,5550 и тейк-профитом 1,6050.

Аргументы могут иметь значения по умолчанию. Это означает, что если параметр явно не передан функции, аргумент примет значение по умолчанию. Значения аргументов по умолчанию всегда будут в конце списка аргументов. Вот пример функции с несколькими значениями по умолчанию:

int DefaultValFunc(int Ticket, double Price, int Number = 0, string Comment = NULL)

Эта функция имеет два аргумента со значениями по умолчанию, Number и Comment, со значениями по умолчанию 0 и NULL соответственно. Если мы хотим использовать значения по умолчанию для Number и Comment, мы просто пропускаем эти аргументы при вызове функции:

    DefaultValFunc(TicketNum,UsePrice);

Помните, что когда вы имеете дело с несколькими аргументами, которые имеют значения по умолчанию, вы можете опустить аргументы, только если вы хотите использовать значения по умолчанию для всех оставшихся аргументов.

Примеры функций

Рассмотрим пример некоторых простых пользовательских функций, которые вы можете создать.

//Сначала мы определяем функцию с именем Sum, которая возвращает значение типа int и принимает два параметра типа int - a и b.
int Sum (int a, int b){
   //Внутри функции мы можем объявлять другие переменные. В этом случае мы объявляем переменную типа int s, которая является суммой a и b
   int s=a+b;
   //Далее функция возвращает значение s
   return s;
}

//MetaTrader вызывает функцию OnStart(), когда скрипт запускается на графике
//OnStart() не имеет параметров и не возвращает никакого значения
void OnStart()
{
   //Объявляется новая переменная total типа int
   //Ей присваивается значение функции Sum, которой передаются значения 1 и 2
   int total=Sum(1,2);
   
   //Выводится переменная total
   Print(total);
   
   //Sum также может быть вызвана из другой функции, в данном случае Print
   //Sum передаются значения 10 и 20
   Print(Sum(10,20));

}

функции в mql4

Рассмотрим функцию, которая не возвращает никакого значения.

//Сначала мы определяем функцию с именем Sum, которая не возвращает никакого значения, а только выполняет действие.
//Функция принимает два параметра int - a и b
void Sum(int a, int b){
   //Внутри функции мы объявляем переменную типа int s, которая является суммой a и b
   int s=a+b;
   //Sum выводит значение s
   Print(s);
}

//MetaTrader вызывает функцию OnStart(), когда скрипт запускается на графике
//OnStart() не имеет параметров и не возвращает никакого значения
void OnStart()
{

   //Вызывается функция Sum, которая выполняет свою задачу
   Sum(10,10);

}

функции в mql4, которые не возвращают значения

Функция, которая возвращает строковое значение.

//Определяем функцию CreateHello, которая возвращает строку с аргументом типа string
string CreateHello(string name)
{
   //Прикрепляем к функции Привет
   string s="Привет "+name;
   //Sum выводит значение s
   return s;
}

//MetaTrader вызывает функцию OnStart(), когда скрипт запускается на графике
//OnStart() не имеет параметров и не возвращает никакого значения
void OnStart()
{

   //Мы вызываем функцию CreateHello и печатаем Привет, а затем добавляем строку с именем
   Print(CreateHello("Александр"));

}

функция в mql4, которая выводит строковое значение

Давайте создадим функцию PipPoint(), которая вычисляет количество десятичных знаков в текущей валютной паре и автоматически настраивается для 3-х или 5-ти значных брокеров. Для пар с йеной функция возвращает 0,01. Для всех остальных пар (4 и 5 цифр) функция возвращает 0,0001.

Вот как мы будем вызывать функцию из кода:

    double UsePoint;
    UsePoint = PipPoint();

Мы объявляем переменную типа double с именем UsePoint. Затем мы вызываем функцию PipPoint() и присваиваем ей результат UsePoint.

Вот код для функции PipPoint():

    double PipPoint()
      {
        if(Digits == 2 || Digits == 3) double UsePoint = 0.01;
        else if(Digits == 4 || Digits == 5) UsePoint = 0.0001;
        return(UsePoint);
}

Первая строка – это объявление нашей функции. Как и переменные, функции имеют тип данных и используют те же типы данных, что и переменные. Тип данных зависит от данных, которые возвращает функция. Поскольку эта функция возвращает дробное число, мы используем тип данных double.

Тело функции содержится в скобках {}. У нас есть оператор if-else, который оценивает количество цифр после запятой и присваивает соответствующее значение переменной UsePoint. Далее у нас идет оператор return, который возвращает значение UsePoint для нашей функции.

Лучшие, на мой взгляд, брокеры:
Загрузить еще

Добавить комментарий

Ваш e-mail не будет опубликован.