Пользовательские функции — чудесная штука и очень облегчает жизнь программисту.
Функция – это отдельный фрагмент кода, который выполняет какую-то задачу. Может находится в любом месте программы вне других функций. Например может быть функция которая рассчитывает лот, функция проверки критериев для открытия ордеров, для закрытия ордеров, перевод в безубыток и тд.
Если советник достаточно сложный и имеет сотни, а то и тысячи строк кода, и это все будет написано в куче… вносить изменения или искать ошибки будет весьма затруднительно. Даже визуально легче читать код когда он разбит на функции.
Функции уменьшают размер кода программы. Когда по ходу программы нужно много раз делать одни и те же вычисления, придется каждый раз повторять код. Компактнее будет раз написать функцию и потом вызывать ее в нужных местах.
Функции легко вставить в код программы. Имея набор функций (учет ордеров, трейлинг, безубыток и тд.) можно собирать из них советник как конструктор.
int MyFunction() { }
Итак, тип функции определяется типом возвращаемого ей значения. Если возвращаемое значение имеет тип int то и функцию нужно объявить как тип int.
Имя функции (MyFunction) может быть любым, кроме слов зарезервированных в языке MQL4. Например, есть стандартная функция start, так же назвать свою функцию Вам не удастся.
Функция посредством оператора renurn возвращает результат своей работы в программу.
int MyFunction() { int A = 2; int B = 3; int C = A + B; return(C); }
В нужном месте программы вызываем функцию MyFunction и получаем результат ее вычеслений.
int start() { int X = 7; X = MyFunction();// вызываем функцию MyFunction, переменная Х примет значение функции // теперь Х = 5 }
В функцию можно передавать параметры для обработки их в функции.
int MyFunc2(int A, int B) { int C = A + B; return(C); }
Имена переменных передаваемых в функцию (А, В) и имена переменных в функция могут отличатся.
int start() { int A = 4; int B = 5; int X = 7; X = MyFunc2(A, B);// вызываем функцию MyFunc2, переменная Х примет значение функции // теперь Х = 9 }
Оператор return может вернуть только одно значение. Если нужно больше, можно использовать амперсанд (&).
Эта функция среди заданного количества баров ищет максимальную и минимальную цену свечей, и возвращает два значения hi и lo.
void HiLo(int br, double & hi, double & lo) { for(int i = 1; i <= br; i++) { if(iHigh[i] > hi) hi = iHigh[i]; if((iLow[i] < lo) || (lo == 0)) lo = iLow[i]; } }
Вызов функции HiLo.
int start() { int bars = 3; double HI, LO; HiLo(bars, HI, LO);// вызываем функцию HiLo, переменная Х примет значение функции // теперь переменные HI и LO примут значения, переданные им из функции. }
Любая функция может вызывать другую функцию.
int MyFunc2(int A, int B) { int MyFunction(); int C = A + B; return(C); }
Операторы — https://forexlab.ru/mql-operator-if-else/