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


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

 

Функция Period();

Первая функция, которую мы рассмотрим, называется Period. Она совсем простая. В MQL4 используется для определения того таймфрейма, на котором открыт график. Для примера, пропишем эту функцию Period в блоке OnTick. Выведем ее значение через Comment():

void OnTick()
{
Comment(Period());
}

Компилируем. Переходим в терминал и смотрим результат:

функция "Period"- показывает тот период в минутах на котором стоит график

 

Что мы получили? У нас график открыт на таймфрейме М1 – соответственно в левом верхнем углу Comment() вывел нам значение Period, равное 1.

Если график будет открыт на М5 – то результат будет 5,  на М15 – 15. На М30 – 30. На Н1 – 60, на Н4 – 240. D1 – 1440. И так далее. То есть, данная функция Period() показывает тот период в минутах, на котором открыт наш график.
 

Функция Sleep

Следующая функция называется Sleep(). Это так называемая функция сна в MQL4. Для чего она нужна? Sleep() придерживает работу нашего кода MQL на заданное количество миллисекунд.

Например, рассмотрим блок OnTimer, который работает по секундам. Внутри него напишем команду Alert. Внутри которой, текст — «внимание»:

void OnTimer()
{
Alert("внимание");
}

 

Компилируем и смотрим:

Через каждую секунду вызывается команда Alert

 

Как результат — через каждую секунду у нас вызывается команда Alert. Теперь берем команду Sleep(), ставим ее после Alert и задаем этой функции Sleep входящее значение в миллисекундах. Например, 5000 миллисекунд, что равно 5 секундам:

void OnTimer()
{
Alert("внимание");
Sleep(5000);
}

 

Что из этого должно получиться? Функция Sleep должна заморозить выполнение всего нашего кода на 5 секунд. По истечении 5 секунд  код снова начнет выполняться.

Alert в данном случае уже должен будет работать не через 1 секунду, как ранее в примере, а через 5 секунд. И все это потому, что стоит функция Sleep, которая замораживает работу всего нашего советника.

Компилируем, переходим в график и смотрим результат работы с функцией Sleep:

Окно Алерт - сигнал подается каждые 5 секунд

 

Теперь у нас Alert действительно выводит сообщения через каждые 5 секунд.

Данная функция Sleep() нам будет нужна при обработке ошибок в MQL4 при открытии и модификации ордеров. Это мы изучим в следующих уроках.

 

Функция NormalizeDouble

Зачем нужна функция NomalizeDouble() в MQL4? Для примера давайте сразу перейдем в блок OnTick и выведем при помощи Comment значение цены Bid:

void OnTick()
{
Comment(Bid);
}

 

Компилируем, проверяем:

отображение цены Bid

 

На графике в верхнем левом углу появляется цена Bid. Она имеет красивое значение в пятизначных котировках. Но дальше, когда начнутся какие-то математические операции с данным числом, у этого числа начнут выводиться очень большие цифры. К примеру, разделим Bid на Ask.

void OnTick()
{
Comment(Bid/Ask);
}

 

Компилируем. Смотрим, что у нас получилось:

значение отношения цены Bid к цене Ask

 

Данное число у нас получилось с большим и не нужным хвостом 0,99991279785543. Этот хвост из лишних цифр потом в итоге может привести к ошибке.

К примеру, если мы будем складывать 0,9999 постоянно друг с другом – это будет один результат. А если мы будем складывать число с «хвостом» , то впоследствии результат уже будет другим. Сумма будет больше. Соответственно, при наличии данного «хвоста» результаты у нас в итоге будут неверные. Это может привести к ошибкам. Например,  к неправильным вычислениям лота при открытии ордера, к неправильным вычислениям цены открытия, к неправильной установки цен StopLoss, TakeProfit и прочее.

Вот для того, чтобы избежать данной ошибки, и существует в языке программирования MQL4 функция NormalizeDouble. Что она делает? Она преобразует число в тот вид, который мы ей укажем.

Для разбора работы функции NormalizeDouble() давайте вспомним предопределенную переменную в MQL4 — Digits (мы ее уже с Вами изучали в этой статье). Digits показывает сколько знаков после запятой у валютной пары, находящийся на графике.

Возвращаемся к NormalizeDouble — она имеет свои входящие значения. Эти входящие значения состоят из двух частей. Первая часть – то число, которое нужно нормализовать. В нашем случае нам нужно нормализовать выражение: Bid деленное на Ask. Далее через запятую мы вводим второе входящее значение в NormalizeDouble, которое обозначает то, как нормализовать данное выражение, то есть, как его сократить.

В нашем примере, в качестве второго входящего значения NormalizeDouble пропишем переменную Digits. Она возвратит нам количество знаков после запятой:

void OnTick()
{
Comment(NormalizeDouble(Bid/Ask,Digits));
}

 

Соответственно, мы это выражение нормализуем, то есть приведем в порядок именно с точки зрения 5 знаков после запятой.

Компилируем, смотрим результат:

Отношение цены Bid к цене Ask в пятизначной котировке

 

Всё. «Хвост» убрался, и значение показывается только в виде 5-значных котировок. Теперь, когда мы будем производить математические действия: складывать, делить, умножать и при этих всех операциях нормализовывать получившееся результаты при помощи  NormalizeDouble – то у нас всегда будет пятизначное число.

Функция – AccountBalance

Последнюю встроенную функцию в MQL4, которую мы рассмотрим в этой статье — AccountBalance(). Она выводит информацию о нашем аккаунте.

На самом деле различных функций с информации об аккаунте очень много. Чтобы все это рассмотреть и понять, проще всего воспользоваться справочником. Для этого в редакторе кода MetaEditor в любом месте прописываем наименование нашей функции, то есть, AccountBalance(). Выделяем ее и нажимаем F1, как следствие, откроется справочник MQL. В котором подробно описано за что эта функция отвечает:

Информация об AccountBalance в справочнике

 

AccountBalance – выводит значение баланса активного счета.

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

void OnTick()
{
Comment ("Баланс Аккаунта = ",AccountBalance());
}

 

Компилируем и смотрим на результат:

Баланс аккаунта

 

Как итог использования AccountBalance() — в окне графика в верхнем левом углу мы видим баланс нашего счета. Он равен 101913,56 .
 

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

 

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

 

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

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

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

 

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

 

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

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



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