Циклические операторы
Циклический оператор While повторяет выполнение определенных команд до тех пор, пока контрольное выражение имеет значение True (условие верно). Когда контрольное выражение получает значение False (условие неверно), то происходит выход из цикла. Синтаксис оператора:
While Условие Begin Команда(ы); End;
Условие – это любое логическое выражение, называемое контрольным условием. Команда(ы); - команда или набор команд на языке TL.
Например, следующий оператор используется для подсчета числа баров, общий объем торговли по которым не должен превышать 200 тыс.:
Variables: TotalVolume(0), Counter(0);
TotalVolume = 0; Counter = 0;
While TotalVolume < 200000 Begin TotalVolume = TotalVolume + Volume[Counter]; Counter = Counter + 1; End;
Сначала мы объявляем две переменные TotalVolume и Counter. Далее мы присваиваем этим переменным значение 0. Команды внутри оператора While повторяются до тех пор, пока контрольное выражение (TotalVolume < 200000) не получит значение False.
Бесконечные циклы. При использовании циклического оператора While возможно, что контрольное выражение никогда не получит значение False – это называется бесконечным циклом. Возвращаясь к предыдущему примеру, можно допустить, что суммарный объем так и не достигнет 200 тыс., что приведет к зацикливанию скрипта. Поэтому рекомендуется всегда предусматривать в коде возможность безопасного выхода из цикла. Мы можем изменить в предыдущем примере контрольное выражение, чтобы оно получало значение False после 20 баров, даже если объем не достигнет 200 тыс.:
Variables: TotalVolume(0), Counter(0);
TotalVolume = 0; Counter = 0;
While TotalVolume < 200000 AND Counter < 20 Begin TotalVolume = TotalVolume + Volume[Counter]; Counter = Counter + 1; End;
Циклический оператор For позволяет повторят набор команд определенное число раз. Синтаксис оператора:
For Value = N To|Downto M Begin Команда(ы); End;
Здесь Value – это числовая переменная, N и M – числовые выражения. Команда(ы); - команда или набор команд на языке TL. Число шагов, которое проходит цикл, определяется значением переменной Value, которая называется контрольной переменной.
Сначала значение контрольной переменной устанавливается равным N, а затем на каждом шаге цикла автоматически увеличивается или уменьшается на единицу. Если в операторе используется слово To, то на каждом шаге цикла переменная увеличивается на единицу. Если используется слово Downto, то на каждом шаге цикла переменная уменьшается на единицу.
Если в операторе For происходит увеличение контрольной переменной, а значение N больше значения M, то команды внутри цикла выполняться не будут. Также если в операторе For происходит уменьшение контрольной переменной, а значение N меньше значения M, то команды внутри цикла выполняться не будут.
Циклы на основе оператора For обычно используются для того, чтобы получить информацию о предыдущих барах. Например, следующий оператор используется для вычисления суммарного объема торговли по последним 10 барам:
Variable: TotalVolume(0);
For Value = 0 To 9 Begin TotalVolume = TotalVolume + Volume[Value]; End;
В этом примере контрольная переменная Value используется не только как счетчик шагов цикла, но и как номер бара, объем торговли по которому нужно узнать.
Вы можете выйти из цикла путем изменения значения контрольной переменной. Воспользуемся предыдущим примером. Если Вы хотите прекратить суммирование, как только объем достигнет 300 тыс., то используйте код следующего вида:
Variables: TotalVolume(0);
For Value = 0 To 9 Begin TotalVolume = TotalVolume + Volume[Value];
If TotalVolume > 300000 Then Value = 10; End;
Здесь если объем торговли превысит 300 тыс., то контрольной переменной присваивается значение 10, не входящее в исходный диапазон, вследствие чего происходит выход из цикла. |