Функции в MQL

 Что такое функция mql и что она из себя представляет? По сути это просто подпрограмма, для вычисления каких то значений или выполнения каких то действий. Функция может иметь дополнительные параметры (необязательно) и может возвращать какое то значение(результат работы функции). Применение функций значительно облегчает детализацию алгоритма, например вместо того чтобы подробно расписывать действия по открытию ордера мы можем просто указать имя функции.С одной из функций мы уже знакомы, это основная функция start().

Это стандартная функция mql, она есть в любом советнике и индикаторе. Активируется эта функция с приходом каждого тика, то есть запускается она очень часто, практически постоянно.Кроме функции start есть ещё две стандартые (или основные) функции Это функции init() и deinit(). Их отличие в том что запускается они только один раз, init при запуске советника(установке его на график), а deinit() при выходе из советника. Теперь посмотрим из чего состоит любая функция:

Заголовок функции - например int start() Как видим заверщающего оператора < ; > тут ставить не надо, поскольку функция только начинается и завершать её ещё рановато))))) Далее идёт тело функции, (по другому блок операторов) Это то что пишется в фигурных скобках { }. Кстати фигурные скобки используются не только в функциях. Они предназначены для обьединения нескольких операторов в один блок. Многие составные операторы используют фигурные скобки. Внутри этих скобок мы видим оператор выхода из функции return();

В целом функция mql выглядит так:

int start()

{

return(0);

}

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

Ну и остался тип функции , в нашем случае int. Тип функции определяется по возвращаемому значению, проще говоря -если результатом работы функции будет значение типа int (целое число) то и сама функция долна быть типа int.

Входные параметры могут быть разных типов, к примеру цена и количество ордеров. в любом случае цена у нас определяется типом double, а количество ордеров типом int (не можем ведь мы окрыть 3,5 ордера)))))))))

Поэтому типы входных параметров нужно указывать явно, например:

double my_function(int count, double prices)
{

double res;

//тут блок операторов функции

return(res);

}

В этом примере мы определили свою пользовательскую функцию типа double с именем my_function. Эта функция имеет 2 входных параметра разных типов ( int и double ) и возвращает значение типа double Другими словами мы берём переменные count и prices и передаём в функцию. Функция производит какие то вычисления и результат записывает в переменной res. Это и будет возвращаемое значение. Теперь мы можем в любое время вызвать эту функцию из любой другой, например из start.

int start()

{

double func = my_function ( 1 , 1.3255 );

return(0);

}

//раздел обьявления функций

double my_function(int count, double prices)

{

double res;

//тут блок операторов функции

return(res);

}

Тут мы передаём в функцию 2 значения, 1 и 1.3255. Функция производит какие то вычисления и возвращает результат. Этот результат нужно где то сохранить, поэтому мы определили переменную для хранения результата работы функции (func) Почему в функции start() нельзя использовать переменную res??? Потому что эта переменная объявлена внутри другой функции, то есть действует только в пределах той функции, в которой она обьявлена. При выходе из функции все переменные обьявленные внутри её уничтожаются. Если попытаться использовать такие переменные, например так:

int start()
{

my_function ( 1 , 1.3255 );

double func =res;

return(0);

}

//раздел обьявления функций

double my_function(int count, double prices)

{

double res;

//тут блок операторов функции

return(res);

}

компилятор выдаст ошибку, "не определена переменная res".

 

 

 Назад

 

 

TEXT.RU - 100.00%

 

Комментарии (0)

Нет комментариев. Ваш будет первым!

Яндекс.Метрика