Содержание статьи: (кликните, чтобы перейти к соответствующей части статьи):
Здравствуйте, дорогие друзья. В материале этой статьи мы будем рассматривать циклы в MQL4 под названием for.
Описание работы цикла for в MQL4
Несколькими статьями ранее, мы с Вами изучали функции OnTick() и OnTimer(), которые сами по себе являются циклическими.
OnTick() выполняется циклично по тикам, а OnTimer() выполняется циклически по заданному нами таймеру. Но, эти циклы работают на протяжении всей «жизни» нашего советника. Пока советник работает, OnTick() так и будет работать, с OnTimer() аналогичная ситуация.
Бывают такие моменты, когда внутри этих функций необходимо сделать небольшие циклы, которые будут выполняться внутри себя, внутри маленького кода и какое-то небольшое время. Как это сделать?
Есть в MQL4, так называемый цикл for():
for () { }
где в круглых скобках () мы пишем входящие значения, а в фигурных скобках {} мы будем прописывать то, что нам нужно выполнить в рамках этого цикла.
Что такое входящие значения? Это то, как долго должен выполняться цикл, по каким-то условиям. То есть, то, когда цикл должен начаться и когда он должен закончиться.
Прописывается это все следующим образом.
for (int i=0; i<10; i++) { }
Сначала мы объявляем целочисленную переменную int «i» и присваиваем ей значение ноль int i = 0. Далее, мы прописываем условие, при котором будет выполняться данный цикл: пока «i» меньше 10, то есть, i < 10.
Следующий параметр, i++. Иначе его еще можно записать так i=i+1, то есть, новое значение «i» равно старое значение «i» плюс один. Но, в программировании очень распространена краткая запись этого процесса как (i++). Этим параметром мы увеличиваем «i» на 1.
Что мы имеем? Объявлена переменная «i», ей присвоено первоначальное значение ноль, дальше, мы спрашиваем: «i<10?». Да, меньше, потому что ноль меньше десяти. Соответственно, цикл запускается, к «i» прибавляется единица (i=1).
После, компьютер идет дальше, выполняет все, что прописано в теле for{}, и вновь возвращается к условию нашего цикла и спрашивает: «i<10?». Да меньше, так как единица меньше десяти. For будет работать дальше, к «i» снова прибавляется единица (i=2).
Далее, компьютер вновь переходит к телу for {}, выполняет все, что там прописано, возвращается к циклу и спрашивает: «i<10?». Да, меньше, так как два меньше десяти. Запускается новая итерация цикла, к «i» прибавляется единица, (i=3) и так далее, пока «i» не станет равно десяти.
Когда это произойдет, for выполнится, вернется к условию и спросит: «i<10?». Нет, i уже не меньше, а равно 10. После чего, цикл просто закончит свою работу.
Работа с циклом for на практике
Давайте посмотрим, как это все работает на практике в коде MQL4.
Пишем следующий программный код:
#property copyright "Copyright (с) Антон SanGReal Invest" #property link "https://sgr-tradeinvest.ru" #property version "1.00" #property strict int y = 0; void OnTick() { for (int i=0; i<10; i++) { y=y+1; } Comment(y); }
Что у нас должно получиться? В «шапке» мы объявили целочисленную глобальную переменную «y», которая равна нулю.
Далее, в блоке OnTick() у нас запускается цикл, при первом прохождении цикла переменная «y» получит значение 1. Потом for() пойдет работать второй раз, при котором переменная «y» получит значение 2 и т.д.
То есть, «y» у нас будет получать новые значения, пока выполняется цикл. Как for() выполнится, так Comment() выведет «y», с конечным значением, которое в итоге у нас получится в течение 10 итераций цикла.
Давайте проверим. Компилируем код, открываем наш терминал, переносим советник на график, нажимаем «OK».
На графике в левом верхнем углу мы видим меняющиеся числа (10, 20, 30, 40 и т.д.).
Что у нас с Вами получилось? Блок OnTick() у нас работает циклично с приходом каждого нового тика. Как новый тик пришел, наш цикл for() выполнился 10 раз, поэтому итого выведенное значение «y» на экран у нас получилось изначально 10.
Пришел второй тик, OnTick() снова запустилась, запустился и наш цикл for(). После того, как он вновь выполнился 10 раз, «y» стала уже равна 20 и так далее. В общем, с приходом каждого тика у нас будет запускаться цикл, который будет выполняться 10 итераций и, получается, что «y» на каждом тике будет увеличиваться на 10.
Если у Вас появились какие-то вопросы по материалу данной статьи, задавайте их в комментариях ниже. Я Вам обязательно отвечу. Да и вообще, просто оставляйте там Вашу обратную связь, я буду очень рад.
Также, делитесь данной статьей со своими знакомыми в социальных сетях, возможно, этот материал кому-то будет очень полезен.
Вот, собственно, и вся работа циклов. Она достаточно простая и понятная. Далее, в реальной практике программирования советников Вам станет все еще понятнее и как само собой разумеющееся.
Переходите к следующей статье. Где мы с Вами рассмотрим то, без чего точно не обойдется ни один Форекс советник — операторы условия в MQL4 «если, иначе»: if else.
Благодарю за внимание.
Другие статьи по теме Программирование на MQL4 Вы можете просмотреть в данном содержании практических уроков по MQL.
Понравился материал статьи?
Добавьте эту статью в закладки Вашего браузера, чтобы вернуться к ней еще раз. Для этого, прямо сейчас нажмите на клавиатуре комбинацию клавиш Ctrl+D
С уважением, Антон.
Обучающий Форекс портал SanGReal Invest