Полная конструкция цикла while do end

Начнем с определения слова цикл. Цикл – это совокупность явлений, процессов, составляющая кругооборот в течение определенного промежутка времени (Толковый словарь Ожегова). Цикл while многократно выполняют один и тот же код, до наступления заранее определенной ситуации или до оператора break. Оператор break разрывает цикл, выполнение кода переходит к оператору end. Мы можем задать любое условие для остановки выполнения цикла. В цикле должно быть обязательно предусмотрено условие его остановки, в противном случае цикл может выполняться бесконечно.

Цикл while выглядит следующим образом: while <условие> do<код цикла> end Читается – следующим образом, пока <условие> true (истина) код цикла выполняется снова и снова, пока <условие> не станет значением false (ложь).

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

Создадим новый lua файл для записи примера цикла while. Назовем его «007 While.lua». Создадим переменные:

local LastPrice = 100       — последняя цена сделки

local HightPrevDay = 105       — максимум предыдущего дня

Так же нам понадобится логическая переменная, которая остановит цикл, если последняя цена сделки превысит максимум предыдущего дня, объявим ее с именем EnterInPos и присвоим ей значение «NO». (Имя переменной EnterInPos это сокращение от Enter in position – вход в позицию).

local EnterInPos = «NO»       — вход в позицию не выполнен

Добавим условие, в котором проверяется цена последней сделки и максимальная цена предыдущего дня. Если цена последней сделки превысит максимум предыдущего дня, то мы выведем на экран строку «Цена последней сделки больше максимума предыдущего дня» и присвоим переменной EnterInPos значение «YES».

Теперь нам нужно откуда-то взять последнюю цену сделки. Смоделируем изменение цены инструмента с помощью функции. Напишем функцию, которая увеличивает последнюю цену сделки на 1, начальное значение установлено в переменной LastPrice, которая равняется 100. Назовем функцию LastPriceGenerate и запишем ее код в самое начало скрипта.

Из цикла на вход в функцию будет передаваться значение переменной LastPrice, в функции LastPrice будет увеличиваться на 1 и возвращаться обратно в цикл. Добавим, перед условием if LastPrice > HightPrevDay then, строку вызова функции из цикла while и поместим результат выполнения функции в переменную LastPrice.

Выполним код.

На дисплее появилась надпись «Цена последней сделки больше максимума предыдущего дня». Все сработало, как и планировали, что бы детально разобраться в работе цикла и научиться отлаживать наш код в программе SciTE, рассмотрим функцию Debug, меню Debug находится на панели инструментов. Функция Debug предназначена для пошаговой отладки кода программы. Отладка программы это пошаговое выполнение действий для устранения ошибок и отслеживания текущего состояния переменных. Мы можем посмотреть, что происходит в каждой строке кода, увидеть, как меняются значения переменных, как работает цикл и как выполняется функция. Запустим Debug для нашего кода нажатием кнопки на панели задач или выбрав в меню Debug пункт Debug/Continue или горячими клавишами Alt+R. После запуска Debug выполнение программы остановиться на строке end в конце функции LastPriceGenerate. Для перехода по строкам кода используются горячие клавиши Alt+C или кнопка на панели задач с названием Step. Одно нажатие кнопки соответствует выполнению одной строки кода. Нажмем несколько раз сочетание клавиш Alt+C пока не дойдем до строки с циклом while. Сделаем еще шаг, условие, указанное в цикле, соблюдается, и мы попадаем в тело цикла на строку где, вызывается функция LastPriceGenerate.

Наведя курсор на имя переменной, мы можем увидеть значение в переменной на данный момент, но если программа еще не дошла до объявления переменной, то ее значение мы не увидим.

Также возможен вывод значения переменных в окно выполнения программы. Если нам необходимо отслеживать изменение одной или нескольких переменных при выполнении каждой строки, то мы можем выбрать в меню Debug пункт Watch Variable или нажать Alt+W, в открывшемся окне введем имя той переменной, изменение которой хотим отслеживать и нажмем Ok. Таким образом, можно выбрать несколько переменных. Выберем для отслеживания переменные LastPrice и EnterInPos. Если навести курсор на имя переменной и нажать Alt+W, то ее имя автоматически пропишется в поле для ввода. Нажатием на сочетание клавиш Alt+C построчно выполняем код и отслеживаем изменение значений переменных.

Наш код выполняется следующим образом. Цикл while проверяет верно ли условие EnterInPos == «NO», если верно – выполняется строка с вызовом функции LastPriceGenerate и передачей в нее значения переменной LastPrice. Функция, увеличивает значение LastPrice на единицу и возвращает результат в переменную LastPrice. В следующей строке проверяется условие if LastPrice > HightPrevDay then, условие неверно значит, цикл повториться еще несколько раз, пока LastPrice не станет больше HightPrevDay. После того, как значение переменной LastPrice увеличиться до значения 106, условие if LastPrice > HightPrevDay then, будет true (истина), и выполнятся строки заключенные в конструкцию if then end, на экране появится строка «Цена последней сделки больше максимума предыдущего дня», переменная EnterInPos поменяет значение на «YES», и цикл остановится.

В языке программирования Lau существуют еще два вида циклов это цикл for и цикл repeat until. Цикл for мы подробно рассмотрим позднее, когда будем разбирать работу с таблицами. Цикл repeat until выполняет свое тело, пока условие не станет истинным, проверка условия осуществляется после выполнения тела цикла, поэтому тело цикла будет выполнено хотя бы один раз. Мы не будем использовать данный цикл в наших кодах. Если у вас возникнет желание, можете самостоятельно поэкспериментировать с данным циклом.

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