Содержание статьи: (кликните, чтобы перейти к соответствующей части статьи):
Здравствуйте, дорогие друзья. В данном уроке мы рассмотрим работу простейших встроенных функций MQL4. Не смотря на то, что эти функции простейшие, Вам в любом случае нужно с ними ознакомиться, так как в дальнейшем мы их будем использовать в коде наших советников.
Функция Period();
Первая функция, которую мы рассмотрим, называется Period. Она совсем простая. В MQL4 используется для определения того таймфрейма, на котором открыт график. Для примера, пропишем эту функцию Period в блоке OnTick. Выведем ее значение через Comment():
void OnTick() { Comment(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. Теперь берем команду Sleep(), ставим ее после Alert и задаем этой функции Sleep входящее значение в миллисекундах. Например, 5000 миллисекунд, что равно 5 секундам:
void OnTimer() { Alert("внимание"); Sleep(5000); }
Что из этого должно получиться? Функция Sleep должна заморозить выполнение всего нашего кода на 5 секунд. По истечении 5 секунд код снова начнет выполняться.
Alert в данном случае уже должен будет работать не через 1 секунду, как ранее в примере, а через 5 секунд. И все это потому, что стоит функция Sleep, которая замораживает работу всего нашего советника.
Компилируем, переходим в график и смотрим результат работы с функцией Sleep:
Теперь у нас Alert действительно выводит сообщения через каждые 5 секунд.
Данная функция Sleep() нам будет нужна при обработке ошибок в MQL4 при открытии и модификации ордеров. Это мы изучим в следующих уроках.
Функция NormalizeDouble
Зачем нужна функция NomalizeDouble() в MQL4? Для примера давайте сразу перейдем в блок OnTick и выведем при помощи Comment значение цены Bid:
void OnTick() { Comment(Bid); }
Компилируем, проверяем:
На графике в верхнем левом углу появляется цена Bid. Она имеет красивое значение в пятизначных котировках. Но дальше, когда начнутся какие-то математические операции с данным числом, у этого числа начнут выводиться очень большие цифры. К примеру, разделим Bid на Ask.
void OnTick() { Comment(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 знаков после запятой.
Компилируем, смотрим результат:
Всё. «Хвост» убрался, и значение показывается только в виде 5-значных котировок. Теперь, когда мы будем производить математические действия: складывать, делить, умножать и при этих всех операциях нормализовывать получившееся результаты при помощи NormalizeDouble – то у нас всегда будет пятизначное число.
Функция – AccountBalance
Последнюю встроенную функцию в MQL4, которую мы рассмотрим в этой статье — AccountBalance(). Она выводит информацию о нашем аккаунте.
На самом деле различных функций с информации об аккаунте очень много. Чтобы все это рассмотреть и понять, проще всего воспользоваться справочником. Для этого в редакторе кода MetaEditor в любом месте прописываем наименование нашей функции, то есть, AccountBalance(). Выделяем ее и нажимаем F1, как следствие, откроется справочник MQL. В котором подробно описано за что эта функция отвечает:
AccountBalance – выводит значение баланса активного счета.
Давайте выведем баланс счета на графике через Comment(). Для этого, пропишем следующий код:
void OnTick() { Comment ("Баланс Аккаунта = ",AccountBalance()); }
Компилируем и смотрим на результат:
Как итог использования AccountBalance() — в окне графика в верхнем левом углу мы видим баланс нашего счета. Он равен 101913,56 .
Если у Вас появились какие-то вопросы по материалу данной статьи, задавайте их в комментариях ниже. Я Вам обязательно отвечу. Да и вообще, просто оставляйте там Вашу обратную связь, я буду очень рад.
Также, делитесь данной статьей со своими знакомыми в социальных сетях, возможно, этот материал кому-то будет очень полезен.
В этой статье мы рассмотрели лишь несколько основных встроенных функций в MQL4, которые нам пригодятся в дальнейшем нашем обучении. Но на самом деле, встроенных в MQL4 функций гораздо больше. При надобности, Вы сможете их изучить самостоятельно, используя справку MQL.
На этом все. В следующей статье мы рассмотрим математические функции в MQL4, которые нам понадобятся при расчетах значений стоп лоссов, профитов и прочее.
Другие статьи по теме Программирование на MQL4 Вы можете просмотреть в данном содержании практических уроков по MQL.
Понравился материал статьи?
Добавьте эту статью в закладки Вашего браузера, чтобы вернуться к ней еще раз. Для этого, прямо сейчас нажмите на клавиатуре комбинацию клавиш Ctrl+D
С уважением, Антон.
Обучающий Форекс портал SanGReal Invest